NVIDIA HPC SDK
ç¨äº HPC çå ¨å¥ç¼è¯å¨ãåºåå·¥å ·
NVIDIA HPC 软件å¼åå¥ä»¶ (SDK) å å«ç»è¿éªè¯çç¼è¯å¨ãåºåè½¯ä»¶å·¥å ·ï¼å¯¹äºæ´å¤§ç¨åº¦æé«å¼åè çå·¥ä½æç以å HPC åºç¨çæ§è½åå¯ç§»æ¤æ§è³å ³éè¦ã
NVIDIA HPC SDK CãC++ å Fortran ç¼è¯å¨æ¯æ使ç¨æ å C++ å FortranãOpenACC® æ令å CUDA® å®ç° HPC 建模å模æåºç¨ç GPU å éãGPU å éçæ°å¦åºå¯æ´å¤§é度å°æåå¸¸ç¨ HPC ç®æ³çæ§è½ï¼èç»è¿ä¼åçéä¿¡åºæ¯æåºäºæ åçå¤ GPU åå¯æ©å±çç³»ç»ç¼ç¨ãæ§è½åæåè°è¯å·¥å ·å¯ç®å HPC åºç¨ç移æ¤åä¼åæµç¨ï¼è容å¨åå·¥å ·æ¯æå¨æ¬å°æäºç«¯è½»æ¾é¨ç½²ãHPC SDK æ¯æ NVIDIA GPU å ArmãOpenPOWER æè¿è¡ Linux ç x86-64 CPUï¼ä¸ºæ¨æä¾æ建 NVIDIA GPU å éç HPC åºç¨æéçå·¥å ·ã
为ä½è¦ä½¿ç¨ NVIDIA HPC SDKï¼
æ§è½
é¤äºåºç¨å¹¿æ³ç HPC åºç¨ï¼å æ¬ VASPãGaussianãANSYS FluentãGROMACS å NAMDï¼ï¼è¿å¯ä»¥ä½¿ç¨ CUDAãOpenACC å GPU å éçæ°å¦åºï¼ä¸ºç¨æ·æä¾çªç ´æ§æ§è½ãæ¨å¯ä»¥ä½¿ç¨è¿äºç¸åçè½¯ä»¶å·¥å ·å¯¹åºç¨è¿è¡ GPU å éï¼è¿å¯ä»¥ä½¿ç¨ NVIDIA GPU å®ç°é度åè½æå¤§å¹ æåã
å¯ç§»æ¤æ§
为 99% 以ä¸ç 500 强系ç»ï¼å æ¬åºäº NVIDIA GPU æ x86-64ãArm æ OpenPOWER CPU çç³»ç»ï¼æ建åä¼ååºç¨ãæ¨å¯ä»¥ä½¿ç¨åµå ¥å¼åºãC++17 并è¡ç®æ³å OpenACC æ令对æ¨ç代ç è¿è¡ GPU å éï¼å¹¶ç¡®ä¿åºç¨å®å ¨å¯ç§»æ¤å°å ¶ä»ç¼è¯å¨åç³»ç»ã
å·¥ä½æç
åå©è½å¤è®©æ¨å¿«é移æ¤ã并è¡åä¼å GPU å éçåä¸éæå¥ä»¶ï¼å æ¬ç¨äºå¤ GPU åå¯æ©å±è®¡ç®çè¡ä¸æ åéä¿¡åºï¼ä»¥åç¨äºåæçåæåè°è¯å·¥å ·ï¼ï¼å¯ä»¥æ´å¤§é度å°æé«ç§å¦åå·¥ç¨ååéï¼æ´å¤§é度å°åå°ç¼ç æ¶é´ã
æ¯ææ¨å欢çç¼ç¨è¯è¨
C++17 并è¡ç®æ³
C++17 并è¡ç®æ³ä½¿ç¨æ å模æ¿åº (STL) å®ç°å¯ç§»æ¤ç并è¡ç¼ç¨ãNVIDIA HPC SDK C++ ç¼è¯å¨å¨ CPU ä¸æ¯æå®æ´ç C++17ï¼å¯å°å¹¶è¡ç®æ³åæµè³ NVIDIA GPUï¼æ¯ææ æ令ãæ注ææ 注ç GPU ç¼ç¨ãä½¿ç¨ C++17 并è¡ç®æ³çç¨åºå¾å®¹æ移æ¤å°å¸¸ç¨ C++ ç LinuxãWindows å macOSã
Fortran 2003 ç¼è¯å¨
NVIDIA Fortran ç¼è¯å¨æ¯æ Fortran 2003ï¼ä»¥å Fortran 2008 ç许å¤åè½ãå®æ¯æå¨GPUä¸çOpenACC å CUDA Fortranï¼ä¹æ¯æå¨x86-64ãArm å OpenPOWER è¿äºå¤æ ¸CPUä¸çSIMD åéåãOpenACC å OpenMPãè¿æ ·ï¼ä»å°±å ·æå ·æå¨å½ä»ç± GPU å éçå¼æ HPC ç³»ç»ä¸ç§»æ¤åä¼å Fortran åºç¨æéçåè½ã
OpenACC æ令
NVIDIA FortranãC å C++ ç¼è¯å¨æ¯æåºäº OpenACC æ令ç并è¡ç¼ç¨ï¼éç¨äº NVIDIA GPU åå¤æ ¸ CPUãè¶ è¿ 200 款 HPC åºç¨ç«¯å£å·²ä½¿ç¨ OpenACC å¯å¨æå¯ç¨ï¼å æ¬ VASPãGaussianãANSYS FluentãWRF å MPAS çé产ååºç¨ãOpenACC éç¨äº GPU åå¤æ ¸ CPUï¼æ¯ç»è¿éªè¯çæ§è½å¯ç§»æ¤æ令解å³æ¹æ¡ã
主è¦åè½
GPU æ°å¦åº
NVIDIA HPC SDK å æ¬ä¸å¥GPU å éçæ°å¦åºï¼éç¨äºè®¡ç®å¯éååºç¨ãcuBLAS å cuSOLVER åºå¯æä¾æ¥èª LAPACK çåç§ BLAS ä¾ç¨åæ ¸å¿ä¾ç¨çç» GPU ä¼åçå¤ GPU çå®æ½ï¼å¹¶å°½å¯è½èªå¨ä½¿ç¨ NVIDIA GPU Tensor CoreãcuFFT å æ¬ç¨äºçå®åå¤ææ°æ®ç GPU å éç 1Dã2D å 3D FFT ä¾ç¨ï¼cuSPARSE 为ç¨çç©éµæä¾åºç¡çº¿æ§ä»£æ°åä¾ç¨ãå¯ä»¥éè¿ä½¿ç¨ CãC++ å Fortran ç¼åç CUDA å OpenACC ç¨åºè°ç¨è¿äºåºã
对 Tensor Core è¿è¡ä¼å
éè¿ NVIDIA GPU Tensor Coreï¼ç§å¦å®¶åå·¥ç¨å¸è½å¤ä½¿ç¨æ··å精度æåç²¾åº¦å¤§å¹ å éåéçç®æ³ãè¿äº NVIDIA HPC SDK æ°å¦åºå¯¹ Tensor Core åå¤ GPU èç¹è¿è¡äºä¼åï¼æ éå¤è´¹åç¼ç ï¼å³å¯æä¾ç³»ç»çå ¨é¨æ§è½æ½åãå©ç¨ NVIDIA Fortran ç¼è¯å¨ï¼éè¿å°å¯è½¬æ¢çæ°ç»å èå½æ°èªå¨æ å°è³ cuTENSOR åºï¼æ¨å¯ä»¥ä½¿ç¨ Tensor Coreã
ææ¯å客ï¼å° Tensor Core å¼å ¥æ å Fortran
对æ¨ç CPU è¿è¡ä¼å
å¼æ HPC æå¡å¨ä½¿ç¨ GPU è¿è¡å é计ç®ï¼å¹¶åºäº x86-64ãOpenPOWER æ Arm æ令éæ¶æ使ç¨å¤æ ¸ CPUãNVIDIA HPC ç¼è¯å¨åå·¥å ·å¨è¿äº CPU ä¸åæ¯æï¼å¹¶ä¸ææç¼è¯å¨ä¼åå¯å¨æ¯æè¿äºç¼è¯å¨ç CPU ä¸å®å ¨å¯ç¨ãåå©è·¨ææåæ¯æç³»ç»çç»ä¸åè½ãå½ä»¤è¡é项ãè¯è¨å®ç°ãç¼ç¨æ¨¡åãå·¥å ·ååºç¨æ·çé¢ï¼NVIDIA HPC SDK å¯ç®åå¼åè å¨åç§ HPC ç¯å¢ä¸çä½éªã
å¤ GPU ç¼ç¨
NVIDIA éåéä¿¡åº (NCCL) ä½¿ç¨ MPI å ¼å®¹ç all-gatherãall-reduceãbroadcastãreduce å reduce-scatter ä¾ç¨å®ç°é«åº¦ä¼åçå¤ GPU åå¤èç¹éåéä¿¡åºå ï¼ä»¥å©ç¨ HPC æå¡å¨èç¹å åè·¨ HPC æå¡å¨èç¹çææå¯ç¨ GPUãNVSHMEM å¯å®ç° GPU æ¾åç OpenSHMEM æ åï¼å¹¶æä¾å¤ GPU åå¤èç¹éä¿¡åºå ï¼è¿äºåºå å¯éè¿ä¸»æº CPU æ GPU å¯å¨ï¼ä¹å¯å¨ CUDA å æ ¸ä¸è°ç¨ã
å¯æ©å±ç³»ç»ç¼ç¨
MPI æ¯ç¼ç¨åå¸å¼å åå¯æ©å±ç³»ç»çæ åãNVIDIA HPC SDK å æ¬åºäº Open MPI ç CUDA-aware MPI åºï¼æ¯æ GPUDirectâ¢ï¼è¿æ ·æ¨å¯ä»¥ç´æ¥ä½¿ç¨è¿ç¨ç´æ¥æ°æ®åå (RDMA) æ¥åéåæ¥æ¶ GPU ç¼å²åºï¼å æ¬å¨ CUDA ç»ä¸å åä¸åé çç¼å²åºãCUDA-aware Open MPI å®å ¨å ¼å®¹ CUDA C/C++ãCUDA Fortran å NVIDIA OpenACC ç¼è¯å¨ã
Nsight æ§è½åæ
Nsight⢠系ç»å¯å¨ç³»ç»èå´å å¯è§å HPC æå¡å¨ä¸çåºç¨æ§è½ï¼å¹¶ä½¿æ¨è½å¤å¨å¤æ ¸ CPU å GPU ä¸ä¼åç¶é¢å¹¶æ©å±å¹¶è¡åºç¨ãNsight Compute å 许æ¨éè¿å¾å½¢æå½ä»¤è¡ç¨æ·çé¢ï¼å¨äº¤äºå¼åæå¨ä¸æ·±å ¥æ¢è®¨ GPU å æ ¸ï¼ä»¥ç¨äº GPU å éçåºç¨ï¼å¹¶å 许æ¨ä½¿ç¨ NVTX API ç´æ¥æ£æµæºä»£ç çåºåï¼ä»èç¡®å®æ§è½ç¶é¢ã
éæ¶éå°é¨ç½²
容å¨å°åºç¨åå ¶ä¾èµé¡¹æç»å°ä¾¿æºå¼èæç¯å¢ä¸ï¼ä»èç®å软件é¨ç½²ãNVIDIA HPC SDK å å«ä½¿ç¨ HPC Container Maker å¼åãåæåé¨ç½²è½¯ä»¶ç®å容å¨éåå建æµç¨ç说æãNVIDIA Container Runtime å¯å¨å ä¹ææ容å¨æ¡æ¶ï¼å æ¬ Docker å Singularityï¼ä¸å®ç°æ ç¼ GPU æ¯æã
ææ¯å客ï¼ä½¿ç¨ NVIDIA NGC ç®å½ä¸ç NVIDIA HPC SDK æ建åé¨ç½² HPC åºç¨ã
ç¨æ·è¯ä»·
âå¨ Perlmutter ä¸ï¼æ们éè¦ FortranãC å C++ ç¼è¯å¨æ¥æ¯æç¨æ·å¨ NVIDIA GPU å AMD EPYC CPU ä¸éè¦åææçææç¼ç¨æ¨¡åï¼MPIãOpenMPãOpenACCãCUDA åä¼åçæ°å¦åºãNVIDIA HPC SDK å ·å¤ææè¿äºåè½ãâ
HPC ç¼è¯å¨æ¯ææå¡
éè¿ HPC ç¼è¯å¨æ¯ææå¡ï¼æ¨å¯ä»¥èç³» NVIDIA ææ¯ä¸å®¶ï¼å æ¬ï¼
- 为 NVFORTRANãNVC++ å NVC ç¼è¯å¨ï¼ä¸å æ¬ NVCCï¼æä¾ä»è´¹ææ¯æ¯æã
- 帮å©å®è£ åä½¿ç¨ NVFORTRANãNVC++ å NVC ç¼è¯å¨ã
- ä¸éä»è´¹ç¨æ·ç¸æ¯ï¼ä¼å 确认é误æ¥åï¼ä¼å è¿è¡é误修å¤ã
- å°½å¯è½ä¸ºå·²ç¡®è®¤çç¼è¯å¨é误æä¾ä¸´æ¶åéæ¹æ¡å¸®å©ã
- 访é®çæ¬åæ¡£ï¼å æ¬ HPC SDK åæ§ç PGI å ã
- å¦éäºè§£æ´å¤è¯¦æ ï¼è¯·åé æç»å®¢æ·æ¡æ¬¾ä¸æ¡ä»¶ã
å¼å§ä½¿ç¨
- æ¿æè´ä¹°æ¯ææå¡ï¼èç³»æ们ã
- å·²æææçæ¯æååä¸å·²æ³¨åæ¥è·åæ¯æï¼ç»å½ NVIDIA æ¯æé¨æ·ã
- è客æ·æ³ç»ç¾ååï¼èç³»æ们ã
- æçé®åï¼å¦éäºè§£è¯¦æ ï¼è¯·åéçµåé®ä»¶è³ enterpriseservices@nvidia.comã
åè½ä»ç»
èµæº
- HPC SDK ææ¡£
- å¼åè 论å
- ææ¯å客ï¼
- N ç§ SAXPY æ¹æ³ï¼å±ç¤º GPU ç¼ç¨é项ç广度
- ä½¿ç¨ stdpar å¨ GPU ä¸å éæ å C++
- ä½¿ç¨ GPU å NVIDIA HPC SDK å é Fortran DO CONCURRENT
- å° Tensor Core å¼å ¥æ å Fortran
- ä½¿ç¨ NVIDIA NGC ç®å½ä¸ç NVIDIA HPC SDK æ建åé¨ç½² HPC åºç¨
- ä½¿ç¨ nvc++ å Cython åºäº GPU å é Python
- ç¸å ³çåºå软件ï¼