Podle informací na webu jde o stručný přehled rozdílů mezi CUDA a OpenCL. Prosím, upozorněte na případné chyby.
Odbočka: Simulační test v Sandia National Laboratory ve Spojených státech prokázal, že kvůli omezením mechanismu úložiště a šířky pásma paměti nejenže nemohou 16jádrové, 32jádrové nebo dokonce 64jádrové procesory nejen přinést zlepšení výkonu superpočítačům, ale mohou dokonce vést k výraznému snížení efektivity.
Co je to OpenCL?
Jedná se o otevřený a svobodný standard pro paralelní programování určený pro obecné účely heterogenních systémů, který zahájil Apple a společně ho vyrábělo mnoho známých výrobců v oboru, a zároveň jde o jednotné programovací prostředí. Je pohodlné pro softwarové vývojáře psát efektivní a lehký kód pro vysoce výkonné výpočetní servery, desktopové počítačové systémy a přenosná zařízení a je široce využíván v vícejádrových procesorech (CPU), grafických procesorech (GPU), buněčných architekturách a dalších paralelních procesorech, jako jsou digitální signálové procesory (DSP), a nabízí široké vývojové možnosti v různých oblastech, jako jsou hry, zábava, vědecký výzkum a lékařská péče.
Co je CUDA?
CUDA je architektura založená na paralelním výpočtu na GPU Nvidia. CUDA zahrnuje hlavně dva aspekty: jedním je architektura instrukční sady ISA; druhý hardwarový výpočetní engine; Ve skutečnosti je to hardware a instrukční sada. Jinými slovy, můžeme si CUDA představit jako architekturu podobnou X86 nebo buňce, ale založenou na GPU, nikoli na tradičních CPU.
Co vlastně OpenCL je?
OpenCL je ve skutečnosti zcela nové API pro paralelní programování heterogenních systémů a OpenCL může využívat GPU k provádění některých paralelních výpočtů. OpenGL je pro grafy, zatímco OpenCL je pro paralelní výpočty. Při vývoji OpenCL jsou všechny technické platformy grafické karty NVIDIA a ve skutečnosti je OpenCL vyvíjen na základě platforem NVIDIA GPU. Kromě toho první demo OpenCL běželo také na NVIDIA GPU. V podstatě je OpenCL technologií ekvivalentní DirectX na platformě Windows. Nebo spíše je to API rozhraní, které propojuje hardware a software. V tomto ohledu je podobný OpenGL, ale OpenCL je mnohem rozsáhlejší než OpenGL a používá se nejen pro 3D grafiku. Pokud to popsáte jednou větou, role OpenCL je uvolnit hardwarový potenciál tím, že volá výpočetní zdroje procesoru a GPU, aby program běžel rychleji a lépe.
Co vlastně CUDA je?
Architektura CUDA je nativní, speciálně navržená pro výpočetní rozhraní, a tato hardwarová architektura, včetně instrukčních sad, je kompletní sadou architektur navržených pro tento druh paralelního a heterogenního výpočtu. Architektura CUDA podporuje API, včetně OpenCL nebo DirectX, a CUDA také podporuje C, C++, Fortran, Java, Python a další jazyky.
Jaký je vztah mezi OpenCL a CUDA?
Vztah mezi CUDA a OpenCL není konfliktní, ale inkluzivní vztah. OpenCL je API, na první úrovni je architektura CUDA na vyšší úrovni, ať už jde o OpenCL, DX11 nebo jazyk C, Fortran, DX11 výpočty mohou být podporovány. Jako programový vývojář obvykle rozumí pouze těmto jazykům nebo API a může používat více jazyků k vývoji vlastních programů, bez ohledu na to, jaký jazyk si zvolí, pokud chce používat výpočetní výkon GPU, může použít CUDA k programování na této architektuře. Technické rozdíly mezi OpenCL a CUDA se odrážejí především v metodě implementace. CUDA založená na jazyce C je zabalena do snadno psatelného kódu, takže i výzkumníci, kteří nejsou obeznámeni s konstrukcí čipů, mohou používat nástroje CUDA k psaní praktických programů. Ačkoliv je OpenCL syntakticky blízký CUDA, klade větší důraz na základní operace, což je obtížnější, ale právě proto může OpenCL běžet napříč platformami. CUDA je paralelní výpočetní architektura, která obsahuje architekturu instrukční sady a odpovídající hardwarový engine. OpenCL je programovací rozhraní (API) pro paralelní výpočetní techniku a OpenCL je nová cesta vývoje programu CUDA kromě C for CUDA na architektuře NVIDIA CUDA. Pokud chcete získat větší kontrolu nad hardwarem, můžete programovat pomocí OpenCL API, a pokud o API moc nevíte, můžete programovat i v CUDA C, což jsou dva různé způsoby programování, které mají své podobnosti i rozdíly. Ale když se vyvíjejí jazyky OpenCL a CUDA C, v paralelním počítání jsou jejich koncepty podobné, tyto dva programy mají velké podobnosti, takže je relativně snadné programy mezi sebou přenášet.
Jazyk CUDA C je umístěn jinak než OpenCL, jinými slovy, používá jiné uživatele. CUDA C je jazyk vyšší úrovně, který mohou snadno používat neprofesionálové, kteří o hardwaru moc nevědí; OpenCL je hardwarově orientované rozhraní pro vývoj aplikací, které programátorům dává větší kontrolu nad hardwarem a bude obtížnější začít a vyvíjet je. Uživatelské návyky programátorů jsou také velmi důležité, ti, kteří používají jazyk C na platformě CPU X86, snadno přijmou jazyk C založený na platformě CUDA GPU; Lidé, kteří jsou zvyklí používat vývoj grafiky v OpenGL, budou otevřenější k OpenCL a bude velmi snadné vyvíjet výpočetní programy související s grafikou a videem na jeho základě.
|