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

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

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

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

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

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

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

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

Ответы

Ответ 1

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) Программирование на смартфоне GPU (для Android) не зависит от устройства? Это' s то же самое для Samsung S4, LG G3 и других устройств Android?

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

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

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

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

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

Ответ 2

Простой способ получить доступ к графическому процессору в Android можно с помощью 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

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

Ответ 3

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.