Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. OpenCL — Wikipédia
OpenCL — Wikipédia 👆 Click Here! Read More..
Un article de Wikipédia, l'encyclopédie libre.
Page d’aide sur l’homonymie

Ne doit pas être confondu avec OpenGL.

Cet article est une ébauche concernant l’informatique.

Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants.
OpenCL
Description de l'image OpenCL logo.svg.
Description de l'image Clinfo screenshot.png.
Informations
Créateur AppleVoir et modifier les données sur Wikidata
Développé par Khronos GroupVoir et modifier les données sur Wikidata
Première version 28 août 2009Voir et modifier les données sur Wikidata
Dernière version 3.0.19 (10 juillet 2025)[1]Voir et modifier les données sur Wikidata
Écrit en C++ et CVoir et modifier les données sur Wikidata
Système d'exploitation Microsoft Windows, macOS, Linux, FreeBSD et AndroidVoir et modifier les données sur Wikidata
Environnement X64, IA-32 et architecture ARMVoir et modifier les données sur Wikidata
Type Framework
Langage de programmationVoir et modifier les données sur Wikidata
Licence Licence open-source approuvée par l'OSI (en)Voir et modifier les données sur Wikidata
Site web www.khronos.org/openclVoir et modifier les données sur Wikidata

modifier - modifier le code - voir Wikidata (aide)

OpenCL (Open Computing Language) est la combinaison d'une API et d'un langage de programmation dérivé du C, proposé comme un standard ouvert par le Khronos Group. OpenCL est conçu pour programmer des systèmes parallèles hétérogènes comprenant par exemple à la fois un CPU multi-cœur et un GPU. OpenCL propose donc un modèle de programmation se situant à l'intersection naissante entre le monde des CPU et des GPU, les premiers étant de plus en plus parallèles, les seconds étant de plus en plus programmables.

Présentation

[modifier | modifier le code]

