OpenCL

Da Wikipedia, l'enciclopedia libera.
OpenCL
Logo
Sviluppatore Khronos Group
Data prima versione 8 dicembre 2008
Ultima versione 2.0 (22 luglio 2013[1])
Ultima beta 2.1 (29 gennaio 2015)
Sistema operativo Multipiattaforma
Genere Libreria software (non in lista)
Licenza Royalty Free
Sito web www.khronos.org/opencl

OpenCL (Open Computing Language) è una libreria basata sul linguaggio ANSI C che può esser eseguito su una molteplicità di piattaforme, CPU, GPU, e altri tipi di processori. In particolare, le potenzialità di OpenCL sono bene espresse con architetture altamente parallelizzabili e potenti come le GPU, e in questo caso si parla dell'ambito GPGPU.

Storia[modifica | modifica wikitesto]

Lo standard è stato originariamente proposto dalla Apple, successivamente ratificato dalla stessa assieme le principali aziende del settore (Intel, NVIDIA, AMD), ed infine portato a compimento dal consorzio no-profit Khronos Group.

Il nome OpenCL è stato pensato in analogia a OpenGL ed OpenAL, in quanto tutti standard industriali aperti, pur con diverse finalità: il primo per sfruttare le potenzialità delle attuali GPU oltre il rendering grafico, e gli altri rispettivamente per la grafica 3D e il rendering audio posizionale.

Allo stato attuale OpenCL è supportato su schede video AMD e NVIDIA[2], è certificato su Mac OS X Snow Leopard[3] mentre è disponibile in versione beta su alcuni sistemi Linux e Windows.

Versioni[modifica | modifica wikitesto]

1.0

Proposta finale della versione 1.0 in data 18 novembre 2008 e rilasciata ufficialmente l'8 dicembre 2008. Il 9 dicembre 2008, Nvidia ha annunciato la sua intenzione di aggiungere il supporto completo per la specifica OpenCL 1.0 per la sua Toolkit GPU Computing, mentre RapidMind ha annunciato l'adozione di OpenCL sotto la piattaforma di sviluppo per supportare le GPU di fornitori diversi con un'unica interfaccia. Venne utilizzato con Mac OS X Snow Leopard, il 28 agosto 2009, Mentre IBM il 30 ottobre del 2009 ha rilasciato la sua prima implementazione OpenCL come una parte dei compilatori XL, invece AMD ha deciso di supportare OpenCL per AMD FireStream (precedentemente conosciuto come "CTM (Close to Metal)"), attuando il supporto nel marzo 2010.

1.1

Ratificato dal Khronos Group in data 14 giugno 2010 e aggiunge significative funzionalità per una maggiore flessibilità di programmazione parallela, funzionalità e prestazioni tra cui:

  • Nuovi tipi di dati tra cui vettori di 3 componenti e formati di immagine aggiuntivi;
  • Gestione comandi da più thread di accoglienza e buffer di elaborazione su più dispositivi;
  • Operazioni sulle regioni di un buffer tra cui leggere, scrivere e copia delle regioni rettangolari 1D, 2D o 3D;
  • Uso avanzato degli eventi per guidare e controllare l'esecuzione dei comandi;
  • Ulteriori introduzioni delle funzioni C, come la pinza integer, shuffle, e le copie strided asincroni;
  • Migliore interoperabilità OpenGL attraverso un'efficiente condivisione di immagini e buffer collegando gli eventi OpenCL e OpenGL.
1.2

