Как использовать OpenCL на Android?

Для независимости платформы (настольный, облачный, мобильный, …) было бы здорово использовать OpenCL для разработки GPGPU, когда скорость имеет значение. Я знаю, что Google подталкивает RenderScript в качестве альтернативы, но, похоже, он доступен только для Android и вряд ли когда-либо будет включен в iOS.

Поэтому я ищу решение для запуска OpenCL-кода в приложениях Android.

Solutions Collecting From Web of "Как использовать OpenCL на Android?"

Единственные устройства Android, которые я знаю, поддерживают OpenCL, основанные на семействе чипов Mali T600 (статья здесь ). Здесь есть OpenCL SDK. По-видимому, это полный профиль OpenCL 1.1.

Nexus 10 – это устройство, которое использует такой чип. В Samsung Exynos 5 Dual SoC используется Mali T604, поэтому все, используя это, возможно, можно использовать с Mali T600 OpenCL SDK (не пробовал ни с одним из них).

Автор блога OpenCL пытается разобраться с этим , поэтому, возможно, стоит следовать его серии статей.

Но поддержка OpenCL на Android совершенно новая (по состоянию на 16/2/2013), поэтому, в то время как отлично подходит для экспериментов, возможно, стоит быть осторожным до тех пор, пока не будет больше поддержки (кто говорит, что багги подразумевает поддержку OpenCL 1.1)

Хотя время прошло с того момента, как был задан исходный вопрос, я думаю, что это все еще вопрос для многих разработчиков.

В ответе есть два аспекта. Во-первых, к сожалению, Google официально не поддерживает OpenCL.

Во-вторых, к счастью, многие производители чипов предоставляют свои библиотеки для поддержки OpenCL. В настоящее время большинство флагманских и среднесрочных смартфонов (с графическим процессором Qualcomm Adreno, графическим процессором ARM Mali или графическим процессором Imagination PowerVR) включают библиотеки OpenCL.

Чтобы использовать OpenCL на Android, есть несколько шагов:

  1. Проверьте, есть ли библиотека OpenCL на устройстве. Это можно сделать, используя OpenCL-Z Android . Это отличный инструмент для проверки доступности OpenCL на Android-устройствах, а также предоставляет нечетные показатели производительности вычислений, что может быть очень полезно.

Библиотеки OpenCL для основных поставщиков чипов можно найти в устройствах. Ниже приведены расположение библиотеки OpenCL:

Qualcomm Adreno:

/system/vendor/lib/libOpenCL.so or /system/lib/libOpenCL.so (older devices) 

ARM Mali:

 /system/vendor/lib/egl/libGLES_mali.so or /system/lib/egl/libGLES_mali.so 

PowerVR:

 /system/vendor/lib/libPVROCL.so 
  1. Напишите свою программу OpenCL с помощью C или C ++

  2. Создайте проект NDK для компиляции кода C / C ++ и протестируйте их на устройстве как исполняемый файл.

  3. Создайте JNI-интерфейс для ваших функций NDK-программы.

  4. Создайте проект Android, используя функции JNI в коде JAVA, чтобы вызвать собственные функции, связанные с OpenCL.

Учебник sony – хороший источник для ссылки. Методы, представленные в этом учебнике, могут быть применены к любому графическому процессору Qualcomm Adreno. С очень минимальной модификацией этот код и make-файлы также могут работать на других устройствах с поддержкой OpenCL (таких как Mali и PowerVR).

Надеюсь это поможет.

Оформить демонстрацию Android OpenCL в мире разработчиков Sony, полный проект с источником, где двусторонняя фильтрация изображения выполняется в OpenCL и сравнивается с однопоточной реализацией C. Некоторая информация о том, какая поддержка ожидается в устройствах Sony и т. Д., Также содержится в этой статье.

Статья:

Повысьте производительность вашего Android-приложения с помощью OpenCL

Источник для статьи:

Источник для Android-проекта OpenCl

Отказ от ответственности: я консультант в Sony Mobile

Вместо этого вы должны использовать RenderScript Compute: http://developer.android.com/guide/topics/renderscript/compute.html

Использование OpenCL не очень безопасно, потому что библиотека (или возможность) может быть недоступна на целевом устройстве. Честно говоря, я даже не знаю, поддерживает ли какое-либо устройство Android там. RenderScript вернется к вычислению процессора, если GPU на устройстве не сможет выполнить любую программу, которую вы хотите запустить.

Однако, если вы все еще хотите использовать OpenCL, то есть что-то, что может вам помочь http://www.pgroup.com/lit/articles/insider/v4n2a3.htm

Возможно, вам понадобится / потребуется SDK для устройства (например, SDK nVidia Tegra), чтобы иметь надлежащий контроль.

Все последователи Qualcomm Adreno 300 поддерживают встроенный профиль OpenCL 1.1. Чтобы использовать OpenCL, вам необходимо разработать код NDK, поскольку OpenCL не поддерживается Google на уровне Java. Очень хорошо писать код OpenCL, если вы знаете, как разрабатывать код NDK. Вы должны иметь доступ к libOpenCL.so, который можно извлечь из устройства с поддержкой OpenCL, такого как версии HTC one, Moto X и Samsung Note / Galaxy, которые используют Snapdragon.

Хронос выпустил OpenCL 2.0, включая официальную поддержку Android: https://www.khronos.org/news/press/khronos-releases-opencl-2.0

Мне интересно, возможно ли обновление здесь, после прочтения этой истории о адаптации Intel к AMP от Microsoft в OpenCL & llvm / Clang:

http://www.phoronix.com/scan.php?page=news_item&px=MTIyOTk

В сочетании с недавним включением llvm / Clang в инструментальную цепочку Android NDK:

http://clang-developers.42468.n3.nabble.com/Clang-now-included-in-Android-NDK-r8c-td4028206.html

Только глядя на это сейчас и не пробовав, я буду экспериментировать и предлагать новости о моих результатах в будущем посте.