OpenCL distingue le processeur hôte (processeur central faisant office de chef d'orchestre) des périphériques (CPU, GPU, ou autre) dont la mission est d'exécuter des noyaux de calcul intensifs. OpenCL distingue donc d'un côté l'application tournant sur le processeur hôte (et qui va appeler l'API OpenCL), et de l'autre côté les noyaux qui sont programmés en OpenCL-C (et dont la vocation est d'être exécuté sur les périphériques).

OpenCL permet d'exprimer aisément du parallélisme de tâches mais aussi du parallélisme de données sous deux formes ; SPMD (Single Program Multiple Data) et SIMD (Single Instruction Multiple Data), le tout de manière hiérarchique. Un graphe de tâches peut être créé dynamiquement via l'API OpenCL. Chaque tâche peut être représentée soit sous forme d'une instance unique (appelée tâche), soit sous forme d'une collection d'instances (appelée NDRange) d'un même noyau. Les NDRanges peuvent être de 1, 2 ou 3 dimensions. Chaque instance de kernel appartenant à un NDRange est appelée work-item. Le NDrange peut lui-même être structuré en work-groups, ce qui permet aux work-items à l’intérieur des work-groups de partager des données et de se synchroniser via des barrières.

Si parmi certains de ses objectifs techniques, OpenCL semble se rapprocher de C pour CUDA, modèle de programmation propriétaire de la société Nvidia, OpenCL a des objectifs plus larges car n'étant pas uniquement dédié aux GPU. Dans le monde du calcul haute performance ou du jeu, OpenCL permettra de tirer parti de la puissance des processeurs graphiques, des CPU multi-cœurs ou d'autres systèmes de calcul intensifs tels le CELL d'IBM, qui équipe notamment la PlayStation 3 de Sony. Dans le monde des systèmes embarqués sur puce (SoC), tels qu'on les trouve dans les smartphones, OpenCL permettra l'accès, via une infrastructure de programmation unique, au processeur central, ainsi qu'aux différents sous-systèmes multimédia embarqués (GPU, DSP, computing array ou autres).

Il existe actuellement peu de moyens de déboguer des noyaux OpenCL. Tout d'abord, le débogueur NVIDIA Parallel Nsight, capable de déboguer CUDA thread par thread, ne supporte actuellement pas OpenCL, mais permet seulement de traquer les appels à l'API[2]. Ensuite, AMD propose une extension permettant de mettre des traces directement dans le code OpenCL (cl_amd_printf). Enfin, un programme appelé gDebugger (par Gremedy puis par AMD[3]) permet de suivre le déroulement de l'algorithme thread par thread. gDebugger a évolué, se nomme maintenant CodeXL et est hébergé[4] par l'initiative GPUOPEN.

OpenCL est également utilisé comme langage de description de matériel, pour la programmation des FPGA[5],[6].

Historique

[modifier | modifier le code]

OpenCL a été initialement conçu par Apple[7] (qui en a déposé la marque), et affiné dans le cadre d'une collaboration avec AMD, Intel et Nvidia. Apple soumet d'abord sa proposition initiale au Khronos Group. Le 16 juin 2008, le Khronos Compute Working Group est formé, comprenant des représentants des fabricants de matériel informatique et de logiciels. Celui-ci travaille durant cinq mois à boucler les détails techniques de la spécification OpenCL 1.0. La spécification est révisée par les membres de Khronos et approuvée pour une version d'essai le 8 décembre. Une nouvelle version, OpenCL 1.1, est publiée en juin 2010 par le Khronos Group. OpenCL 1.1 clarifie certains aspects de la spécification précédente et apporte de nouvelles fonctionnalités telles que les sous-buffers, les vecteurs à 3 éléments, les événements utilisateur, de nouvelles fonctions builtin, le support en standard d'extensions optionnelles 1.0 (telles que les fonctions atomiques 32 bits).

OpenCL est intégré dans Mac OS X 10.6[7] (Snow Leopard). AMD décide de supporter OpenCL et DirectX 11 plutôt que Close to Metal dans son framework Stream SDK. RapidMind (en) annonce l'adoption de OpenCL sous sa plate-forme de développement, afin de supporter les processeurs graphiques de plusieurs fabricants avec une interface unique. Nvidia confirme également le 9 décembre 2008 le support complet de la spécification 1.0 dans son GPU Computing Toolkit[8].

Le 15 novembre 2011, le Khronos Group a publié les spécifications d'OpenCL 1.2. On y trouve notamment des fonctionnalités liées à la mobilité et à la portabilité, avec par exemple la possibilité de dissocier compilation et édition de liens des noyaux[9].

WebCL

[modifier | modifier le code]
Article détaillé : WebCL.

Le Khronos Group a également développé une intégration d'OpenCL, bibliothèque de calcul parallèle, dans l'ensemble des interfaces de programmation d'HTML5[10]. Actuellement, les navigateurs utilisent des extensions pour gérer OpenCL.

Nokia et Mozilla [11] ont développé des extensions pour Firefox. Samsung pour WebKit et Motorola pour Node.js.

Historique des implémentations

[modifier | modifier le code]

Des implémentations d'OpenCL existent pour la majorité des plateformes aujourd'hui. IBM pour ses supercalculateurs sous GNU/Linux utilisant des processeurs Power, les processeurs X86 d'Intel et AMD et les GPU les accompagnant traditionnellement (ATI, nVidia, VIA), les processeurs ARM Cortex-A9 (parties SSE et fpu 128bits Neon), ainsi que les DSP, GPU et autres computing array les accompagnant dans les nombreuses implémentations des System on chip (SoC) (nVidia Tegra2, Qualcomm Snapdragon, Apple A4, Marvell Armada, etc.). Mesa (Implémentation OpenGL/OpenVG sous GNU/Linux) contient un state-tracker OpenCL pour Gallium3D en cours de développement, nommé Clover Ce lien renvoie vers une page d'homonymie[12],[13]

Le 10 décembre 2008, AMD et Nvidia font la première démonstration publique d'OpenCL, une présentation de 75 minutes à SIGGRAPH Asia 2008. AMD effectue une démonstration d'OpenCL accélérée sur CPU et explique la scalabilité d'OpenCL sur un ou plusieurs cœurs tandis qu'Nvidia fait une démonstration accélérée par GPU[14],[15].

Le 26 mars 2009, à la GDC 2009, AMD et Havok font une démonstration de la première implémentation accélérée par OpenCL, Havok Cloth sur un GPU de la série Radeon HD 4000 d'AMD[16].

Le 20 avril 2009, Nvidia annonce la sortie de son pilote OpenCL et du SDK aux développeurs participant à son OpenCL Early Access Program[17].

Le 5 août 2009, AMD révèle les premiers outils de développement pour sa plateforme OpenCL comme partie de son programme ATI Stream SDK v2.0 Beta[18].

Le 28 août 2009, Apple sort Mac OS X Snow Leopard, qui contient une implémentation complète d'OpenCL[19].

Dans Snow Leopard, OpenCL est initialement supporté sur les puces ATI Radeon HD 4850, ATI Radeon HD 4870 ainsi que les puces Nvidia Geforce 8600M GT, GeForce 8800 GS, GeForce 8800 GT, GeForce 8800 GTS, Geforce 9400M, GeForce 9600M GT, GeForce GT 120, GeForce GT 130, GeForce GTX 285, Quadro FX 4800, et Quadro FX 5600[20].

Le 28 septembre 2009, Nvidia sort ses propres pilotes OpenCL et son implémentation du SDK.

Le 13 octobre 2009, AMD sort la quatrième bêta du ATI Stream SDK 2.0, qui fournit une implémentation OpenCL complète sur tous les GPU des familles R700/R800, utilisant également les unités SSE3 des CPUs. Le SDK est disponible à la fois pour GNU/Linux et Windows[21].

Le 30 octobre 2009, IBM sort la version 0.1 de son SDK OpenCL pour GNU/Linux sur l'architecture Power utilisé dans une majorité des plus puissants supercalculateurs au monde[22].

Le 26 novembre 2009, Nvidia sort des pilotes pour l'implémentation OpenCL 1.0 (rev 48).

Les implémentations OpenCL d'Apple[23], Nvidia[24], RapidMind (en)[25] et Mesa Gallium3D[26] sont toutes basées sur la technologie de compilation LLVM et utilisent le compilateur Clang comme frontend.

Le 10 décembre 2009, VIA sort son premier produit supportant OpenCL 1.0 - Le processeur vidéo ChromotionHD 2.0 inclus dans les puces VN1000[27].

Le 21 décembre 2009, AMD sort la version de production de l’ATI Stream SDK 2.0[28], qui fournit un support d'OpenCL 1.0 pour les GPU R800 et un support bêta pour R700.

Le 29 juin 2011, Intel sort la version finale de son kit de développement supportant OpenCL version 1.1[29].

Le 3 août 2011, AMD annonce son kit de développement ATI Stream SDK 2.5[30], qui améliore, entre autres, la bande passante CPU/GPU pour tirer un meilleur parti de ses récents APU.

Chez Intel, les processeurs graphiques inclus dans sa gamme de processeurs Ivy Bridge, sortis le 29 avril 2012, Intel HD 2500 ainsi que HD 4000 et supérieurs, sont les premières architectures à supporter matériellement OpenCL, en version 1.1[31].

La bibliothèque Beignet[32] est une bibliothèque OpenCL libre pour les processeurs Intel Ivy Bridge GT2, dans le cadre du projet freedesktop.org, et développé principalement par Intel. Il utilise principalement LLVM, mais est également compatible avec GCC.

Fin 2013, ARM annonce à son tour son « Mali OpenCL SDK », pour ses processeurs graphiques Mali T600 et supérieurs, dont les premiers modèles sont sortis en 2012. Les sources sont disponibles, mais la licence est propriétaire et contraignante quant à la redistribution[33].

Implémentations Open-source

[modifier | modifier le code]
Clover [1] et libCLC [2] pour les fonctions de la bibliothèque standard OpenCL
POCL (Portable OpenCL) [3]

Exemple

[modifier | modifier le code]

Cet exemple calcule une Transformée de Fourier rapide :

/* creation d'un contexte de calcul sur GPU */
context = clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU, NULL, NULL, NULL);

/* récupération de la liste des cartes disponibles */
clGetContextInfo(context, CL_CONTEXT_DEVICES, 0, NULL, &nb_devices);
clGetContextInfo(context, CL_CONTEXT_DEVICES, nb_devices, devices, NULL);

/* creation d'une queue de commande sur le premier GPU */ 
queue = clCreateCommandQueue(context, devices[0], 0, NULL);

/* allocation des tampons mémoire */
memobjs[0] = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(float)*2*num_entries, srcA, NULL);
memobjs[1] = clCreateBuffer(context, CL_MEM_READ_WRITE, sizeof(float)*2*num_entries, NULL, NULL);

/* création du programme de calcul (le programme qui s'execute sur le GPU) */ 
program = clCreateProgramWithSource(context, 1, &fft1D_1024_kernel_src, NULL, NULL);

/* compilation du programme */
clBuildProgram(program, 0, NULL, NULL, NULL, NULL);

/* création du noyau de calcul */
kernel = clCreateKernel(program, "fft1D_1024", NULL);

/* mise en place des paramètres */
clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&memobjs[0]);
clSetKernelArg(kernel, 1, sizeof(cl_mem), (void *)&memobjs[1]);
clSetKernelArg(kernel, 2, sizeof(float)*(local_work_size[0]+1)*16, NULL);
clSetKernelArg(kernel, 3, sizeof(float)*(local_work_size[0]+1)*16, NULL);

