Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

  • проверьте, есть ли библиотека 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 или С++

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

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

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

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

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

Ответ 3

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

Статья:

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

Источник статьи:

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

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

Ответ 4

Вместо этого вы должны использовать 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).

Ответ 5

В 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 файл модуля (приложения) build.gradle.

    android{
       ...
       default_config{
           externalNativeBuild{
              cmake {
                 // Filter based on your device architecture
                 abiFilters 'armeabi-v7a'
              }
            }
            ...
       }
       sourceSets {
          main {
             jniLibs.srcDirs = ['src/main/jniLibs']
          }
       }
       ...
    }
    

Ответ 6

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

Ответ 8

Достаточно взглянуть на библиотеку вычислений с открытым исходным кодом (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. ком/документы/SNPE/overview.html

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

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

Возможно, в будущем он будет поддерживать OpenCL в виде ACL (сейчас это решение NNAPI для Android 8.1 - 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