Rilasciato il 15 novembre 2011, che ha aggiunto funzionalità significative rispetto alle versioni precedenti in termini di prestazioni e funzionalità per la programmazione parallela. La maggior parte delle caratteristiche notevoli includono:

  • Partizionamento dispositivo: la possibilità di partizionare un dispositivo in sotto-dispositivi in ​​modo che gli incarichi di lavoro possono essere assegnati alle unità di elaborazione individuali. Questo è utile per riservare aree del dispositivo per ridurre la latenza per le attività time-critical.
  • Compilazione separata e il collegamento degli oggetti: la funzionalità per compilare OpenCL in librerie esterne per l'inclusione in altri programmi.
  • Supporto avanzato delle immagine: 1.2 aggiunge il supporto per le immagini 1D e array di immagini 1D / 2D. Inoltre, le estensioni di condivisione OpenGL permettono ora per le texture OpenGL 1D ed array 1D / 2D di texture da utilizzare per creare immagini OpenCL.
  • Kernel built-in: dispositivi personalizzati che contengono specifiche funzionalità uniche sono ora integrati più strettamente nel quadro OpenCL. Kernel possono essere chiamati ad utilizzare gli aspetti specialistici o non programmabili di hardware sottostante. Gli esempi includono il video encoding / decoding e processori di segnali digitali.
  • Funzionalità DirectX: condivisione dei mezzi di superficie DX9 permette un'efficiente condivisione tra OpenCL e le superfici di media DX9 o DXVA. Allo stesso modo, per DX11, senza soluzione di continuità la condivisione tra superfici OpenCL e DX11 è abilitato.
  • La possibilità di forzare IEEE 754 conformità per singola precisione in virgola mobile per la matematica: OpenCL di default permette le versioni singole di precisione della divisione, reciproca, e il funzionamento radice quadrata di meno precisi rispetto ai valori correttamente arrotondati rispetto alle richieste IEEE 754. Se il programmatore passa il "-cl-fp32-corretto-arrotondato-divide-sqrt" argomento della riga di comando per il compilatore, queste tre operazioni saranno calcolati a IEEE 754 requisiti se l'attuazione OpenCL supporta questa, e non riuscirà a compilare se l'OpenCL implementazione non supporta queste operazioni di calcolo ai valori correttamente arrotondati come definito dalle specifiche IEEE 754. Questa capacità è completata dalla possibilità di interrogare l'attuazione OpenCL per determinare se è possibile eseguire queste operazioni secondo la precisione IEEE 754.
2.0

Pubblicata il 18 novembre 2013, gli aggiornamenti e le aggiunte al OpenCL 2.0 includono:

  • Memoria virtuale condivisa
  • Parallelismo nidificato
  • Spazio di indirizzamento Generico
  • Immagini
  • Atomics C11
  • Pipes
  • Android estensione driver client installabile
2.1

La ratifica e il rilascio delle specifiche OpenCL 2.1 provvisorie è stato annunciato il 3 marzo 2015 Game Developer Conference di San Francisco. OpenCL 2.1 aggiunge il supporto ufficiale per un sottoinsieme statico di C ++ 14 come lingua kernel. Vulkan e OpenCL 2,1 parti SPIR-V come un linguaggio intermedio che consente linguaggio di alto livello front-end di condividere una compilazione di un obiettivo comune. Gli aggiornamenti del API OpenCL includono:

  • Funzionalità aggiuntive sottogruppo
  • Copia di oggetti del kernel e stati
  • Bassa latenza query timer dispositivo
  • L'ingestione di codice SPIR-V by runtime
  • Priorità di esecuzione suggerimenti per le code
  • Zero dimensioni dispacci da ospite

AMD, ARM, Intel, HPC, e YetiWare hanno dichiarato il supporto per OpenCL 2.1.

Note[modifica | modifica wikitesto]

  1. ^ OpenCL - The open standard for parallel programming of heterogeneous systems{/exp:channel_entries}
  2. ^ Khronos Products
  3. ^ http://www.apple.com/it/macosx/technology/#opencl Apple OpenCL sezione ufficiale

Voci correlate[modifica | modifica wikitesto]

  • CAL (ex CTM (Close To Metal)), Framework di AMD per la programmazione delle sue GPU AMD Radeon HD e FireStream. Il modello di programmazione proposto è di tipo streaming, con forti richiami ai linguaggi data oriented. Usa una specializzazione di Brook, denominato Brook+ di ispirazione vettoriale.
  • CUDA, framework C proposto da Nvidia per la programmazione di GPU a partire dalla famiglia GeForce G80. Comprende un compilatore per un superset del linguaggio C - NVCC - e una serie di librerie di primitive implementate a vari livelli di complessità. Comprende un nutrito insieme di esempi applicativi e un ambiente di emulazione e debug. Compatibile con MSVC 2005 (piattforma Windows XP), GCC (piattaforme Linux e Mac OS X).
  • Intel Larrabee

Collegamenti esterni[modifica | modifica wikitesto]

Informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica