आज के GPU compute API
(threedots.ovh)NVIDIA
बाज़ार का अग्रणी, परिपक्व toolkit. यह अब भी तेज़ी से विकसित हो रहा है और खासकर higher-level API तो और भी ज़्यादा। NVIDIA द्वारा बेचे जाने वाले सभी GPU, CUDA को support करते हैं।
पहले PGI के नाम से जाना जाने वाला, और केवल Linux पर उपलब्ध HPC SDK, OpenACC, C++ standard parallelization (stdpar), और OpenMP (beta) support जोड़ता है।
NVIDIA के HPC SDK licensing की समस्याओं में से एक यह प्रावधान है:
You shall strictly prohibit the further distribution of the Run-Time Files by users of an End-User Application
चूँकि उपयोगकर्ता bundled app में आवश्यक runtime files के साथ app को फिर से distribute नहीं कर सकते, इसलिए हो सकता है कि application को distribute करना ही संभव न हो। यह समस्या ज़्यादातर लोगों द्वारा उपयोग किए जाने वाले CUDA SDK पर लागू नहीं होती।
AMD
AMD hardware पर मुख्य GPGPU programming विकल्प ROCm है। AMD के स्वामित्व वाले HIP के अलावा, आधिकारिक रूप से support किए जाने वाले विकल्प OpenMP और OpenACC हैं।
इसके कुछ स्पष्ट नुकसान हैं:
-
केवल Linux, इसलिए बाज़ार के बड़े हिस्से में यह विकल्प ही नहीं बनता।
-
ROCm toolchain से बने binaries, IR को target नहीं करते बल्कि hardware-specific होते हैं। नई generation आने पर binaries को फिर से recompile करना पड़ता है।
-
release के काफी लंबे समय बाद तक नए hardware के लिए support व्यावहारिक रूप से नहीं होता।
ये कमियाँ desktop पर इसकी उपयोगिता को लगभग शून्य बना देती हैं, और AMD GPU hardware के लिए vendor-provided API के रूप में केवल OpenCL बचता है।
Intel
oneAPI हाल ही में जारी किए गए सभी Intel GPU पर support होता है, लेकिन high performance अभी नहीं है। Intel के Level Zero के अलावा, आधिकारिक रूप से support किए जाने वाले API हैं OpenMP और SYCL.
oneAPI का Level Zero, SPIR-V को IR के रूप में उपयोग करता है, जिससे भविष्य में आने वाले hardware के लिए seamless support संभव होता है। यह Windows को भी support करता है।
Khronos
यह कई vendors द्वारा उपयोग किए जा सकने वाले industry standard प्रदान करता है।
OpenCL 3.0 के नाम से जाना जाने वाला reset अभी तक कोई बड़ा असर नहीं डाल पाया है। SYCL और Vulkan compute का संयोजन, बेहतर developer experience के साथ, एक ही binary को कई vendors पर चलाने का बेहतर रास्ता हो सकता है।
वास्तविक OpenCL support:
आज NVIDIA, extensions के साथ OpenCL 1.2 प्रदान करता है।
AMD, एक उपयोगी OpenCL 1.2 implementation के साथ एक बेहद buggy OpenCL 2.x implementation देता है (और इसे सही तरह debug करने का कोई तरीका भी नहीं है)।
Intel, Intel GPU के लिए OpenCL 3.0 implementation प्रदान करता है।
OpenCL 1.2, Apple Silicon सहित, macOS पर भी support होता है, लेकिन documentation deprecate की जा चुकी है।
Microsoft
C++ AMP अब मृतप्राय लगता है। यह vendor-independent था और Visual C++ का support प्राप्त था, लेकिन D3D11 के बाद इसे कभी update नहीं किया गया। पुराने ROCm versions भी कभी support किए जाते थे।
Apple
Metal compute केवल macOS/iOS/... के लिए है। GPGPU क्षेत्र में इसका आकर्षण काफ़ी कम है, खासकर GPU compute performance के मामले में।
1 टिप्पणियां
GPGPU में vendor और OS के हिसाब से स्थिति बहुत अलग-अलग है, इसलिए अच्छा होगा कि कभी न कभी इसका एकीकरण हो जाए.
वैसे, Windows के DirectML का ज़िक्र नहीं है. यह hardware को काफ़ी व्यापक रूप से support करता है, और हाल के समय में इसे WSL पर भी चलने लायक बनाया गया है, इसलिए इसमें दिलचस्पी पैदा होती है.