Open cl in intel

9

Comment compiler et exécuter des codes cl ouverts sur des processeurs Intel i5 ayant une unité Intel HD 4000 GPU ??? Open cl a été installé dans / opt / intel / opencl et versionis ubuntu 12.04. Toute aide serait d'une grande aide ... Merci

Piyush Kumar
la source
Quel problème rencontrez-vous?
Thomas
donc cet émulateur fonctionne pour Intel ....
Piyush Kumar
@thomas, lorsque j'exécute le fichier, il ne trouve aucun fichier ou bibliothèque ... l'erreur indique qu'aucun fichier ou répertoire CL / cl.h n'a été trouvé. Il y a aussi un fichier appelé kernelBuilder, lorsque j'essaye de l'exécuter, une invite vient mais il s'arrête et dit que l'avertissement GCOnf, le client n'a pas réussi à se connecter au démon de bus D et n'a pas reçu de réponse ....
Piyush Kumar
@PiyushKumar sudo apt-get install opencl-headerspeut-être. Après cela, il devrait trouver le libOpenCL.so, mais j'ai eu des problèmes majeurs dans le passé avec Intel ne pas enregistrer la bibliothèque et provoquer des erreurs de liaison.
Thomas
@Thomas, va l'essayer ... Je suppose que je pourrais utiliser vos expériences
Piyush Kumar

Réponses:

10

Première:
sudo apt-get install beignet opencl-headers

Ajoutez le dossier beignet à votre chemin de recherche de bibliothèque:

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

Obtenez un binaire de test simple:

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

Modifiez le makefile pour qu'il ressemble davantage à ceci:

all: capsbasic

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

clean:
    rm -f capsbasic

Voilà. Fonctionnalité OpenCL pour la famille de cartes vidéo 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
RobotHumains
la source
1
Merci, mais selon Intel, ils ne prennent pas en charge OpenCL sur le HD 4000 pour Linux: OpenCL SDK 1.2 pour Linux, sans Xeon? . Quel genre de performances obtenez-vous?
nealmcb
1
Aha - maintenant je vois que le fichier README.txt pour beignet explique qu'il s'agit d'une alternative au SDK OpenCL d'Intel, qui prend en charge le HD 4000. Merci !! Notez que les gens doivent makeégalement s'exécuter ... Est-ce la nécessité d'exécuter la ldconfigpreuve d'un problème avec le package?
nealmcb
2
La performance, comme opencl va, est assez médiocre et assez glitchy. Le code qui s'exécute sur d'autres implémentations opencl se bloque parfois ou des erreurs. Il vous permet de créer des choses de test triviales sans avoir à pousser vers un banc de calcul.
RobotHumans
Je ne pense pas que la nécessité de l'ajouter à votre chemin de recherche de bibliothèque soit un problème avec la bibliothèque. Si vous utilisez OpenCL, l'hypothèse est que vous disposez d'un savoir-faire technique. Personnellement, j'aimerais que les packages OpenCL soient tous installables simultanément et que vous puissiez simplement changer la bibliothèque incluse dans votre chemin de recherche et réexécuter ldconfig pour pointer vers une autre. Cela pourrait être utile si vous aviez une boîte de test avec les 3 «marques» de chipsets vidéo comme environnement de test et que vous avez trouvé un moyen de comparer ou simplement de tester votre code sur toutes les cibles possibles.
RobotHumans
1
Ça a du sens. Je serais plus à bord avec quelque chose comme le gifler dans le jockey, les alternatives de mise à jour ou autre. Changer de bibliothèque avec quelque chose qui est censé changer de bibliothèque? Bien sûr, cela semble être une bonne idée pour une situation intenable.
RobotHumans
0

Pour compiler, vous avez besoin d'un compilateur tel que gcc. Vous pouvez télécharger gcc depuis son référentiel. (choisissez le plus grand numéro de version pour plus de fonctionnalités C ++ 11).

$> sudo apt-get install gcc-4.7

Après cela, vous devez lier votre bibliothèque OpenCL à l'application que vous compilez. Disons que le code de l'application hôte (main.c) et le code de l'application noyau (kernel.cl) résident dans un dossier appelé test. Vous devez procéder comme suit:

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

Il devrait s'occuper de la compilation. Vous devez exécuter la sortie en tant que:

$ test> ./ a.out

et prenez soin de toute erreur d'exécution que vous pourriez obtenir (y compris la correction du chemin d'accès à votre kernel.cl, etc.).

user1855051
la source