OpenCL
Author
Albert FloresOpenCL (Open Computing Language) je průmyslový standard pro paralelní programování heterogenních počítačových systémů, jako jsou například osobní počítače vybavené CPU, APU, GPU (grafickým procesorem), případně DSP (audio procesorem).
Historie
Pro mnohé moderní hardwarové architektury se paralelismus stává jedinou cestou k vyšším výkonům. Tváři v tvář fyzikálním limitům, nejčastěji v podobě teplotních omezení, se různé platformy vydaly jednotnou cestou navyšování počtů exekučních jednotek umožňujících paralelní zpracování čím dál většího množství dat. +more Zároveň s tím dochází k rychlému nárůstu výkonu a schopnosti i těch nejmenších mobilních zařízení. Množství nosných architektur pro náročné aplikace tak roste poměrně rychlým tempem. Potřeba snadného, efektivního a jednotného zacházení s takovým množstvím hardwarových platforem znamenala vysokou poptávku po nových softwarových pomocnících. Nabídka nástrojů, které jsou schopné jednoduše zprostředkovávat programátorům tento nový způsob myšlení a práce, byla dlouho neuspokojivá. Dosavadní prostředí, která se tuto situaci pokoušejí řešit, trpí závažnými nedostatky. Mnohá proprietární řešení jsou totiž vázaná na konkrétní hardware (CUDA) či software (DirectCompute). Další nástroje sice umožňují jistý stupeň přenositelnosti, avšak za cenu znatelně pomalejšího běhu aplikací na nich postavených.
Tento neutěšený stav má za cíl řešit průmyslový standard OpenCL, jehož prvotní návrh lze vystopovat až k firmě Apple, která dosud drží práva k názvu OpenCL jakožto obchodní značce. V polovině roku 2008 přešel vývoj tohoto návrhu do rukou průmyslového konsorcia Khronos, které za tímto účelem vytvořilo pracovní skupinu Khronos Compute Working Group. +more Tato skupina zahrnovala členské zastoupení nejvýznamnějších firem v oboru jakými jsou AMD, IBM, Intel a nVidia. V rekordně krátkém čase 5 měsíců byl návrh prodiskutován a propracován do konečné podoby verze 1. Po schválení standardu všemi členy konsorcia došlo dne 8. prosince, 2008 k jeho uveřejnění.
Hardwarová a softwarová podpora
OpenCL definuje abstraktní hardwarové zařízení a k němu ovládací softwarové rozhraní, pomocí kterého aplikace přistupují ke konkrétním výpočetním možnostem různých hardwarových platforem. Jednoduchost modelu abstraktního zařízení usnadňuje jeho implementaci na široké škále existujících i plánovaných hardwarových platforem. +more Tyto platformy zahrnují klasické procesory (všechny procesory x86 s podporou instrukcí SSE3), grafické procesory (nVidia GeForce řady 8xxx a vyšší, ATI Radeon HD řady 4xxx a vyšší), signálové procesory (DSP), některé novější mobilní čipy, procesory typu Cell a další.
Ani softwarové rozhraní standardu není závislé na softwarové platformě, což znamená, že nepotřebuje ke svému chodu žádný konkrétní operační systém. Hlavní výrobci grafických čipů již zahrnuli implementaci OpenCL do grafických ovladačů nabízených pro nejrozšířenější operační systémy jakými jsou různé verze Windows (XP, Vista, 7) či hlavní distribuce Linuxu (Ubuntu, OpenSUSE, Fedora). +more Podpora samozřejmě nechybí ani v produktech Apple (MacOS X 10. 6, prostředí iPhone) a je dokonce dostupná i v některých virtuálních strojích (např. od VMware).
Standard OpenCL
Standard OpenCL obsahuje několik hlavních části: * Abstraktní modely určující požadované vlastnosti a chování zařízení OpenCL. * OpenCL Framework jehož součásti je definice OpenCL API. +more * Specifikaci programovacího jazyka, který je využíván pro programování zařízení OpenCL (OpenCL C).
Modely OpenCL
Modely OpenCL jsou abstraktním vyjádřením vlastností a chování platforem a zařízení, jež odpovídají standardu OpenCL. Jsou to: * Model platformy. +more * Exekuční model. * Paměťový model. * Programovací model.
Model platformy
Model definuje heterogenní paralelní stroj jako počítačový systém schopný nabízet služby OpenCL. Tento heterogenní stroj obsahuje hostitelský systém (dále jen hostitel) a jedno či více zařízení OpenCL (dále jen zařízení), kterými hostitel disponuje. +more Model platformy navíc předpokládá, že se zařízení skládá z výpočetních jednotek, které jsou dále dělené do procesních elementů.
Exekuční model
Běh softwarového systému využívající OpenCL probíhá na dvou úrovních heterogenního paralelního stroje. Klasická aplikační část (dále jen aplikace) je vykonávaná v rámci hostitele. +more Tato aplikace odpovídá kromě jiného za komunikaci mezi hostitelem a zařízeními stejně jako za spuštění a koordinaci výpočtů na těchto zařízeních. Samotné zařízení zpracovává tu část aplikace, jež byla vyjádřena jazykem OpenCL C (dále jen program). Program má formu jednoho či více výpočtových vláken, které jsou zpracovávané v rámci procesních elementů daného zařízení. Tato vlákna jsou instancemi funkčního objektu, který se nazývá kernel. Při spuštění výpočtu specifikuje aplikace jedno až třírozměrný indexový prostor, celkový počet instancí kernelu a (nepovinně) velikost skupin do kterých se budou tyto instance sdružovat. Z těchto informací OpenCL následně určí počet skupin a každé instanci kernelu přiřadí globální index, lokální index a skupinový index. Lokální respektive globální index identifikuje instanci kernelu v rámci skupiny respektive v rámci všech instancí. Skupinový index je identifikátor skupiny do nichž instance kernelu patři.
Paměťový model
Tento model slouží k definici paměťové hierarchie, která zahrnuje různé paměťové oblasti zařízeni. Specifikuje typy paměti, druhy přístupu a její alokaci, kdo je za tyto operace odpovědný a jak. +more
* Globální paměť je oblast paměti viditelná všem instancím kernelu.
* Konstantní paměť je oblast globální paměti do nichž instance kernelu nemá právo zápisu.
* Lokální paměť je oblast paměti viditelná pouze instancím kernelu ve skupině.
* Privátní paměť je oblast paměti viditelná pouze v rámci instance kernelu.
Způsoby alokace paměti v jednotlivých paměťových oblastech:
Druhy přístupu k paměťovým oblastem:
[wiki_table=f2cb438f]
Přesuny dat mezi hostitelem a touto hierarchií paměti se provádí zasláním příslušných příkazů (čtení, zápis nebo kopírování) na příkazovou frontu. Globální Konstantní Lokální Privátní Aplikace dynamická dynamická dynamická žádná Kernel žádná statická statická statická
Programovací model
Z exekučního modelu vyplývá, že OpenCL podporuje úlohově paralelní a datově paralelní programovací modely (čí kombinaci obou). Standard OpenCL se soustřeďuje hlavně na datově paralelní programovací model.
OpenCL Framework
OpenCL Framework poskytuje aplikacím možnost využívat hostitelský systém a jeho zařízení v souladu s modely OpenCL jako heterogenní paralelní stroj. Framework obsahuje následující komponenty: * Programovací aplikační rozhraní OpenCL API, jež umožňuje práci se systémem OpenCL. +more * Kompilátor jazyka OpenCL C, který překládá programy psané v jazyce OpenCL C do konkrétního strojového kódu dané hardwarové platformy.
Jazyk OpenCL C
Programovací jazyk OpenCL C je založen na normě „ISO/IEC 9899:1999 - Specifikace jazyka C“ (dále C99). Oproti C99 se OpenCL C liší množstvím rozšíření, která zahrnují: * Vektorové datové typy. +more * Datové typy a funkce podporující práci s obrázky a jejích filtrování. * Kvalifikátory adresního prostoru. * Kvalifikátory přístupových práv. * Kernelové funkce. * Přesně definované chování datových typů čísel s plovoucí desetinnou čárkou dle standardu IEEE 754. Toto platí také pro všechny funkce a operátory, které s těmito typy pracují. Na druhou stranu OpenCL C zavádí několik omezení: * Ukazatele na funkce, pole proměnné délky a bitová pole jsou zakázaná. * Velká většina hlavičkových souborů standardní knihovny jazyka C je nedostupná. * Rekurzivní funkce nejsou povolené. * Kernelové funkce nesmějí deklarovat argumenty typu ukazatel na ukazatel ani nic vracet. * Zápisy na pole číselných typů menších než 32 bitů jsou zakázané.
Profil „embedded“
Kromě výchozího profilu standardu je k dispozici též profil pro mobilní či vestavěná zařízení, která jsou schopná podporovat modely architektury OpenCL, ale nedisponují dostatečným výkonem pro zajištění plného rozsahu funkčnosti. V tomto „lehkém“ profilu jsou některé části standardu nepovinné (podpora 3D obrazu) či odstraněné úplně (striktní konformita s IEEE-754, 64bitové číselné typy).
Standard OpenCL 2.0
Standard OpenCL 2. 0 rozšiřuje možnosti OpenCL tak že: * přináší sdílení paměti CPU a GPU (snižuje režii systému), * přináší možnost větší autonomie GPU (možnost efektivního využití nových algoritmů). +more Dne 24. 9. 2014 AMD uvolnila OpenCL 2. 0 ovladač pro 64bitový Linux a 64bitový Windows 8. 1. Aktuální seznam podporovaných procesorů a grafik. V současné době jsou podporovány grafické čipy firmy AMD s architekturou GCN, konkrétně AMD Radeon HD 7000 a výše (s výjimkou OEM verzí).
Standard OpenCL 3.0
Standard OpenCL 3. 0 rozšiřuje možnosti OpenCL tak že: * přidává Asynchronous DMA Extension, * přichází SPIR-V 1. +more3, * odstraňuje nativní podporu C++, zejména OOP, přechází se zpět na C. C++ bude externí projekt.
Zároveň dochází podmíněnému ořezání některých dřívějších schopností OpenCL, základem zůstává OpenCL 1.2.
Odkazy
Reference
Související články
Khronos Group * OpenGL * OpenGL ES * CUDA * GPGPU
Externí odkazy
[url=https://www. root. +morecz/clanky/pacman-je-nova-zranitelnost-cipu-apple-m1-blender-3-2-vyrazne-rychlejsi-na-gpu-nvidia-nez-amd/]PoCL 3. 0 jako minimální CPU implementace OpenCL 3. 0[/url] - Root. cz * [url=https://web. archive. org/web/20091122114534/http://www. khronos. org/registry/cl/specs/opencl-1. 48. pdf]Specifikace OpenCL 1. 0[/url] * [url=http://www. khronos. org/registry/cl/sdk/1. 0/docs/man/xhtml/]Manuálové stránky OpenCL[/url] * [url=https://developer. nvidia. com/opencl]OpenCL na stránkách NVidia[/url].
Kategorie:Rozhraní pro programování aplikací Kategorie:Programové knihovny