No busques más por otras webs ya que llegaste al lugar exacto, contamos con la respuesta que necesitas pero sin problemas.
Solución:
Para compilar y ejecutar código OpenCL en Linux, necesitará cuatro cosas:
1) Un controlador NVIDIA que admita OpenCL. Los controladores empaquetados con Ubuntu son algo antiguos, pero aún deberían funcionar bien. A menos que tenga una necesidad explícita de controladores actuales, debe seguir con los empaquetados con Ubuntu. Para ser claros, estos son los mismos controladores instalados a través del administrador de controladores restringidos. Las bibliotecas OpenCL se envían con el controlador, por lo que solo ejecutar el controlador de los programas OpenCL debería ser suficiente.
2) El conjunto de herramientas de CUDA. Esto incluye los encabezados necesarios para compilar código OpenCL. Instale esto en la ubicación predeterminada.
3) El SDK de computación GPU (opcional). Esto incluye varias herramientas de soporte específicas de NVIDIA, así como ejemplos de código OpenCL.
Estos tres elementos se pueden encontrar en http://developer.nvidia.com/cuda-toolkit-40.
4) Enlaces OpenCL C ++ (opcional). Curiosamente, no están incluidos con CUDA Toolkit, pero en caso de que use C ++, podrían hacer que su código sea mucho más legible. Puede descargarlos de http://www.khronos.org/registry/cl/api/1.1/cl.hpp, y simplemente ponerlo en / usr / local / cuda / include / CL en su escritorio.
Una vez instalados, deberá realizar algunos pasos más para poder compilar y ejecutar OpenCL fuera del SDK de NVIDIA.
1) El kit de herramientas de CUDA habrá incluido los encabezados de OpenCL (enumerados en http://www.khronos.org/registry/cl/), probablemente estén en el directorio / usr / local / cuda / include / CL. Para que estos encabezados estén disponibles en todo el sistema, debe vincular este directorio a / usr / include /, de modo que se pueda acceder a ellos como / usr / include / CL /[headerfilename]. En lugar de crear un enlace simbólico, puede agregar / usr / local / cuda / include a su C_INCLUDE_PATH
y CPLUS_INCLUDE_PATH
variables de entorno, pero esto duraría solo para la sesión más actual.
2) Asegúrese de que la biblioteca OpenCL (libOpenCL.so) esté presente en / usr / lib. Esto debería haber sido implementado por el conductor, por lo que no debería tener que hacer nada.
Estás listo para escribir código. Asegúrate de incluir CL/cl.h
(o CL/cl.hpp
si desea utilizar la versión C ++ de la API) en cualquier programa C (++) que realice llamadas a la API OpenCL. Cuando compile, asegúrese de vincular contra la biblioteca OpenCL (pase gcc el -lOpenCL
bandera).
En cuanto a su netbook, los gráficos integrados generalmente no son compatibles con OpenCL. En teoría, la aceleración de aplicaciones de AMD admite la ejecución de OpenCL en la CPU, pero no está claro que realmente funcione.
Ubuntu 20.04 con NVIDIA Quadro M1200, Lenovo P51
La integración del software mejoró mucho desde la última vez que lo intenté, así que haré una actualización.
Primero, al menos para los gráficos, necesitaba ajustar algunas configuraciones de BIOS como se menciona en, no estoy seguro de que sea necesario para OpenCL: https://askubuntu.com/questions/973605/ubuntu-17-10-boot-stuck-at-message- iniciado-nvidia-persistence-daemon-after-ins / 976578 # 976578
Luego, busco e instalo el controlador más reciente disponible:
apt-cache search nvidia-driver
sudo apt install nvidia-driver-435 nvidia-opencl-dev
También puede buscar en:
software-properties-gtk
en la pestaña “Controladores adicionales”.
Ahora puedo compilar y ejecutar el siguiente programa de prueba:
C Principal
#include
#include
#include
#define CL_TARGET_OPENCL_VERSION 220
#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
#include
int main()
cl_command_queue command_queue;
cl_context context;
cl_device_id device;
cl_int input = 1;
cl_int kernel_result = 0;
cl_kernel kernel;
cl_mem buffer;
cl_platform_id platform;
cl_program program;
const char *source = "__kernel void increment(int in, __global int* out) out[0] = in + 1; ";
clGetPlatformIDs(1, &platform, NULL);
clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 1, &device, NULL);
context = clCreateContext(NULL, 1, &device, NULL, NULL, NULL);
command_queue = clCreateCommandQueue(context, device, 0, NULL);
buffer = clCreateBuffer(context, CL_MEM_READ_WRITE
GitHub en sentido ascendente
con:
gcc -ggdb3 -O0 -Wall -Wextra -pthread -std=c11
-pedantic-errors -o main.out main.c -lm -pthread -lOpenCL
./main.out
Notas:
- encuentre su modelo de GPU: https://askubuntu.com/questions/72766/how-do-i-find-out-the-model-of-my-graphics-card
- prueba que el controlador está funcionando: https://askubuntu.com/questions/68028/how-do-i-check-if-ubuntu-is-using-my-nvidia-graphics-card
- respuesta similar para CUDA: https://askubuntu.com/questions/917356/how-to-verify-cuda-installation-in-16-04/1215237#1215237
Ubuntu 15.10 con NVIDIA NVS 5400M, Lenovo T430
sudo apt-get install nvidia-352 nvidia-352-dev nvidia-prime nvidia-modprobe
sudo ln -s /usr/include/nvidia-352/GL /usr/local/include
sudo ln -s /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/local/lib/libOpenCL.so
Luego usa el encabezado como:
#include
Y compila con:
gcc -o main main.c -lOpenCL
Notas:
- no instale el
nvidia-current
paquete. Es viejo. Cualquieraapt-cache search nvidia
y obtén el último, o usasoftware-properties-gtk
Pestaña “Controladores adicionales”.
Realmente recomiendo actualizar a 15.10 para que esto funcione: nunca antes lo había logrado.
Cosas que funcionaron para mí en Ubuntu 16.04
He instalado openCL en:
CPU SandyBridge: solo cpu
GPU IvyBridge
Nvidia GTX 950
instalar paquetes
Paquetes genéricos de ubuntu para OpenCL
Instalación básica
sudo apt install ocl-icd-libopencl1
sudo apt install opencl-headers
sudo apt install clinfo
Paquete que permite compilar código OpenCL (1.2 creo)
Necesario vincular y compilar
sudo apt install ocl-icd-opencl-dev
Para el núcleo Intel GT
Paquete que permite ejecutar openCL en Intel GT, IvyBridge y superiores
sudo apt install beignet
Para CPU Intel SandyBridge y otros posibles
Descargue este archivo OpenCL ™ Runtime 16.1.1 para procesadores Intel® Core ™ e Intel® Xeon® para Ubuntu * (64 bits) en https://software.intel.com/en-us/articles/opencl-drivers#latest_linux_SDK_release
Instalar paquetes para convertir rpm en deb
sudo apt-get install -y rpm alien libnuma1
Untar archivo descargado
tar -xvf opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz
cd opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25/rpm/
Convertir archivos rpm en deb
fakeroot alien --to-deb opencl-1.2-base-6.4.0.25-1.x86_64.rpm
fakeroot alien --to-deb opencl-1.2-intel-cpu-6.4.0.25-1.x86_64.rpm
Instalar paquetes .deb
sudo dpkg -i opencl-1.2-base_6.4.0.25-2_amd64.deb
sudo dpkg -i opencl-1.2-intel-cpu_6.4.0.25-2_amd64.deb
Toque el archivo de configuración local
sudo touch /etc/ld.so.conf.d/intelOpenCL.conf
Abre el archivo
sudo vim /etc/ld.so.conf.d/intelOpenCL.conf
y agrega la línea
/opt/intel/opencl-1.2-6.4.0.25/lib64/clinfo
Cree un directorio de proveedores y agregue intel.icd
sudo mkdir -p /etc/OpenCL/vendors
sudo ln /opt/intel/opencl-1.2-6.4.0.25/etc/intel64.icd /etc/OpenCL/vendors/intel64.icd
sudo ldconfig
prueba si esto funcionó
clinfo debe listar sus dispositivos. Descargar este archivo
https://codeload.github.com/hpc12/tools/tar.gz/master
Ejecute este código para asegurarse de que todo funcione
tar xzvf tools-master.tar.gz
cd tools-master
make
./print-devices
./cl-demo 1000 10
Esto debería imprimir BUENO al final
Para Nvidia
instale los controladores de nvidia (usé 370), esto debería incluir todos los directorios de tiempo de ejecución
Si te gustó nuestro trabajo, tienes la libertad de dejar una sección acerca de qué le añadirías a esta sección.