/* création des objets de travail
   et lancement du calcul */
global_work_size[0] = num_entries;
local_work_size[0] = 64;
clEnqueueNDRangeKernel(queue, kernel, 1, NULL, global_work_size, local_work_size, 0, NULL, NULL);

Le calcul : (basé sur Fitting FFT onto the G80 Architecture)[34]

// This kernel computes FFT of length 1024. The 1024 length FFT is decomposed into 
// calls to a radix 16 function, another radix 16 function and then a radix 4 function 

__kernel void fft1D_1024 (__global float2 *in, __global float2 *out, 
                          __local float *sMemx, __local float *sMemy) { 
  int tid = get_local_id(0); 
  int blockIdx = get_group_id(0) * 1024 + tid; 
  float2 data[16]; 
  // starting index of data to/from global memory 
  in = in + blockIdx;  out = out + blockIdx; 
  globalLoads(data, in, 64); // coalesced global reads 
  fftRadix16Pass(data);      // in-place radix-16 pass 
  twiddleFactorMul(data, tid, 1024, 0); 
  // local shuffle using local memory 
  localShuffle(data, sMemx, sMemy, tid, (((tid & 15) * 65) + (tid >> 4))); 
  fftRadix16Pass(data);               // in-place radix-16 pass 
  twiddleFactorMul(data, tid, 64, 4); // twiddle factor multiplication 
  localShuffle(data, sMemx, sMemy, tid, (((tid >> 4) * 64) + (tid & 15))); 
  // four radix-4 function calls 
  fftRadix4Pass(data); fftRadix4Pass(data + 4); 
  fftRadix4Pass(data + 8); fftRadix4Pass(data + 12); 
  // coalesced global writes 
  globalStores(data, out, 64); 
}

