#android #c #android-ndk #neon #renderscript
#Android #c #android-ndk #neon #renderscript
Вопрос:
Я разработал 3 C / RS / Neon-встроенные версии алгоритма обработки видео с использованием Android NDK (с использованием C API для Renderscript). Вызовы C / RS / Neon будут выполняться на собственном уровне на стороне NDK из интерфейса JAVA. Я обнаружил, что по какой-то причине версия Neon потребляет много энергии по сравнению с версиями C и RS. Я использовал Trepn 5.0 для тестирования мощности.
- Может ли кто-нибудь уточнить меня относительно уровня энергопотребления для каждого из этих методов C, Renderscript — GPU, Neon Intrinsics. Какой из них потребляет больше всего?
- Каким был бы идеальный уровень энергопотребления для кодов RS?, поскольку графический процессор работает с меньшей тактовой частотой, а энергопотребление должно быть меньше!
- API-интерфейсы Renderscript ориентированы на оптимизацию энергопотребления?
Видео — 1920×1080 (20 кадров)
- C — 11115,067 мс (0,80 МВт)
- RS — 9867.170 мс (0,43 МВт)
- Встроенный Neon — 9160 мс (1,49 МВт)
Комментарии:
1. Ваша версия NEON должна быть намного быстрее, если она правильно реализована — поэтому общее энергопотребление не должно сильно влиять, например, удвоенное энергопотребление в течение половины времени должно оказывать такое же влияние на энергопотребление батареи, поскольку общее энергопотребление одинаково. Похоже, что ваша реализация NEON нуждается в некоторой оптимизации, поскольку она не намного быстрее вашего кода на C?
2. Это реализовано с использованием встроенных neon, я не делал кодирования сборки. Сравнительно ли neon потребляет больше энергии, чем RS?
3. Должно быть, что-то ужасно не так с вашими кодами NEON. Я бы проверил разборку. Либо это неправильная реализация, либо ошибка компилятора. Возможно, и то, и другое.
4. Проблема с NEON, как правило, случай попадания или промаха. Либо он не поддерживает NEON, либо он на порядок быстрее, чем версия процессора. Нет ничего лучше, чем «немного быстрее», как и ваши результаты. Должно быть, вы сделали что-то не так с NEON.
5. @ Jake Я реализую алгоритм обнаружения границ, который выполняет операцию свертки, моя версия C выполняет это, используя 2 цикла for в этих циклах, мой код вычисляет Xgradient и Ygradient (используя 2 forloops для обработки окна 3×3). Я использовал встроенные функции Neon для распараллеливания операций с градиентами X и Y.
Ответ №1:
Во-первых, энергопотребление кода сценария рендеринга зависит от типа SOC, частоты / напряжения, при которых работают процессоры, графические процессоры и т. Д.
Даже если вы посмотрите на процессоры от того же производителя, скажем, ARM, например, A15s и A9s, процессоры A15s потребляют больше энергии по сравнению с A9. Аналогично, Mali GPU4XX и 6XX также демонстрируют различия в энергопотреблении для одной и той же задачи. Кроме того, для выполнения одной и той же задачи также существуют различия в мощности между различными производителями, например, процессорами Intel и ARM. Аналогичным образом можно заметить различия в мощности между графическим процессором QCOM Adreno и, скажем, графическим процессором ARM Mali, даже если они работают на одних и тех же уровнях частоты / напряжения.
Если вы используете Nexus 5, мы получим четырехъядерный процессор A15, работающий со скоростью 2,3G на процессор. Renderscript выводит процессоры и графические процессоры на максимальную тактовую частоту. Итак, на этом устройстве я бы ожидал, что энергопотребление кода RS на основе CPU / Neon или просто CPU будет самым высоким в зависимости от типа выполняемых вами операций, а затем следует код RS GPU. Итак, в конечном итоге, при потреблении энергии тип используемого вами устройства имеет большое значение из-за различий в используемых ими SOC. В последнем поколении SOC, которые существуют, я ожидаю, что процессоры / Neon будут более энергоемкими, чем GPU.
RS повысит тактовую частоту процессора / графического процессора до максимально возможной скорости. Поэтому я не уверен, можно ли здесь провести значимую оптимизацию мощности. Даже если они это сделают, экономия энергии будет незначительной по сравнению с мощностью, потребляемой процессорами / графическими процессорами на их максимальной скорости.
Это энергопотребление является такой огромной проблемой на мобильных устройствах, что с вашими фильтрами, вероятно, все будет в порядке с точки зрения энергопотребления для обработки нескольких кадров в вычислительном пространстве изображений. Но в тот момент, когда вы выполняете renderscript в режиме реальной обработки видео, устройство очень быстро нагревается даже при более низких разрешениях видео, и тогда в игру вступают системные терморегуляторы операционной системы. Эти тепловые менеджеры снижают общую скорость процессора, что приводит к ненадежной производительности процессора renderscript.
Ответы на комментарии
Частота сама по себе не является причиной энергопотребления. Это комбинация частоты и напряжения. Например, графический процессор, работающий, скажем, на частоте 200 МГц при 1,25 В и 550 МГц при 1,25 В, скорее всего, будет потреблять ту же мощность. В зависимости от того, как в системе спроектированы домены питания, для 200 МГц должно быть достаточно примерно 0,9 В, и система теоретически должна переводить домен питания GPU на более низкое напряжение при снижении частоты. Но у разных SOC есть разные проблемы, поэтому нельзя гарантировать постоянный переход напряжения и частоты. Это может быть одной из причин, по которой мощность графического процессора может быть высокой даже при номинальных нагрузках.
Итак, для любых сложностей, если вы поддерживаете напряжение графического процессора, скажите что-то вроде 1.25V@600 МГц, ваше энергопотребление будет довольно высоким и сопоставимым с энергопотреблением процессоров, работающих на 2G@1.25V …
Я протестировал Neon intrinsic — свертку 5X5, и они довольно быстрые (3x-5x) по сравнению с использованием процессоров для той же задачи. Аппаратное обеспечение Neon обычно находится в той же области питания, что и процессоры (также известная как область питания MPU). Таким образом, все процессоры поддерживаются при напряжении / частоте, даже когда оборудование Neon работает. Поскольку Neon выполняет данную задачу быстрее, чем CPU, я не удивлюсь, если он потребляет больше энергии, чем процессор для этой задачи. Что-то должно дать, если вы получаете более высокую производительность — очевидно, это мощность.
Комментарии:
1. @ mahesh Спасибо за ваш подробный ответ, я использую Nexus 5 для тестирования. То есть вы хотите сказать, что версии CPU и Neon намного более голодны, чем версия GPU. Я твердо убежден, что графический процессор работает с меньшей тактовой частотой, чем процессор, поэтому он должен потреблять меньше энергии, предполагая, что среда выполнения RS переносит наши фильтры на графический процессор. Я не уверен, почему устройство нагревается, когда оно использует RS-GPU? не противоречит ли это вашему предыдущему заявлению? У меня немного меньше информации о производительности встроенных Neon, поэтому я хотел бы знать, как Neon влияет на энергопотребление, мой опыт показывает, что Neon — 1,49 МВт самый высокий
2. @ Mahesh Спасибо за ваш подробный ответ, это было очень полезно 🙂