Как уже отмечалось в комментарии Дэймона, это невозможно сделать в общем виде, поскольку у каждого типа устройства есть свой поставщик, а у этого поставщика - собственная реализация OpenCL. Однако, если вам нужно просто иметь «переносную» копию приложения OpenCL, которая будет работать на большинстве компьютеров Linux, есть способ добиться этого.
Загрузите AMD APP SDK (в настоящее время версия 2.4). Я предполагаю, что это 64-битная версия, но она должна быть почти одинаковой для 32-битных или других номеров версий, просто измените соответствующие строки.
Извлеките SDK в подкаталог исполняемого файла вашего приложения. Например, если приложение находится в $ HOME / myapp, файлы SDK должны находиться в $ HOME / myapp / AMD-APP-SDK-v2.4-lnx64.
Извлеките файлы ICD из архива icd-registration.tgz в папку с именем icd. Таким образом, мы должны иметь $ HOME / myapp / AMD-APP-SDK-v2.4-lnx64 / icd / amdocl32.icd (и amdocl64.icd).
Теперь мы имеем работу с портативной установкой AMD APP SDK, которая должна работать на большинстве x86-процессоров. Нам просто нужно установить соответствующие переменные среды перед запуском приложения. Поскольку я не специалист по GNU / Linux и не очень хорошо знаю bash, я жестко прописал путь к нашему переносимому каталогу. Предположительно можно каким-то образом получить текущее местоположение автоматически, что, очевидно, будет намного приятнее.
#!/bin/bash
DIRECTORY=$HOME/myapp
export OPENCL_VENDOR_PATH=$DIRECTORY/AMD-APP-SDK-v2.4-lnx64/icd
export AMDAPPSDKROOT=$DIRECTORY/AMD-APP-SDK-v2.4-lnx64
export LD_LIBRARY_PATH=$AMDAPPSDKROOT/lib/x86_64:$LD_LIBRARY_PATH
./myapp
Вышеуказанный скрипт должен быть размещен в корневом каталоге вашего приложения, т.е. $ HOME / myapp / scriptname. Таким образом, мы можем запустить переносимое приложение, выполнив ./scriptname. Как я уже сказал, поскольку я не очень хорошо знаю bash, приведенный выше скрипт, безусловно, может быть намного приятнее, обрабатывая аргументы программы и автоматически выясняя расположение скриптов. Но это должно показать общее представление о том, как это сделать.