web-dev-qa-db-fra.com

Installez OpenCL sur Ubuntu 16.04, Intel Inspiron Laptop 7e génération

J'ai récemment acheté un ordinateur portable Dell Inspiron série 3000 avec un processeur Intel i5 de 7ème génération. La machine est livrée préchargée avec Windows 8 mais, étant un fidèle de Ubuntu, j’y ai installé Ubuntu 16.04.

Je dois travailler avec OpenCL sur mon ordinateur portable pour lequel j'ai suivi la procédure décrite dans ce fil ( OpenCL sur Ubuntu 16.04, processeur Intel Sandy Bridge ) et avoir installé PyOpenCL (d'ailleurs, ce fil a parfaitement fonctionné pour mon poste de travail au travail où j’ai une machine Xeon)

J'ai utilisé le script python suivant ( https://github.com/benshope/PyOpenCL-Tutorial/blob/master/010_introspection.py ) pour obtenir cette sortie sur mon ordinateur portable:

============================================================
OpenCL Platforms and Devices
============================================================
Platform - Name:  Intel Gen OCL Driver
Platform - Vendor:  Intel
Platform - Version:  OpenCL 1.2 beignet 1.1.1
Platform - Profile:  FULL_PROFILE
beignet-opencl-icd: no supported GPU found, this is probably the wrong opencl-icd package for this hardware
(If you have multiple ICDs installed and OpenCL works, you can ignore this message)

Le même script sur mon poste de travail me donne:

============================================================
Platform - Name:  Intel(R) OpenCL
Platform - Vendor:  Intel(R) Corporation
Platform - Version:  OpenCL 2.0 LINUX
Platform - Profile:  FULL_PROFILE
--------------------------------------------------------
Device - Name:  Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
Device - Type:  CPU
Device - Max Clock Speed:  2200 Mhz
Device - Compute Units:  24
Device - Local Memory:  32 KB
Device - Constant Memory:  128 KB
Device - Global Memory: 31 GB
Device - Max Buffer/Image Size: 8013 MB
Device - Max Work Group Size: 8192

lspci me donne:

lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Device 5916 (rev 02)

(Sur une note éventuellement non liée, j'ai également installé un pilote graphique sur mon ordinateur portable, ce qui n'était pas le cas lorsque j'ai essayé d'installer OpenCL pour la première fois)

En gros, je suis incapable de déterminer quel format OpenCL conviendrait à mon matériel.

Tout conseil serait vraiment génial :)

2
AnirudhJ

Ok, je l'ai compris. En outre, ce n'était pas sorcier: /

Le lien ( OpenCL sur Ubuntu 16.04, processeur Intel Sandy Bridge ) que j'ai suivi précédemment était parfait puisque je travaillais sur une machine Xeon. Cela n'aurait pas fonctionné (grosse surprise!) Sur mon ordinateur portable, car ce n'est évidemment pas une machine Xeon.

J'avais besoin d'utiliser le sdk pour Linux qui est disponible après avoir rempli le formulaire. Une fois le formulaire rempli, vous êtes redirigé vers une page sur laquelle vous pouvez choisir le produit, la version et télécharger un fichier .gz ou un fichier .tgz. Le .tgz est pour le système Yocto mais lors de l'installation, vous pouvez l'exécuter sans aucune perte de généralisation pour Ubuntu 16.04.

L'installation est assez simple car il existe un script shell install.sh exécutable extrêmement pratique à utiliser.

Les étapes générales à suivre sont les suivantes:

  1. extraire le dossier

    tar -xzvf intel_sdk_for_opencl_2017_yocto_7.0.0.2567_x64.tgz
    
  2. lancer le script shell

    ./install.sh
    
  3. suivez les instructions

La sortie du script python montre alors:

