Программирование графического процессора на устройствах Android

У меня нет знаний о программировании на GPU, и я хотел бы получить обзор этого. Я должен разработать проект обработки изображений, работающий на графическом процессоре смартфонов (на устройствах Android), но я не знаю с чего начать.

1) Программирование графического процессора Smartphone и программирование другого графического процессора (например, Nvidia GeForce 9) равны?

2) Я слышал о вычислении или графическом программировании для GPU: какая разница? Являются ли они равными?

3) Я уже настроил Eclipse для разработки приложений для Android: какие еще инструменты мне нужны?

4) Программирование графического процессора смартфона (для Android) не зависит от устройства? Это то же самое для Samsung S4, LG G3 и других устройств Android?

5) Какая библиотека мне нужна? Я слышал об OpenCV и пакете Tegra от Nvidia.

ты можешь помочь мне с этим? Кроме того, вы можете помочь мне с любыми целевыми ссылками?

Solutions Collecting From Web of "Программирование графического процессора на устройствах Android"

1) Программирование графического процессора Smartphone и программирование другого графического процессора (например, Nvidia GeForce 9) равны?

Не всегда. Например, в зависимости от того, какие API и аппаратная платформа вы используете, некоторые мобильные устройства позволяют вам разработать точно такую ​​же программу, как и для настольных графических процессоров.

Например, если вы выполняете программу CUDA на устройствах Tegra K1 / X1, это будет почти так же, как и на GeForce 9.

Но если вы используете OpenCL, вам нужно быть осторожным. Некоторые мобильные устройства поддерживают только OpenCL Embedded Profile, что означает, что функции ограничены по сравнению с настольным графическим процессором. Даже если некоторые мобильные устройства поддерживают полный профиль OpenCL, у вас все еще есть меньше ресурсов для работы, поэтому программа все равно должна быть изменена для адаптации к мобильным платформам.

2) Я стадо о вычислении или графическом программировании для GPU: какая разница? Являются ли они равными?

Графическое программирование фокусируется на графическом рендеринге. Цель состоит в том, чтобы нарисовать что-то на экране. Основными API-интерфейсами, которые вам понадобятся для телефона, будет OpenGL ES для Android или Metal for iOS или DX для Windows.

Вычисление для GPU означает, что вы хотите завершить некоторые задачи, не связанные с графическим рендерингом, вместо этого вам нужно вычислить какое-то уравнение или вычислить некоторые значения из входных чисел. Например, вы можете фильтровать изображение или обрабатывать видео и так далее. Основными API для вычисления являются OpenCL, CUDA и Metal.

3) Я уже настроил Eclipse для разработки приложений для Android: какие еще инструменты мне нужны?

Конечно, вам нужен Android NDK. Вам нужны библиотеки OpenCL или SDK для вашего мобильного устройства.

4) Программирование графического процессора смартфона (для Android) не зависит от устройства? Это то же самое для Samsung S4, LG G3 и других устройств Android?

Конечно, возможности устройства имеют огромную разницу в том, что вы можете сделать. Основное отличие в чипсете, используемом в телефоне. Это определит, какой SDK вы должны использовать, а аппаратные функции будут совсем другими.

Еще одно замечание заключается в том, что программирование GPU, как правило, не переносится с высокой производительностью из-за огромной разницы в оборудовании. Поэтому очень хорошо оптимизированный исходный код на одном телефоне может оказаться не лучшим на другом телефоне.

5) Какую библиотеку мне нужно? Я стадо о OpenCV и пакете Tegra от Nvidia.

OpenCV – библиотека компьютерного зрения. Нужно ли это вам или нет, зависит от того, какие типы алгоритмов вы работаете. Если ваши приложения сильно зависят от некоторых алгоритмов обработки изображений и компьютерного зрения, вы можете найти полезную информацию OepnCV. Но определенно вы всегда можете начать с ваших собственных простых библиотек.

Tegra NVPack ничего особенного. Это всего лишь пакет программного обеспечения / SDK, содержащий SDK для разработки Android, NDK, IDE и инструменты, а также SDK от NVidia. Вы всегда можете настроить свою собственную среду, установив отдельные SDK и инструменты. Но если вы разрабатываете платформы NVidia, вам может быть проще начать с NVPack.

Простой способ получить доступ к GPU в андроиде – это использование OpenGL ES. SDK для Android отображает все OpenGL ES в java https://www.khronos.org/opengles/sdk/docs/man/

OpenGL ES позволяет писать шейдеры в GLSL (Open GL Shading Language) и компилировать его на GPU во время выполнения. https://www.opengl.org/documentation/glsl/

Этот код GLSL запускается непосредственно на графическом процессоре.

Дополнительную информацию об OpenGL ES в Android можно найти в Документах для Android http://developer.android.com/guide/topics/graphics/opengl.html

Это очень родной подход. Использование библиотек полностью зависит от того, чего вы хотите достичь с помощью графического процессора

Android использует OpenGL ES (Open Graphics Libary для встроенных систем)

Существуют разные версии OpenGL ES. Я рекомендую использовать 2.0, но вы также можете использовать версии 1.0 или более поздней версии.

Большинство телефонов поддерживают 2.0, у вас больше возможностей и скорость выше 1.0. Поэтому все телефоны поддерживают 1.0, и даже симуляторы Android поддерживают его. Если вы хотите протестировать свой код OpenGL ES 2.0, вам понадобится реальное устройство.

Обучение OpenGL затруднено и может занять некоторое время. Вот хороший учебник, чтобы получить обзор: http://blog.db-in.com/all-about-opengl-es-2-x-part-1/

Apple Smartphones также использует OpenGL ES, поэтому, если вы изучите его для Android, вы также можете использовать его для iphones.

И да, все устройства Android используют OpenGL.