Abrir cl en intel

9

¿Cómo compilar y ejecutar códigos cl abiertos en procesadores Intel i5 que tienen una unidad Intel 4000 GPU? Open cl ha sido instalado en / opt / intel / opencl y versionis ubuntu 12.04. Cualquier ayuda sería de gran ayuda ... Gracias

Piyush Kumar
fuente
¿Qué problema te encuentras?
Thomas
así que este emulador funciona para Intel ...
Piyush Kumar
@thomas, cuando estoy ejecutando el archivo, no se encuentra ninguno de los archivos o la biblioteca ... el error dice que no se encontró ese archivo o directorio CL / cl.h. También hay un archivo llamado kernelBuilder, cuando estoy tratando de ejecutarlo, aparece un mensaje pero se detiene y dice que la advertencia GCOnf, el cliente no pudo conectarse al D bus Daemon y no recibió una respuesta ...
Piyush Kumar
@PiyushKumar sudo apt-get install opencl-headersquizás. Después de eso, debería encontrar el libOpenCL.so, pero he tenido problemas importantes en el pasado con Intel al no registrar la biblioteca y causar errores de enlace.
Thomas
@Thomas, lo probaré ... Supongo que podría usar tus experiencias
Piyush Kumar

Respuestas:

10

Primero:
sudo apt-get install beignet opencl-headers

Agregue la carpeta beignet a la ruta de búsqueda de su biblioteca:

sudo su
echo "/usr/lib/beignet/" > /etc/ld.so.conf.d/beignet.conf
ldconfig
exit

Obtenga una prueba binaria simple:

git clone https://github.com/vpereira/CapsBasic-beignet

Edite el archivo MAKE para parecerse más a esto:

all: capsbasic

capsbasic: capsbasic.cpp Makefile
    g++ capsbasic.cpp -lcl -ocapsbasic -I/usr/include -L/usr/lib/beignet

clean:
    rm -f capsbasic

Ahí tienes. OpenCL working-ish para la familia de tarjetas de video Intel HD ...

lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)

./capsbasic

Number of available platforms: 1
Platform names:
    [0] Experiment Intel Gen OCL Driver [Selected]
Number of devices available for each type:
    CL_DEVICE_TYPE_CPU: 0
    CL_DEVICE_TYPE_GPU: 1
    CL_DEVICE_TYPE_ACCELERATOR: 0

*** Detailed information for each device ***

CL_DEVICE_TYPE_GPU[0]
    CL_DEVICE_NAME: Intel HD Graphics Family
    CL_DEVICE_AVAILABLE: 1
    CL_DEVICE_VENDOR: Intel
    CL_DEVICE_PROFILE: FULL_PROFILE
    CL_DEVICE_VERSION: OpenCL 1.1
    CL_DRIVER_VERSION: 0.2
    CL_DEVICE_OPENCL_C_VERSION: OpenCL C 1.1
    CL_DEVICE_MAX_COMPUTE_UNITS: 128
    CL_DEVICE_MAX_CLOCK_FREQUENCY: 1000
    CL_DEVICE_MAX_WORK_GROUP_SIZE: 512
    CL_DEVICE_ADDRESS_BITS: 32
    CL_DEVICE_MEM_BASE_ADDR_ALIGN: 32
    CL_DEVICE_MAX_MEM_ALLOC_SIZE: 134217728
    CL_DEVICE_GLOBAL_MEM_SIZE: 4
    CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: 65536
    CL_DEVICE_GLOBAL_MEM_CACHE_SIZE: 8192
    CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE: 128
    CL_DEVICE_LOCAL_MEM_SIZE: 65536
    CL_DEVICE_PROFILING_TIMER_RESOLUTION: 80
    CL_DEVICE_IMAGE_SUPPORT: 1
    CL_DEVICE_ERROR_CORRECTION_SUPPORT: 0
    CL_DEVICE_HOST_UNIFIED_MEMORY: 0
    CL_DEVICE_EXTENSIONS: cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store cl_khr_fp64 cl_khr_icd cl_khr_gl_sharing
    CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT: 16
    CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG: 16
    CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT: 16
    CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE: 0
    CL_DEVICE_NATIVE_VECTOR_WIDTH_INT: 16
    CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG: 16
    CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT: 16
    CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE: 16
RobotHumanos
fuente
1
Gracias, pero según Intel no admiten OpenCL en el HD 4000 para Linux: OpenCL SDK 1.2 para Linux, ¿sin Xeon? . ¿Qué tipo de rendimiento estás obteniendo?
nealmcb
1
Ajá, ahora veo que el archivo README.txt para beignet explica que es una alternativa al SDK OpenCL de Intel, que de hecho es compatible con el HD 4000. ¡Gracias! Tenga en cuenta que la gente también debe ejecutar make... ¿Es necesario ejecutar ldconfigpruebas de un problema con el paquete?
nealmcb
2
El rendimiento, como dice opencl, es bastante pobre y bastante irregular. El código que se ejecuta en otras implementaciones de opencl a veces simplemente se bloquea o se produce un error. Le permite construir cosas triviales de prueba sin empujar a una plataforma de cómputo.
RobotHumans
No creo que la necesidad de agregarlo a la ruta de búsqueda de la biblioteca sea un problema con la biblioteca. Si está utilizando OpenCL, se supone que tiene algunos conocimientos técnicos. Personalmente, me gustaría que todos los paquetes de OpenCL se pudieran instalar simultáneamente y que simplemente pudieras cambiar qué biblioteca estaba incluida en tu ruta de búsqueda y volver a ejecutar ldconfig para apuntar a una diferente. Esto podría ser útil si tuviera una caja de prueba con las 3 "marcas" del conjunto de chips de video como entorno de prueba y encontrara una forma de comparar o simplemente probar su código en todos los objetivos posibles.
RobotHumans
1
Eso tiene sentido. Estaría más a bordo con algo como abofetearlo en jockey, alternativas de actualización o lo que sea. ¿Cambiar bibliotecas por algo que se supone que cambia bibliotecas? Claro, eso parece una buena idea para una situación insostenible.
RobotHumans
0

Para compilar necesita un compilador como gcc. Puede descargar gcc desde su repositorio. (elija el número de versión más grande para obtener más funciones de C ++ 11).

$> sudo apt-get install gcc-4.7

Después de eso, debe vincular su biblioteca OpenCL a la aplicación que está compilando. Digamos que el código de la aplicación Host (main.c) y el código de la aplicación del kernel (kernel.cl) residen en una carpeta llamada test. Debe hacer lo siguiente:

$ prueba> gcc -I / opt / intel / include -L / opt / intel / lib / [x86 o x86_64] / main.c -o a.out

Debe hacerse cargo de la compilación. Debe ejecutar la salida como:

$ prueba> ./ a.out

y cuide cualquier error de tiempo de ejecución que pueda obtener (incluida la corrección de la ruta a kernel.cl, etc.).

usuario1855051
fuente