Références

[modifier | modifier le code]
  1. ↑ « The OpenCL™ Specification »
  2. ↑ (en) « Nvidia Parallel Nsight » (consulté le 5 février 2022).
  3. ↑ (en-US) « AOCL Archive », sur AMD (consulté le 5 février 2022).
  4. ↑ (en) « CodeXL has moved to GPUOPEN! » (consulté le 29 août 2016).
  5. ↑ (en) Kevin Morris, « HLS versus OpenCL », sur Electronic-Engineering Journal, 12 mars 2013
  6. ↑ Roozmeh et Lavagno 2018.
  7. ↑ a et b (en) « Apple Previews Mac OS X Snow Leopard to Developers », Apple, 9 juin 2008.
  8. ↑ Communiqué de presse de Nvidia.
  9. ↑ (en) « Khronos Releases OpenCL 1.2 Specification », sur The Khronos Group, 15 novembre 2011 (consulté le 5 février 2022).
  10. ↑ (en) « Khronos Releases OpenCL 1.2 Specification », sur The Khronos Group, 15 novembre 2011 (consulté le 5 février 2022)
  11. ↑ http://webcl.nokiaresearch.com/
  12. ↑ (en) « Clover git repo », 4 janvier 2010 (consulté le 30 janvier 2010).
  13. ↑ (en) « OpenCL Over Mesa, Gallium3D Discussion », 9 décembre 2009 (consulté le 30 janvier 2010).
  14. ↑ (en) « OpenCL Demo, AMD CPU », 10 décembre 2008 (consulté le 28 mars 2009).
  15. ↑ (en) « OpenCL Demo, NVIDIA GPU », 10 décembre 2008 (consulté le 28 mars 2009).
  16. ↑ (en) « AMD and Havok demo OpenCL accelerated physics », PC Perspective, 26 mars 2009 (consulté le 28 mars 2009).
  17. ↑ (en) « NVIDIA Releases OpenCL Driver To Developers », NVIDIA, 20 avril 2009 (consulté le 27 avril 2009).
  18. ↑ (en) « AMD does reverse GPGPU, announces OpenCL SDK for x86 », Ars Technica, 5 août 2009 (consulté le 6 août 2009).
  19. ↑ (en) Dan Moren, Jason Snell, « Live Update: WWDC 2009 Keynote », macworld.com, MacWorld, 8 juin 2009 (consulté le 12 juin 2009).
  20. ↑ (en) « Mac OS X Snow Leopard – Technical specifications and system requirements », Apple Inc, 8 juin 2009 (consulté le 25 août 2009).
  21. ↑ (en) « ATI Stream Software Development Kit (SDK) v2.0 Beta Program » (consulté le 14 octobre 2009).
  22. ↑ (en) « OpenCL Development Kit for Linux on Power » (consulté le 30 octobre 2009).
  23. ↑ (en) « Apple entry on LLVM Users page » (consulté le 29 août 2009).
  24. ↑ (en) « Nvidia entry on LLVM Users page » (consulté le 6 août 2009).
  25. ↑ (en) « Rapidmind entry on LLVM Users page » (consulté le 1er octobre 2009).
  26. ↑ (en) « Zack Rusin's blog post about the Mesa Gallium3D OpenCL implementation » (consulté le 1er octobre 2009).
  27. ↑ (en) « WebCL - Heterogeneous parallel computing in HTML5 web browsers », sur The Khronos Group, 26 juillet 2011 (consulté le 5 février 2022).
  28. ↑ (en) « ATI Stream SDK v2.0 with OpenCL 1.0 Support » (consulté le 23 octobre 2009).
  29. ↑ (en) « Intel® SDK for OpenCL™ Applications », sur Intel (consulté le 5 février 2022).
  30. ↑ (en) « AMD APP SDK 2.5 provides enhanced performance and major new capabilities » (consulté le 3 août 2011).
  31. ↑ « Nouveaux pilotes chez Intel : OpenGL 4.0 et Ultra HD pour Ivy Bridge », sur pcinpact.com, 24 octobre 2012 (version du 26 octobre 2012 sur Internet Archive).
  32. ↑ « Beignet » (consulté le 10 décembre 2013).
  33. ↑ (en) « Mali OpenCL SDK » [archive du 9 décembre 2013] (consulté le 10 décembre 2013).
  34. ↑ (en) « Fitting FFT onto G80 Architecture », Vasily Volkov and Brian Kazian, UC Berkeley CS258 project report, mai 2008 (consulté le 14 novembre 2008)

