Как использовать OpenCL на Android? - PullRequest
28 голосов
/ 25 января 2012

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

Поэтому я ищу решение для выполнения кода OpenCL в Android Apps.

Ответы [ 8 ]

13 голосов
/ 16 февраля 2013

Единственные известные мне 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.02.2013), так что, хотя он отлично подходит для экспериментов, возможно, стоит быть осторожным до тех пор, пока не будет больше поддержки (кто скажет, насколько глючна первичная поддержка OpenCL 1.1)

12 голосов
/ 14 апреля 2015

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

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

Во-вторых, к счастью, многие производители микросхем предоставляют свои библиотеки для поддержки OpenCL. На данный момент большинство флагманов и смартфонов среднего уровня (с Qualcomm Adreno GPU, ARM Mali GPU или Imagination PowerVR GPU) включают библиотеки 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 Мали:

/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).

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

5 голосов
/ 12 ноября 2013

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

Статья:

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

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

Исходный код проекта OpenCl для Android

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

4 голосов
/ 25 мая 2018

В 2018 году вы можете использовать openCL для разработки Android-приложения с Android Studio.

Чтобы использовать openCL с Android Studio, вам нужно будет сделать несколько вещей.

  1. Проверьте, поддерживает ли ваше устройство openCL и какую версию с использованием OpenCL-Z Android, и скопируйте предварительно собранную библиотеку на свой компьютер, как сказал Роберт Ван.
  2. Загрузите Android Studio.
  3. Создание проекта поддержки C / C ++.
  4. Скопируйте ваш libOpenCL.so в папку /<your_project>/app/src/main/jniLibs/<architecture>/ (вам придется создать папку самостоятельно).
  5. Создать свой собственныйФайл C / C ++, если он еще не создан, и свяжите его с готовой библиотекой в ​​Cmake.Кроме того, добавьте ваш родной файл C / C ++ в качестве библиотеки для проекта Android.https://developer.android.com/studio/projects/configure-cmake.
  6. Конфигурирование вашего модуля (приложения) build.gradle файл.

    android{
       ...
       default_config{
           externalNativeBuild{
              cmake {
                 // Filter based on your device architecture
                 abiFilters 'armeabi-v7a'
              }
            }
            ...
       }
       sourceSets {
          main {
             jniLibs.srcDirs = ['src/main/jniLibs']
          }
       }
       ...
    }
    
4 голосов
/ 12 июля 2012

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

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

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

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

2 голосов
/ 23 сентября 2013

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

1 голос
/ 23 июля 2013

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

0 голосов
/ 09 января 2019

Достаточно взглянуть на библиотеку вычислений с открытым исходным кодом (ACL), которая содержит ядра OpenCL: https://developer.arm.com/technologies/compute-library

Имеется сайт документации: https://arm -software.github.io / ComputeLibrary/ latest /

и сайт github: https://github.com/ARM-software/ComputeLibrary

Посмотрите также на Qualcomm SNPE SDK (он использует OpenCL: https://developer.qualcomm.com/forum/qdn-forums/software/snapdragon-neural-processing-engine-sdk/34526): https://developer.qualcomm.com/docs/snpe/overview.html

https://www.youtube.com/watch?v=h3T1ekJ_iXM

Вы также можете увидеть Tensorflow Lite для мобильных приложений: https://www.tensorflow.org/lite/

Возможно, в будущем он будет поддерживать OpenCL в виде ACL (теперь это решение Android 8.1 NNAPI- https://www.slideshare.net/kstan2/open-source-nn-frameworks-on-cellphones):

https://github.com/tensorflow/tensorflow/issues/18324

Ускорение графического процессора Tensorflow Lite - работает ли оно для всех версий ОС или только для 8.1?

http://jevois.org/qa/index.php?qa=2057&qa_1=can-tensorflow-lite-use-the-gpu

Вот прекрасный пример, запрограммированный с Kotlin: https://github.com/eddywm/KTFLITE

Для caffe2, использующего также NNAPI или OpenGL, есть некоторая надежда на OpenCL в будущем: https://github.com/laMia482/caffe2_android

...