Volgens de informatie op de website is een korte samenvatting van de verschillen tussen CUDA en OpenCL. Wijs alstublieft eventuele fouten aan.
Afwijking: Een simulatietest bij het Sandia National Laboratory in de Verenigde Staten bewees dat door de beperkingen van opslagmechanisme en geheugenbandbreedte, 16-core, 32-core of zelfs 64-core processors niet alleen geen prestatieverbeteringen aan supercomputers kunnen opleveren, maar zelfs kunnen leiden tot een aanzienlijke vermindering van de efficiëntie.
Wat is OpenCL?
Het is een open en vrije standaard voor parallel programmeren voor het algemene doel van heterogene systemen, geïnitieerd door Apple en gezamenlijk geproduceerd door vele bekende fabrikanten in de industrie, en het is ook een uniforme programmeeromgeving. Het is handig voor softwareontwikkelaars om efficiënte en lichtgewicht code te schrijven voor high-performance computing servers, desktopcomputers en handheldapparaten, en wordt veel gebruikt in multi-core processors (CPU's), grafische verwerkingsunits (GPU's), celachtige architecturen en andere parallelle processors zoals digitale signaalprocessors (DSP's), en biedt brede ontwikkelingsmogelijkheden in diverse vakgebieden zoals games, entertainment, wetenschappelijk onderzoek en medische zorg.
Wat is CUDA?
CUDA is een architectuur gebaseerd op parallelle computing op Nvidia GPU's. CUDA omvat voornamelijk twee aspecten: één is de ISA-instructiesetarchitectuur; de tweede hardware-rekenengine; Het is eigenlijk hardware en instructieset. Met andere woorden, we kunnen CUDA zien als een architectuur vergelijkbaar met X86 of cell, maar dan gebaseerd op GPU's, niet op traditionele CPU's.
Wat is OpenCL eigenlijk?
OpenCL is eigenlijk een gloednieuwe API voor parallel programmeren van heterogene systemen, en OpenCL kan GPU's gebruiken om wat parallel berekeningswerk uit te voeren. OpenGL is voor grafen, terwijl OpenCL voor parallel rekenen is. Tijdens de ontwikkeling van OpenCL zijn alle technische platforms NVIDIA GPU's, en OpenCL is in feite ontwikkeld op basis van NVIDIA GPU-platforms. Daarnaast draaide de eerste demo van OpenCL ook op NVIDIA GPU's. In wezen is OpenCL een technologische equivalent van DirectX op het Windows-platform. Of beter gezegd, het is een API-interface die hardware en software met elkaar verbindt. In dit opzicht lijkt het op OpenGL, maar OpenCL is veel uitgebreider dan OpenGL en wordt niet alleen gebruikt voor 3D-graphics. Als je het in één zin beschrijft, is de rol van OpenCL om het hardwarepotentieel te ontketenen door de rekenkrachten van de processor en GPU aan te roepen, zodat het programma sneller en beter draait.
Wat is CUDA eigenlijk?
De CUDA-architectuur is native, speciaal gebouwd voor computerinterfaces, en deze hardwarearchitectuur, inclusief instructiesets, is een complete set architecturen ontworpen voor dit soort parallelle computing en heterogene computing. De CUDA-architectuur kan API's ondersteunen, waaronder OpenCL of DirectX, en CUDA ondersteunt ook C, C++, Fortran, Java, Python en andere talen.
Wat is de relatie tussen OpenCL en CUDA?
De relatie tussen CUDA en OpenCL is geen conflictrelatie, maar een inclusieve relatie. OpenCL is een API, op het eerste niveau is de CUDA-architectuur een hoger niveau, of het nu OpenCL, DX11 of de C-taal is, Fortran en DX11-computing kunnen worden ondersteund. Als programmaontwikkelaar begrijpen ze meestal alleen deze talen of API's, en kunnen ze meerdere talen gebruiken om hun eigen programma's te ontwikkelen, ongeacht welke taal ze kiezen; zolang ze de rekenkracht van de GPU willen aanroepen, kunnen ze CUDA gebruiken om op deze architectuur te programmeren. De technische verschillen tussen OpenCL en CUDA worden vooral weerspiegeld in de implementatiemethode. CUDA gebaseerd op de C-taal is verpakt in een eenvoudig te schrijven code, dus zelfs onderzoekers die niet bekend zijn met chipbouw kunnen CUDA-tools gebruiken om praktische programma's te schrijven. Hoewel OpenCL syntactisch dicht bij CUDA ligt, legt het meer nadruk op de onderliggende operaties, waardoor het moeilijker is, maar daardoor kan OpenCL platformoverstijgen. CUDA is een parallelle rekenarchitectuur die een instructiesetarchitectuur en een bijbehorende hardware-engine bevat. OpenCL is een applicatieprogrammeerinterface (API) voor parallel rekenen, en OpenCL is een nieuw CUDA-programmaontwikkelingspad naast C voor CUDA op de NVIDIA CUDA-architectuur. Als je meer controle over de hardware wilt krijgen, kun je de OpenCL API gebruiken om te programmeren, en als je niet veel van de API weet, kun je ook programmeren in CUDA C, dat zijn twee verschillende manieren van programmeren, en ze hebben hun overeenkomsten en verschillen. Maar er is een beetje wanneer OpenCL en CUDA C-talen worden ontwikkeld, in parallel rekenen, hun concepten lijken op elkaar, deze twee programma's hebben grote overeenkomsten, dus het is relatief eenvoudig om programma's naar elkaar te porten.
De CUDA C-taal is anders gepositioneerd dan OpenCL, of met andere woorden, het gebruikt andere mensen. CUDA C is een hoog-niveau taal die gemakkelijk gebruikt kan worden door niet-professionals die weinig van hardware weten; OpenCL is een hardwaregerichte applicatie-ontwikkelinterface, die programmeurs meer controle over de hardware geeft, en het zal moeilijker zijn om te beginnen en te ontwikkelen. De gebruiksgewoonten van programmeurs zijn ook erg belangrijk; degenen die de C-taal gebruiken op het X86 CPU-platform accepteren gemakkelijk de C-taal gebaseerd op het CUDA GPU-platform; Mensen die gewend zijn aan OpenGL-grafische ontwikkeling zullen OpenCL vriendelijker vinden, en het zal heel eenvoudig zijn om computerprogramma's te ontwikkelen die gerelateerd zijn aan graphics en video op basis daarvan.
|