Bibliographie

[modifier | modifier le code]
  • Mehdi Roozmeh et Luciano Lavagno, « Design space exploration of multi-core RTL via high level synthesis from OpenCL models », Microprocessors and Microsystems, vol. 63,‎ novembre 2018, p. 199-208 (DOI 10.1016/j.micpro.2018.09.009, lire en ligne)

Voir aussi

[modifier | modifier le code]

Articles connexes

[modifier | modifier le code]
  • GPGPU
  • OpenHMPP New Standard for manycore
  • Vulkan
  • PoCL, bibliothèque OpenCL utilisant principalement les microprocesseurs

Liens externes

[modifier | modifier le code]
  • Site web officiel OpenCL de Khronos
  • GPU Modeling and Development in OpenCL
v · m
Standards du Khronos Group
  • COLLADA
  • EGL
  • glTF
  • OpenCL
  • OpenGL
  • OpenGL ES
  • OpenGL SC (en)
  • OpenKODE
  • OpenMAX
  • OpenML
  • OpenSL ES (en)
  • OpenVG
  • OpenWF (en)
  • OpenXR
  • SPIR
  • Vulkan
  • WebCL
  • WebGL
v · m
API Web
Côté serveur
Protocole de communication
  • CGI
  • SCGI
  • FCGI
  • AJP
  • WSRP
  • WebSocket