============================================================
OpenCL Platforms and Devices
============================================================
Platform - Name:  Intel Gen OCL Driver
Platform - Vendor:  Intel
Platform - Version:  OpenCL 1.2 beignet 1.1.1
Platform - Profile:  FULL_PROFILE
beignet-opencl-icd: no supported GPU found, this is probably the wrong opencl-icd package for this hardware
(If you have multiple ICDs installed and OpenCL works, you can ignore this message)
============================================================
Platform - Name:  Experimental OpenCL 2.1 CPU Only Platform
Platform - Vendor:  Intel(R) Corporation
Platform - Version:  OpenCL 2.1 LINUX
Platform - Profile:  FULL_PROFILE
    --------------------------------------------------------
    Device - Name:  Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
    Device - Type:  CPU
    Device - Max Clock Speed:  2500 Mhz
    Device - Compute Units:  4
    Device - Local Memory:  32 KB
    Device - Constant Memory:  128 KB
    Device - Global Memory: 8 GB
    Device - Max Buffer/Image Size: 1962 MB
    Device - Max Work Group Size: 8192
============================================================
Platform - Name:  Intel(R) OpenCL
Platform - Vendor:  Intel(R) Corporation
Platform - Version:  OpenCL 2.0 
Platform - Profile:  FULL_PROFILE
    --------------------------------------------------------
    Device - Name:  Intel(R) HD Graphics
    Device - Type:  GPU
    Device - Max Clock Speed:  1000 Mhz
    Device - Compute Units:  23
    Device - Local Memory:  64 KB
    Device - Constant Memory:  3209904 KB
    Device - Global Memory: 6 GB
    Device - Max Buffer/Image Size: 3135 MB
    Device - Max Work Group Size: 256
    --------------------------------------------------------
    Device - Name:  Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
    Device - Type:  CPU
    Device - Max Clock Speed:  2500 Mhz
    Device - Compute Units:  4
    Device - Local Memory:  32 KB
    Device - Constant Memory:  128 KB
    Device - Global Memory: 8 GB
    Device - Max Buffer/Image Size: 1962 MB
    Device - Max Work Group Size: 8192
2
AnirudhJ

Après avoir passé plus de 16 heures à faire fonctionner OpenCL sous Windows et Linux, je me rends compte que OpenCL sur Ubuntu 16.04, CPU Intel Sandy Bridge est le plus proche pour le faire fonctionner.

Ce qui n’a pas fonctionné pour moi, c’est l’installation de pilotes et la configuration, après quoi j’ai essayé à plusieurs endroits. Oui, les versions étaient différentes. J'ai pris cela en considération chaque fois que possible. Mais c’était la première fois que j’installais des bibliothèques et des liens. Donc, j'espère que cela aidera les débutants comme moi. J'ai seulement couvert la partie sur les processeurs graphiques Intel

Faire fonctionner OpenCL

Sudo apt install clinfo ocl-icd-opencl-dev opencl-headers

Vérifiez la sortie de clinfo

clinfo | grep "GPU"

vérifier si le GPU est inclus. S'il n'y a pas de ligne comme

Device Type                            GPU

dans la sortie, GPU ne supporte pas encore OpenCL. Dans ce cas, essayez d'installer beignet-opencl-icd, mesa-opencl-icd, etc. - peut-être, l'un après l'autre. Continuez à vérifier la sortie de clinfo après chaque. Si elle comprend la ligne ci-dessus, vous avez terminé.

Installation des pilotes Intel OpenCL

Si cela ne fonctionne pas, installez les pilotes OpenCl d'Intel à partir de https://software.intel.com/en-us/articles/opencl-drivers#latest_linux_driver . L'installation automatique nécessite une tonne de temps et d'espace. Il existe cependant une autre méthode. Décompressez l'archive. Installez alien, si vous n’avez pas déjà: Sudo apt install alien

cd dans le dossier décompressé et exécutez

Sudo alien -i *.rpm

Vérifiez à nouveau la sortie de "clinfo". Il devrait avoir un GPU. clinfo | grep “GPU”

À ce stade, vous avez une implémentation opérationnelle d'OpenCL.

