diff --git a/compat.yml b/compat.yml index a05f589..c775528 100644 --- a/compat.yml +++ b/compat.yml @@ -158,7 +158,7 @@ vendors: nvidiakokkosfortran: somesupport ALPAKA: C: - intelalpakac: somesupport + intelalpakac: nonvendorok F: nvidiaalpakafortran: nope etc: @@ -181,7 +181,7 @@ descriptions: nvidiastandardfortran: 'Standard Language parallel features supported on NVIDIA GPUs through NVIDIA HPC SDK' nvidiakokkosc: 'Kokkos supports NVIDIA GPUs by calling CUDA as part of the compilation process' nvidiakokkosfortran: 'Kokkos is a C++ model, but an official compatibility layer (Fortran Language Compatibility Layer, FLCL) is available.' - nvidiaalpakac: 'Alpaka supports NVIDIA GPUs by calling CUDA as part of the compilation process' + nvidiaalpakac: 'Alpaka supports NVIDIA GPUs by calling CUDA as part of the compilation process; also, an OpenMP backend can be used' nvidiaalpakafortran: 'Alpaka is a C++ model' nvidiapython: 'There is a vast community of offloading Python code to NVIDIA GPUs, like CuPy, Numba, cuNumeric, and many others; NVIDIA actively supports a lot of them, but has no direct product like CUDA for Python; so, the status is somewhere in between' amdcudac: 'hipify by AMD can translate CUDA calls to HIP calls which runs natively on AMD GPUs' @@ -194,7 +194,7 @@ descriptions: amdopenmp: 'AMD offers a dedicated, Clang-based compiler for using OpenMP on AMD GPUs: AOMP; it supports both C/C++ (Clang) and Fortran (Flang, example)' amdstandard: 'Currently, no (known) way to launch Standard-based parallel algorithms on AMD GPUs' amdkokkosc: 'Kokkos supports AMD GPUs through HIP' - amdalpakac: 'Alpaka supports AMD GPUs through HIP' + amdalpakac: 'Alpaka supports AMD GPUs through HIP or through an OpenMP backend' amdpython: 'AMD does not officially support GPU programming with Python (also not semi-officially like NVIDIA), but third-party support is available, for example through Numba (currently inactive) or a HIP version of CuPy' intelcudac: "SYCLomatic translates CUDA code to SYCL code, allowing it to run on Intel GPUs; also, Intel's DPC++ Compatibility Tool can transform CUDA to SYCL" intelcudafortran: "No direct support, only via ISO C bindings, but at least an example can be found on GitHub; it's pretty scarce and not by Intel itself, though" @@ -206,5 +206,5 @@ descriptions: prettyok: "Intel supports pSTL algorithms through their DPC++ Library (oneDPL; GitHub). It's heavily namespaced and not yet on the same level as NVIDIA" intelstandardfortran: "With Intel oneAPI 2022.3, Intel supports DO CONCURRENT with GPU offloading" intelkokkosc: "Kokkos supports Intel GPUs through SYCL" - intelalpakac: "Alpaka v0.9.0 introduces experimental SYCL support" + intelalpakac: "Alpaka v0.9.0 introduces experimental SYCL support; also, Alpaka can use OpenMP backends" intelpython: "Not a lot of support available at the moment, but notably DPNP, a SYCL-based drop-in replacement for Numpy, and numba-dpex, an extension of Numba for DPC++." \ No newline at end of file diff --git a/gpu-vendor-model-matrix.html b/gpu-vendor-model-matrix.html index d481b96..07f137e 100644 --- a/gpu-vendor-model-matrix.html +++ b/gpu-vendor-model-matrix.html @@ -72,7 +72,7 @@ 3 - 4 + 4 5 @@ -112,7 +112,7 @@ 20 - 4 + 4 21 @@ -150,33 +150,33 @@ 31 - 4 + 32 - 32 + 33 6 - 33 + 34 - 33 + 34 - 34 + 35 - 34 + 35 - 35 + 36 - 36 + 37 - 37 + 38 14 - 38 + 39 16 - 39 + 40 @@ -184,7 +184,7 @@
  • 1: CUDA C/C++ is supported on NVIDIA GPUs through the CUDA Toolkit
  • 2: CUDA Fortran, a proprietary Fortran extension, is supported on NVIDIA GPUs via the NVIDIA HPC SDK
  • 3: HIP programs can directly use NVIDIA GPUs via a CUDA backend; HIP is maintained by AMD
  • -
  • 4: No such thing like HIP for Fortran
  • +
  • 4: No such thing like HIP for Fortran, but AMD offers Fortran interfaces to HIP and ROCm libraries in hipfort
  • 5: SYCL can be used on NVIDIA GPUs with experimental support either in SYCL directly or in DPC++, or via hipSYCL
  • 6: No such thing like SYCL for Fortran
  • 7: OpenACC C/C++ supported on NVIDIA GPUs directly (and best) through NVIDIA HPC SDK; additional, somewhat limited support by GCC C compiler and in LLVM through Clacc
  • @@ -212,14 +212,15 @@
  • 29: SYCLomatic translates CUDA code to SYCL code, allowing it to run on Intel GPUs; also, Intel's DPC++ Compatibility Tool can transform CUDA to SYCL
  • 30: No direct support, only via ISO C bindings, but at least an example can be found on GitHub; it's pretty scarce and not by Intel itself, though
  • 31: CHIP-SPV supports mapping CUDA and HIP to OpenCL and Intel's Level Zero, making it run on Intel GPUs
  • -
  • 32: SYCL is the prime programming model for Intel GPUs; actually, SYCL is only a standard, while Intel's implementation of it is called DPC++ (Data Parallel C++), which extends the SYCL standard in various places; actually actually, Intel namespaces everything oneAPI these days, so the full proper name is Intel oneAPI DPC++ (which incorporates a C++ compiler and also a library)
  • -
  • 33: OpenACC can be used on Intel GPUs by translating the code to OpenMP with Intel's Source-to-Source translator
  • -
  • 34: Intel has extensive support for OpenMP through their latest compilers
  • -
  • 35: Intel supports pSTL algorithms through their DPC++ Library (oneDPL; GitHub). It's heavily namespaced and not yet on the same level as NVIDIA
  • -
  • 36: With Intel oneAPI 2022.3, Intel supports DO CONCURRENT with GPU offloading
  • -
  • 37: Kokkos supports Intel GPUs through SYCL
  • -
  • 38: Alpaka v0.9.0 introduces experimental SYCL support
  • -
  • 39: Not a lot of support available at the moment, but notably DPNP, a SYCL-based drop-in replacement for Numpy, and numba-dpex, an extension of Numba for DPC++.
  • +
  • 32: No such thing like HIP for Fortran
  • +
  • 33: SYCL is the prime programming model for Intel GPUs; actually, SYCL is only a standard, while Intel's implementation of it is called DPC++ (Data Parallel C++), which extends the SYCL standard in various places; actually actually, Intel namespaces everything oneAPI these days, so the full proper name is Intel oneAPI DPC++ (which incorporates a C++ compiler and also a library)
  • +
  • 34: OpenACC can be used on Intel GPUs by translating the code to OpenMP with Intel's Source-to-Source translator
  • +
  • 35: Intel has extensive support for OpenMP through their latest compilers
  • +
  • 36: Intel supports pSTL algorithms through their DPC++ Library (oneDPL; GitHub). It's heavily namespaced and not yet on the same level as NVIDIA
  • +
  • 37: With Intel oneAPI 2022.3, Intel supports DO CONCURRENT with GPU offloading
  • +
  • 38: Kokkos supports Intel GPUs through SYCL
  • +
  • 39: Alpaka v0.9.0 introduces experimental SYCL support
  • +
  • 40: Not a lot of support available at the moment, but notably DPNP, a SYCL-based drop-in replacement for Numpy, and numba-dpex, an extension of Numba for DPC++.
  • diff --git a/gpu-vendor-model-matrix.pdf b/gpu-vendor-model-matrix.pdf index 744a543..7daafe2 100644 Binary files a/gpu-vendor-model-matrix.pdf and b/gpu-vendor-model-matrix.pdf differ diff --git a/gpu-vendor-model-matrix.svg b/gpu-vendor-model-matrix.svg index bb27047..1154f57 100644 --- a/gpu-vendor-model-matrix.svg +++ b/gpu-vendor-model-matrix.svg @@ -1 +1 @@ -FullvendorsupportVendorsupport,butnot(yet)entirelycomprehensiveIndirect,butcomprehensivesupport,byvendorComprehensivesupport,butnotbyvendorLimited,probablyindirectsupport–butatleastsomeNodirectsupportavailable,butofcourseonecouldISO-C-bindyourwaythroughitordirectlylinkthelibrariesC++C++(sometimesalsoC)FortranFortranCUDAHIPSYCLOpenACCOpenMPStandardKokkosALPAKAC++FortranC++FortranC++FortranC++FortranC++FortranC++FortranC++FortranC++FortranPythonNVIDIA1234567891011121314151617AMD18192042162223242425252614271628Intel293031432633333434353637143816391:CUDAC/C++issupportedonNVIDIAGPUsthroughtheCUDAToolkit2:CUDAFortran,aproprietaryFortranextension,issupportedonNVIDIAGPUsviatheNVIDIAHPCSDK3:HIPprogramscandirectlyuseNVIDIAGPUsviaaCUDAbackend;HIPismaintainedbyAMD4:NosuchthinglikeHIPforFortran5:SYCLcanbeusedonNVIDIAGPUswithexperimentalsupporteitherinSYCLdirectlyorinDPC++,orviahipSYCL6:NosuchthinglikeSYCLforFortran7:OpenACCC/C++supportedonNVIDIAGPUsdirectly(andbest)throughNVIDIAHPCSDK;additional,somewhatlimitedsupportbyGCCCcompilerandinLLVMthroughClacc8:OpenACCFortransupportedonNVIDIAGPUsdirectly(andbest)throughNVIDIAHPCSDK;additional,somewhatlimitedsupportbyGCCFortrancompilerandFlacc9:OpenMPinC++supportedonNVIDIAGPUsthroughNVIDIAHPCSDK(albeitwithafewlimits),byGCC,andClang;seeOpenMPECPBoFonstatusin2022.10:OpenMPinFortransupportedonNVIDIAGPUsthroughNVIDIAHPCSDK(butnotfullOpenMPfeaturesetavailable),byGCC,andFlang11:pSTLfeaturessupportedonNVIDIAGPUsthroughNVIDIAHPCSDK12:StandardLanguageparallelfeaturessupportedonNVIDIAGPUsthroughNVIDIAHPCSDK13:KokkossupportsNVIDIAGPUsbycallingCUDAaspartofthecompilationprocess14:KokkosisaC++model,butanoficialcompatibilitylayer(FortranLanguageCompatibilityLayer,FLCL)isavailable.15:AlpakasupportsNVIDIAGPUsbycallingCUDAaspartofthecompilationprocess16:AlpakaisaC++model17:ThereisavastcommunityofofloadingPythoncodetoNVIDIAGPUs,likeCuPy,Numba,cuNumeric,andmanyothers;NVIDIAactivelysupportsalotofthem,buthasnodirectproductlikeCUDAforPython;so,thestatusissomewhereinbetween18:hipifybyAMDcantranslateCUDAcallstoHIPcallswhichrunsnativelyonAMDGPUs19:AMDofersaSource-to-SourcetranslatortoconvertsomeCUDAFortranfunctionalitytoOpenMPforAMDGPUs(gpufort);inaddition,thereareROCmlibrarybindingsforFortraninhipfortOpenACC/CUDAFortranSource-to-Sourcetranslator20:HIPisthepreferrednativeprogrammingmodelforAMDGPUs21:SYCLcanuseAMDGPUs,forexamplewithhipSYCLorDPC++forHIPAMD22:OpenACCC/C++canbeusedonAMDGPUsviaGCCorClacc;also,Intel'sOpenACCtoOpenMPSource-to-SourcetranslatorcanbeusedtogenerateOpenMPdirectivesfromOpenACCdirectives23:OpenACCFortrancanbeusedonAMDGPUsviaGCC;also,AMD'sgpufortSource-to-SourcetranslatorcanmoveOpenACCFortrancodetoOpenMPFortrancode,andalsoIntel'stranslatorcanwork24:AMDofersadedicated,Clang-basedcompilerforusingOpenMPonAMDGPUs:AOMP;itsupportsbothC/C++(Clang)andFortran(Flang,example)25:Currently,no(known)waytolaunchStandard-basedparallelalgorithmsonAMDGPUs26:KokkossupportsAMDGPUsthroughHIP27:AlpakasupportsAMDGPUsthroughHIP28:AMDdoesnotoficiallysupportGPUprogrammingwithPython(alsonotsemi-oficiallylikeNVIDIA),butthird-partysupportisavailable,forexamplethroughNumba(currentlyinactive)oraHIPversionofCuPy29:SYCLomatictranslatesCUDAcodetoSYCLcode,allowingittorunonIntelGPUs;also,Intel'sDPC++CompatibilityToolcantransformCUDAtoSYCL30:Nodirectsupport,onlyviaISOCbindings,butatleastanexamplecanbefoundonGitHub;it'sprettyscarceandnotbyIntelitself,though31:CHIP-SPVsupportsmappingCUDAandHIPtoOpenCLandIntel'sLevelZero,makingitrunonIntelGPUs32:SYCListheprimeprogrammingmodelforIntelGPUs;actually,SYCLisonlyastandard,whileIntel'simplementationofitiscalledDPC++(DataParallelC++),whichextendstheSYCLstandardinvariousplaces;actuallyactually,IntelnamespaceseverythingoneAPIthesedays,sothefullpropernameisInteloneAPIDPC++(whichincorporatesaC++compilerandalsoalibrary)33:OpenACCcanbeusedonIntelGPUsbytranslatingthecodetoOpenMPwithIntel'sSource-to-Sourcetranslator34:IntelhasextensivesupportforOpenMPthroughtheirlatestcompilers35:IntelsupportspSTLalgorithmsthroughtheirDPC++Library(oneDPL;GitHub).It'sheavilynamespacedandnotyetonthesamelevelasNVIDIA36:WithInteloneAPI2022.3,IntelsupportsDOCONCURRENTwithGPUofloading37:KokkossupportsIntelGPUsthroughSYCL38:Alpakav0.9.0introducesexperimentalSYCLsupport39:Notalotofsupportavailableatthemoment,butnotablyDPNP,aSYCL-baseddrop-inreplacementforNumpy,andnumba-dpex,anextensionofNumbaforDPC++.1 \ No newline at end of file +FullvendorsupportVendorsupport,butnot(yet)entirelycomprehensiveIndirect,butcomprehensivesupport,byvendorComprehensivesupport,butnotbyvendorLimited,probablyindirectsupport–butatleastsomeNodirectsupportavailable,butofcourseonecouldISO-C-bindyourwaythroughitordirectlylinkthelibrariesC++C++(sometimesalsoC)FortranFortranCUDAHIPSYCLOpenACCOpenMPStandardKokkosALPAKAC++FortranC++FortranC++FortranC++FortranC++FortranC++FortranC++FortranC++FortranPythonNVIDIA1234567891011121314151617AMD18192042162223242425252614271628Intel2930313233634343535363738143916401:CUDAC/C++issupportedonNVIDIAGPUsthroughtheCUDAToolkit2:CUDAFortran,aproprietaryFortranextension,issupportedonNVIDIAGPUsviatheNVIDIAHPCSDK3:HIPprogramscandirectlyuseNVIDIAGPUsviaaCUDAbackend;HIPismaintainedbyAMD4:NosuchthinglikeHIPforFortran,butAMDofersFortraninterfacestoHIPandROCmlibrariesinhipfort5:SYCLcanbeusedonNVIDIAGPUswithexperimentalsupporteitherinSYCLdirectlyorinDPC++,orviahipSYCL6:NosuchthinglikeSYCLforFortran7:OpenACCC/C++supportedonNVIDIAGPUsdirectly(andbest)throughNVIDIAHPCSDK;additional,somewhatlimitedsupportbyGCCCcompilerandinLLVMthroughClacc8:OpenACCFortransupportedonNVIDIAGPUsdirectly(andbest)throughNVIDIAHPCSDK;additional,somewhatlimitedsupportbyGCCFortrancompilerandFlacc9:OpenMPinC++supportedonNVIDIAGPUsthroughNVIDIAHPCSDK(albeitwithafewlimits),byGCC,andClang;seeOpenMPECPBoFonstatusin2022.10:OpenMPinFortransupportedonNVIDIAGPUsthroughNVIDIAHPCSDK(butnotfullOpenMPfeaturesetavailable),byGCC,andFlang11:pSTLfeaturessupportedonNVIDIAGPUsthroughNVIDIAHPCSDK12:StandardLanguageparallelfeaturessupportedonNVIDIAGPUsthroughNVIDIAHPCSDK13:KokkossupportsNVIDIAGPUsbycallingCUDAaspartofthecompilationprocess14:KokkosisaC++model,butanoficialcompatibilitylayer(FortranLanguageCompatibilityLayer,FLCL)isavailable.15:AlpakasupportsNVIDIAGPUsbycallingCUDAaspartofthecompilationprocess16:AlpakaisaC++model17:ThereisavastcommunityofofloadingPythoncodetoNVIDIAGPUs,likeCuPy,Numba,cuNumeric,andmanyothers;NVIDIAactivelysupportsalotofthem,buthasnodirectproductlikeCUDAforPython;so,thestatusissomewhereinbetween18:hipifybyAMDcantranslateCUDAcallstoHIPcallswhichrunsnativelyonAMDGPUs19:AMDofersaSource-to-SourcetranslatortoconvertsomeCUDAFortranfunctionalitytoOpenMPforAMDGPUs(gpufort);inaddition,thereareROCmlibrarybindingsforFortraninhipfortOpenACC/CUDAFortranSource-to-Sourcetranslator20:HIPisthepreferrednativeprogrammingmodelforAMDGPUs21:SYCLcanuseAMDGPUs,forexamplewithhipSYCLorDPC++forHIPAMD22:OpenACCC/C++canbeusedonAMDGPUsviaGCCorClacc;also,Intel'sOpenACCtoOpenMPSource-to-SourcetranslatorcanbeusedtogenerateOpenMPdirectivesfromOpenACCdirectives23:OpenACCFortrancanbeusedonAMDGPUsviaGCC;also,AMD'sgpufortSource-to-SourcetranslatorcanmoveOpenACCFortrancodetoOpenMPFortrancode,andalsoIntel'stranslatorcanwork24:AMDofersadedicated,Clang-basedcompilerforusingOpenMPonAMDGPUs:AOMP;itsupportsbothC/C++(Clang)andFortran(Flang,example)25:Currently,no(known)waytolaunchStandard-basedparallelalgorithmsonAMDGPUs26:KokkossupportsAMDGPUsthroughHIP27:AlpakasupportsAMDGPUsthroughHIP28:AMDdoesnotoficiallysupportGPUprogrammingwithPython(alsonotsemi-oficiallylikeNVIDIA),butthird-partysupportisavailable,forexamplethroughNumba(currentlyinactive)oraHIPversionofCuPy29:SYCLomatictranslatesCUDAcodetoSYCLcode,allowingittorunonIntelGPUs;also,Intel'sDPC++CompatibilityToolcantransformCUDAtoSYCL30:Nodirectsupport,onlyviaISOCbindings,butatleastanexamplecanbefoundonGitHub;it'sprettyscarceandnotbyIntelitself,though31:CHIP-SPVsupportsmappingCUDAandHIPtoOpenCLandIntel'sLevelZero,makingitrunonIntelGPUs32:NosuchthinglikeHIPforFortran33:SYCListheprimeprogrammingmodelforIntelGPUs;actually,SYCLisonlyastandard,whileIntel'simplementationofitiscalledDPC++(DataParallelC++),whichextendstheSYCLstandardinvariousplaces;actuallyactually,IntelnamespaceseverythingoneAPIthesedays,sothefullpropernameisInteloneAPIDPC++(whichincorporatesaC++compilerandalsoalibrary)34:OpenACCcanbeusedonIntelGPUsbytranslatingthecodetoOpenMPwithIntel'sSource-to-Sourcetranslator35:IntelhasextensivesupportforOpenMPthroughtheirlatestcompilers36:IntelsupportspSTLalgorithmsthroughtheirDPC++Library(oneDPL;GitHub).It'sheavilynamespacedandnotyetonthesamelevelasNVIDIA37:WithInteloneAPI2022.3,IntelsupportsDOCONCURRENTwithGPUofloading38:KokkossupportsIntelGPUsthroughSYCL39:Alpakav0.9.0introducesexperimentalSYCLsupport40:Notalotofsupportavailableatthemoment,butnotablyDPNP,aSYCL-baseddrop-inreplacementforNumpy,andnumba-dpex,anextensionofNumbaforDPC++.1 \ No newline at end of file diff --git a/gpu-vendor-model-matrix.table.html b/gpu-vendor-model-matrix.table.html index c7677ca..e6ac828 100644 --- a/gpu-vendor-model-matrix.table.html +++ b/gpu-vendor-model-matrix.table.html @@ -63,7 +63,7 @@ 3 - 4 + 4 5 @@ -103,7 +103,7 @@ 20 - 4 + 4 21 @@ -141,33 +141,33 @@ 31 - 4 + 32 - 32 + 33 6 - 33 + 34 - 33 + 34 - 34 + 35 - 34 + 35 - 35 + 36 - 36 + 37 - 37 + 38 14 - 38 + 39 16 - 39 + 40 @@ -175,7 +175,7 @@
  • 1: CUDA C/C++ is supported on NVIDIA GPUs through the CUDA Toolkit
  • 2: CUDA Fortran, a proprietary Fortran extension, is supported on NVIDIA GPUs via the NVIDIA HPC SDK
  • 3: HIP programs can directly use NVIDIA GPUs via a CUDA backend; HIP is maintained by AMD
  • -
  • 4: No such thing like HIP for Fortran
  • +
  • 4: No such thing like HIP for Fortran, but AMD offers Fortran interfaces to HIP and ROCm libraries in hipfort
  • 5: SYCL can be used on NVIDIA GPUs with experimental support either in SYCL directly or in DPC++, or via hipSYCL
  • 6: No such thing like SYCL for Fortran
  • 7: OpenACC C/C++ supported on NVIDIA GPUs directly (and best) through NVIDIA HPC SDK; additional, somewhat limited support by GCC C compiler and in LLVM through Clacc
  • @@ -203,13 +203,14 @@
  • 29: SYCLomatic translates CUDA code to SYCL code, allowing it to run on Intel GPUs; also, Intel's DPC++ Compatibility Tool can transform CUDA to SYCL
  • 30: No direct support, only via ISO C bindings, but at least an example can be found on GitHub; it's pretty scarce and not by Intel itself, though
  • 31: CHIP-SPV supports mapping CUDA and HIP to OpenCL and Intel's Level Zero, making it run on Intel GPUs
  • -
  • 32: SYCL is the prime programming model for Intel GPUs; actually, SYCL is only a standard, while Intel's implementation of it is called DPC++ (Data Parallel C++), which extends the SYCL standard in various places; actually actually, Intel namespaces everything oneAPI these days, so the full proper name is Intel oneAPI DPC++ (which incorporates a C++ compiler and also a library)
  • -
  • 33: OpenACC can be used on Intel GPUs by translating the code to OpenMP with Intel's Source-to-Source translator
  • -
  • 34: Intel has extensive support for OpenMP through their latest compilers
  • -
  • 35: Intel supports pSTL algorithms through their DPC++ Library (oneDPL; GitHub). It's heavily namespaced and not yet on the same level as NVIDIA
  • -
  • 36: With Intel oneAPI 2022.3, Intel supports DO CONCURRENT with GPU offloading
  • -
  • 37: Kokkos supports Intel GPUs through SYCL
  • -
  • 38: Alpaka v0.9.0 introduces experimental SYCL support
  • -
  • 39: Not a lot of support available at the moment, but notably DPNP, a SYCL-based drop-in replacement for Numpy, and numba-dpex, an extension of Numba for DPC++.
  • +
  • 32: No such thing like HIP for Fortran
  • +
  • 33: SYCL is the prime programming model for Intel GPUs; actually, SYCL is only a standard, while Intel's implementation of it is called DPC++ (Data Parallel C++), which extends the SYCL standard in various places; actually actually, Intel namespaces everything oneAPI these days, so the full proper name is Intel oneAPI DPC++ (which incorporates a C++ compiler and also a library)
  • +
  • 34: OpenACC can be used on Intel GPUs by translating the code to OpenMP with Intel's Source-to-Source translator
  • +
  • 35: Intel has extensive support for OpenMP through their latest compilers
  • +
  • 36: Intel supports pSTL algorithms through their DPC++ Library (oneDPL; GitHub). It's heavily namespaced and not yet on the same level as NVIDIA
  • +
  • 37: With Intel oneAPI 2022.3, Intel supports DO CONCURRENT with GPU offloading
  • +
  • 38: Kokkos supports Intel GPUs through SYCL
  • +
  • 39: Alpaka v0.9.0 introduces experimental SYCL support
  • +
  • 40: Not a lot of support available at the moment, but notably DPNP, a SYCL-based drop-in replacement for Numpy, and numba-dpex, an extension of Numba for DPC++.
  • \ No newline at end of file diff --git a/gpu-vendor-model-matrix.table.tex b/gpu-vendor-model-matrix.table.tex index ab4bf6e..7031891 100644 --- a/gpu-vendor-model-matrix.table.tex +++ b/gpu-vendor-model-matrix.table.tex @@ -38,11 +38,11 @@ \Python \\ NVIDIA & - \fullok\refwithstate{cudac} & \fullok\refwithstate{cudafortran} & \indirectok\refwithstate{nvidiahip} & \nope\refwithstate{hipfortran} & \nonvendorok\refwithstate{nvidiasycl} & \nope\refwithstate{syclfortran} & \fullok\refwithstate{openaccc} & \fullok\refwithstate{openaccfortran} & \prettyok\fullok\refwithstate{nvidiaopenmpc} & \prettyok\fullok\refwithstate{nvidiaopenmpfortran} & \fullok\refwithstate{nvidiastandardc} & \fullok\refwithstate{nvidiastandardfortran} & \nonvendorok\refwithstate{nvidiakokkosc} & \somesupport\refwithstate{nvidiakokkosfortran} & \nonvendorok\refwithstate{nvidiaalpakac} & \nope\refwithstate{nvidiaalpakafortran} & \prettyok\nonvendorok\refwithstate{nvidiapython} \\ + \fullok\refwithstate{cudac} & \fullok\refwithstate{cudafortran} & \indirectok\refwithstate{nvidiahip} & \nope\refwithstate{nvidiahipfortran} & \nonvendorok\refwithstate{nvidiasycl} & \nope\refwithstate{syclfortran} & \fullok\refwithstate{openaccc} & \fullok\refwithstate{openaccfortran} & \prettyok\fullok\refwithstate{nvidiaopenmpc} & \prettyok\fullok\refwithstate{nvidiaopenmpfortran} & \fullok\refwithstate{nvidiastandardc} & \fullok\refwithstate{nvidiastandardfortran} & \nonvendorok\refwithstate{nvidiakokkosc} & \somesupport\refwithstate{nvidiakokkosfortran} & \nonvendorok\refwithstate{nvidiaalpakac} & \nope\refwithstate{nvidiaalpakafortran} & \prettyok\nonvendorok\refwithstate{nvidiapython} \\ AMD & - \indirectok\refwithstate{amdcudac} & \somesupport\refwithstate{amdcudafortran} & \fullok\refwithstate{amdhipc} & \nope\refwithstate{hipfortran} & \indirectok\refwithstate{amdsyclc} & \nope\refwithstate{syclfortran} & \nonvendorok\refwithstate{amdopenaccc} & \nonvendorok\somesupport\refwithstate{amdopenaccfortran} & \fullok\refwithstate{amdopenmp} & \fullok\refwithstate{amdopenmp} & \nope\refwithstate{amdstandard} & \nope\refwithstate{amdstandard} & \nonvendorok\refwithstate{amdkokkosc} & \somesupport\refwithstate{nvidiakokkosfortran} & \nonvendorok\refwithstate{amdalpakac} & \nope\refwithstate{nvidiaalpakafortran} & \somesupport\refwithstate{amdpython} \\ + \indirectok\refwithstate{amdcudac} & \somesupport\refwithstate{amdcudafortran} & \fullok\refwithstate{amdhipc} & \nope\refwithstate{nvidiahipfortran} & \indirectok\refwithstate{amdsyclc} & \nope\refwithstate{syclfortran} & \nonvendorok\refwithstate{amdopenaccc} & \nonvendorok\somesupport\refwithstate{amdopenaccfortran} & \fullok\refwithstate{amdopenmp} & \fullok\refwithstate{amdopenmp} & \nope\refwithstate{amdstandard} & \nope\refwithstate{amdstandard} & \nonvendorok\refwithstate{amdkokkosc} & \somesupport\refwithstate{nvidiakokkosfortran} & \nonvendorok\refwithstate{amdalpakac} & \nope\refwithstate{nvidiaalpakafortran} & \somesupport\refwithstate{amdpython} \\ Intel & - \indirectok\refwithstate{intelcudac} & \nope\refwithstate{intelcudafortran} & \somesupport\refwithstate{intelhipc} & \nope\refwithstate{hipfortran} & \fullok\refwithstate{intelsyclc} & \nope\refwithstate{syclfortran} & \somesupport\refwithstate{intelopenacc} & \somesupport\refwithstate{intelopenacc} & \fullok\refwithstate{intelopenmp} & \fullok\refwithstate{intelopenmp} & \nope\refwithstate{prettyok} & \prettyok\refwithstate{intelstandardfortran} & \nonvendorok\refwithstate{intelkokkosc} & \somesupport\refwithstate{nvidiakokkosfortran} & \somesupport\refwithstate{intelalpakac} & \nope\refwithstate{nvidiaalpakafortran} & \somesupport\refwithstate{intelpython} \\ + \indirectok\refwithstate{intelcudac} & \nope\refwithstate{intelcudafortran} & \somesupport\refwithstate{intelhipc} & \nope\refwithstate{intelhipfortran} & \fullok\refwithstate{intelsyclc} & \nope\refwithstate{syclfortran} & \somesupport\refwithstate{intelopenacc} & \somesupport\refwithstate{intelopenacc} & \fullok\refwithstate{intelopenmp} & \fullok\refwithstate{intelopenmp} & \nope\refwithstate{prettyok} & \prettyok\refwithstate{intelstandardfortran} & \nonvendorok\refwithstate{intelkokkosc} & \somesupport\refwithstate{nvidiakokkosfortran} & \nonvendorok\refwithstate{intelalpakac} & \nope\refwithstate{nvidiaalpakafortran} & \somesupport\refwithstate{intelpython} \\ \end{tabular} \end{frame} @@ -53,7 +53,7 @@ \item \ref{cudac}: CUDA C/C++ is supported on NVIDIA GPUs through the \href{https://developer.nvidia.com/cuda-toolkit}{CUDA Toolkit} \item \ref{cudafortran}: CUDA Fortran, a proprietary Fortran extension, is supported on NVIDIA GPUs via the \href{https://developer.nvidia.com/hpc-sdk}{NVIDIA HPC SDK} \item \ref{nvidiahip}: \href{https://github.com/ROCm-Developer-Tools/HIP}{HIP} programs can directly use NVIDIA GPUs via a CUDA backend; HIP is maintained by AMD - \item \ref{hipfortran}: No such thing like HIP for Fortran + \item \ref{nvidiahipfortran}: No such thing like HIP for Fortran, but AMD offers Fortran interfaces to HIP and ROCm libraries in \href{https://github.com/ROCmSoftwarePlatform/hipfort}{hipfort} \item \ref{nvidiasycl}: SYCL can be used on NVIDIA GPUs with \emph{experimental} support either in \href{https://github.com/codeplaysoftware/sycl-for-cuda/blob/cuda/sycl/doc/GetStartedWithSYCLCompiler.md\#build-sycl-toolchain-with-support-for-nvidia-cuda}{SYCL} directly or in \href{https://github.com/intel/llvm/blob/sycl/sycl/doc/GetStartedGuide.md\#build-dpc-toolchain-with-support-for-nvidia-cuda}{DPC++}, or via \href{https://github.com/illuhad/hipSYCL}{hipSYCL} \item \ref{syclfortran}: No such thing like SYCL for Fortran \item \ref{openaccc}: OpenACC C/C++ supported on NVIDIA GPUs directly (and best) through NVIDIA HPC SDK; additional, somewhat limited support by \href{https://gcc.gnu.org/wiki/OpenACC}{GCC C compiler} and in LLVM through \href{https://csmd.ornl.gov/project/clacc}{Clacc} @@ -81,6 +81,7 @@ \item \ref{intelcudac}: \href{https://github.com/oneapi-src/SYCLomatic}{SYCLomatic} translates CUDA code to SYCL code, allowing it to run on Intel GPUs; also, Intel\textquotesingle s \href{https://www.intel.com/content/www/us/en/developer/tools/oneapi/dpc-compatibility-tool.html}{DPC++ Compatibility Tool} can transform CUDA to SYCL \item \ref{intelcudafortran}: No direct support, only via ISO C bindings, but at least an example can be \href{https://github.com/codeplaysoftware/SYCL-For-CUDA-Examples/tree/master/examples/fortran_interface}{found on GitHub}; it\textquotesingle s pretty scarce and not by Intel itself, though \item \ref{intelhipc}: \href{https://github.com/CHIP-SPV/chip-spv}{CHIP-SPV} supports mapping CUDA and HIP to OpenCL and Intel\textquotesingle s Level Zero, making it run on Intel GPUs + \item \ref{intelhipfortran}: No such thing like HIP for Fortran \item \ref{intelsyclc}: \href{https://www.khronos.org/sycl/}{SYCL} is the prime programming model for Intel GPUs; actually, SYCL is only a standard, while Intel\textquotesingle s implementation of it is called \href{https://www.intel.com/content/www/us/en/developer/tools/oneapi/data-parallel-c-plus-plus.html}{DPC++} (\emph{Data Parallel C++}), which extends the SYCL standard in various places; actually actually, Intel namespaces everything \emph{oneAPI} these days, so the \emph{full} proper name is Intel oneAPI DPC++ (which incorporates a C++ compiler and also a library) \item \ref{intelopenacc}: OpenACC can be used on Intel GPUs by translating the code to OpenMP with \href{https://github.com/intel/intel-application-migration-tool-for-openacc-to-openmp}{Intel\textquotesingle s Source-to-Source translator} \item \ref{intelopenmp}: Intel has \href{https://www.intel.com/content/www/us/en/develop/documentation/get-started-with-cpp-fortran-compiler-openmp/top.html}{extensive support for OpenMP} through their latest compilers