APIs serveur
  • C NSAPI (en)
  • C ASAPI
  • C ISAPI
  • COM ASP
  • Servlet
  • container
  • CLI OWIN (en)
  • ASP.NET Handler (en)
  • Python WSGI
  • Ruby Rack
  • JavaScript JSGI (en)
  • Perl PSGI
  • Portlet container
Modules apaches
  • mod_jk
  • mod_lisp (en)
  • mod_mono (en)
  • mod_parrot (en)
  • mod_perl
  • mod_php
  • mod_proxy (en)
  • mod_python (en)
  • mod_wsgi
  • mod_ruby (en)
  • Phusion Passenger
Sujets
  • Ressource du World Wide Web vs. Service web
  • Open API (en)
  • Webhook
  • Serveur d'applications
  • Scripting
Côté client
W3C
  • HTML5 audio (en)
  • Canvas
  • CORS
  • DOM
  • DOM events (en)
  • File (en)
  • Geolocation (en)
  • IndexedDB
  • SSE
  • SVG
  • Video
  • WebRTC
  • WebSocket
  • Web messaging (en)
  • Stockage web local
  • WebAuthn
  • Web worker (en)
  • XMLHttpRequest
Khronos
  • OpenCL
  • WebGL
Autres
  • Gears
  • Web SQL Database (formerly W3C)
Sujets
  • Page web dynamique
  • Open Web Platform (en)
  • Rich Internet application
  • icône décorative Portail de l’informatique
Ce document provient de « https://fr.teknopedia.teknokrat.ac.id/w/index.php?title=OpenCL&oldid=222908740 ».
Catégories :
  • Logiciel écrit en C++
  • Logiciel écrit en C
  • Interface de programmation
  • Langage de programmation
  • Norme ou standard informatique
  • Calcul parallèle
Catégories cachées :
  • Wikipédia:ébauche informatique
  • Page utilisant P170
  • Page utilisant P178
  • Page utilisant P571
  • Page utilisant P348
  • Page utilisant P277
  • Logiciel catégorisé automatiquement par langage d'écriture
  • Page utilisant P306
  • Page utilisant P400
  • Page utilisant P31
  • Page utilisant P275
  • Page utilisant P856
  • Article utilisant une Infobox
  • Article contenant un appel à traduction en anglais
  • Portail:Informatique/Articles liés
  • Portail:Technologies/Articles liés

  • indonesia
  • Polski
  • الرية
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • مصر
  • Nederlands
  • 本語
  • Português
  • Sinugboanong Binisaya
  • Svenska
  • Українска
  • Tiếng Việt
  • Winaray
  • 中文
  • Русски
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id