Cependant, tout en essayant des exemples (de ici ), j'ai constaté que la plupart des exemples fonctionnent avec les bibliothèques d'Intel (voir ci-dessous), certains ne fonctionnent pas avec les bibliothèques installées avec la distribution (installée ci-dessus). (J'imagine que c'est à cause des différentes versions d'OpenCL impliquées.)

Installer le SDK OpenCL d'Intel

Installez Intel OpenCL SDK pour Linux (après vous être inscrit gratuitement) avec eux, à partir d’ici Intel OpenCL SDK pour Linux . Il suffit d’exécuter le script d’installation - nul besoin de travailler sur les éléments nécessaires pour le faire fonctionner avec Eclipse et tous. Vous devrez peut-être

Sudo apt install dkms

À ce stade, vous devriez avoir tout préparé.

Si vous êtes un débutant (comme moi)

Connaître le processus de compilation des programmes C: d’abord, les fichiers objets sont générés, puis ceux-ci sont liés. Voir https://stackoverflow.com/questions/31179452/what-exactly-is-in-a-a-a-a-so-file .

Dans un IDE (je ne connais pas le terminal), le traitement des bibliothèques comporte deux parties. La première consiste à inclure le chemin d'accès aux fichiers d'en-tête. Deuxièmement, inclure les fichiers de bibliothèque dans le projet.

J'utilise CodeBlocks. Donc, la raison pour laquelle Linux est aimé, c'est parce que la toute première commande de cette réponse a envoyé les fichiers à leurs emplacements prévus. Les fichiers d'en-tête se trouvent dans le répertoire/usr/include, sous le dossier 'CL'. La bibliothèque (dans mon cas) se trouve sous/usr/lib/x86_64-linux-gnu, nommée 'libOpenCL.so'. Vous n'avez rien à faire de plus pour les utiliser. Vous pouvez simplement commencer à coder -

#include<CL/cl.h>

Dans le cas du SDK Intel OpenCL, les fichiers d’en-tête sont situés sous/opt/intel/opencl-sdk/include; Pendant l’installation, vérifiez le contenu de/opt/intel/opencl. Ceux-ci aussi ont les bibliothèques. Cependant, l'un des fichiers de bibliothèque m'a donné une erreur de syntaxe (libclang.so). Le SDK Intel OpenCL doit être téléchargé principalement pour les fichiers d’en-tête dans:/opt/intel/opencl-sdk/lib64 - uniquement les fichiers .so. (J'ai trouvé que le fichier libclang.so donnait une erreur de syntaxe. Vérifiez pendant l'exécution du programme.)

Dans le cas de CodeBlocks , pour utiliser ces fichiers Intel - les fichiers autres que ceux par défaut - Créez un nouveau projet. Cliquez avec le bouton droit sur le projet dans la sous-fenêtre du gestionnaire. Allez dans "Options de construction". Sélectionnez le nom du projet dans le volet de gauche - ainsi, les paramètres seront appliqués aux versions Release et Debug. Dans les paramètres de l'éditeur de liens -> bibliothèques de liens, cliquez sur "Ajouter". Ici, ajoutez les bibliothèques (pas les fichiers d’en-tête; tous les fichiers .so): à/opt/intel/opencl-sdk/lib64. Dans l’onglet Répertoires de recherche, sous ‘compilateur’, ajoutez/opt/intel/opencl/include (ou où que se trouvent vos fichiers d’en-tête).

Dans le cas de Eclipse , installez d’abord le CDT. Ensuite, après avoir créé le projet, sous Projet -> Propriétés -> Construction C/C++ -> Paramètres -> Paramètres d’outil, (1) sous Compilateur GCC C++, ajoutez le répertoire des fichiers d’en-tête. (2) sous GCC C++ Linker, dans la section Libraries, ajoutez OpenCL et dans la partie inférieure, dans la section Library Path, ajoutez le chemin. Dans mon cas, pour que cela fonctionne, il me fallait,/opt/intel/opencl/include dans la première partie et/opt/intel/opencl/SDK/lib64 dans la deuxième partie. La valeur par défaut, comme dans le cas de Codeblocks, ne fonctionnait pas. Peut-être est-ce dû aux versions, ou je n'ai pas essayé correctement - Eclipse est nouveau pour moi.

Terminé.

Les éléments suivants doivent être exécutés et compilés: https://github.com/bgaster/opencl-book-samples/blob/master/src/Chapter_3/OpenCLInfo/OpenCLInfo.cpp

Crédits: Internet

1
digikar