构建可扩展的GPU加速应用程序(NVIDIA HPC)
构建可扩展的GPU加速应用程序(NVIDIA HPC)
研究人员、科学家和开发人员正在通过加速NVIDIA GPU上的高性能计算(HPC)应用来推进科学发展,NVIDIA GPU具有处理当今最具挑战性的科学问题的计算能力。从计算科学到人工智能,GPU加速应用正在带来突破性的科学发现。流行的语言如C、C++、FORTRAN和Python正被用来开发、优化和部署这些应用程序。
面向HPC的GPU程序设计
NVIDIA GPU可以编程得很像CPU。从替换GPU优化的数学库开始。使用标准C++并行算法和FORTRAN语言特征添加附加加速度。最后,使用pragma优化语言性能,并最终使用pragma来优化性能。
库文件
GPU加速库是CPU库的一个简单替代品。
多GPU和多节点感知,NVIDIA GPU加速库为HPC应用程序中最常见的模式提供最佳性能。从各种常用的计算优化库中选择。
标准语言
标准C++和FORTRAN中的并行特性可以将例程映射到多核CPU或GPU的核心。
英伟达C++ 17编译器在标准模板库(STL)上增加对执行策略的支持,英伟达2008编译器的DO并发构造允许循环迭代而不依赖于相互依赖。
指令
基于指令的编程模型为GPU、CPU和其设备上的并行计算提供了一个简单的入口。
如果标准语言不具备获得良好性能所需的灵活性或特性,可以使用指令进行扩充,并保持可移植性以供其编译器和平台使用。
CUDA
CUDA是一个并行计算平台和编程模型,旨在为GPU加速应用程序提供最大的灵活性和性能。
为了最大化性能和灵活性,通过直接在CUDA C/C++或CUDA FORTRAN中编码来获得GPU硬件的最大值。

NVIDIA HPC SDK
一套针对HPC的编译器、库和工具
NVIDIA HPC软件开发工具包(SDK)包括经过验证的编译器、库和软件工具,这些工具对于最大限度地提高开发人员的工作效率以及HPC应用程序的性能和可移植性至关重要。

NVIDIA HPC SDK C、C++和FORTRAN编译器支持HPC建模和仿真应用程序的GPU加速,标准C++和FORTRAN、OpenACC指令和CUDA。GPU加速数学库最大限度地提高通用HPC算法的性能,优化的通信库支持基于标准的多GPU和可伸缩系统编程。性能分析和调试工具简化了HPC应用程序的移植和优化,而容器化工具可以方便地在本地或云中部署。通过对NVIDIA GPU和运行Linux的Arm、OpenPOWER或x86-64 cpu的支持,HPC SDK提供了构建NVIDIA GPU加速HPC应用程序所需的工具。
为什么要使用NVIDIA HPC SDK?
性能
广泛使用的HPC应用程序,包括VASP、Gaussian、ANSYS Fluent、GROMACS和NAMD,使用CUDA、OpenACC和GPU加速数学库为用户提供突破性的性能。可以使用这些相同的软件工具来加速应用程序,并实现戏剧性的加速和能源效率使用NVIDIA GPU。
便携性
为超过99%的当今500强系统构建和优化应用程序,包括基于NVIDIA gpu或x86-64、Arm或OpenPOWER cpu的系统。可以使用下拉库、C++ 17并行算法和OpenACC指令来加速GPU,并确保应用程序完全可移植到其编译器和系统。
生产力
利用单个集成套件最大限度地提高科学和工程吞吐量,并最大限度地缩短编码时间,该套件允许快速移植、并行化和优化GPU加速,包括用于多GPU和可伸缩计算的行业标准通信库,以及用于分析的分析和调试工具。
支持喜爱的编程语言
C++ 17并行算法
C++ 17并行算法使用标准模板库(STL)实现了便携式并行编程。英伟达HPCSDK C++编译器支持CPU上的完全C++ 17,并将并行算法卸载到Nvidia GPU,使得GPU编程没有指令、语法或注释。使用C++ 17并行算法的程序很容易移植到Linux、Windows和Mac OS的大多数C++实现。
Fortran 2003编译器
NVIDIA Fortran编译器支持Fortran 2003和Fortran 2008的许多功能。支持NVIDIA GPU上的OpenACC和CUDA Fortran,支持多核x86-64、Arm和OpenPOWER CPU的SIMD矢量化、OpenACC和OpenMP,具有在当今异构GPU加速HPC系统上移植和优化Fortran应用程序所需的功能。
OpenACC指令
NVIDIA FORTRAN,C++,C++编译器支持基于OpenACC指令的NVIDIA GPU和多核CPU的并行编程。已经使用OpenACC启动或启用了200多个HPC应用程序端口,包括VASP、Gaussian、ANSYS Fluent、WRF和mpa等生产应用程序。OpenACC是一个性能成熟的gpu和多核cpu的便携式指令解决方案。
主要特点
GPU数学库
cuBLAS和cuSOLVER库提供了GPU优化和多GPU实现,实现了LAPACK的所有BLAS例程和核心例程,并在可能的情况下自动使用NVIDIA GPU张量核心。cuFFT包括GPU加速的用于真实和复杂数据的1D、2D和3D FFT例程,cuSPARSE为稀疏矩阵提供基本的线性代数子程序。这些库可以从CUDA和OpenC程序中调用,是用C、C++和FORTRAN编写的。

针对张量核心优化
NVIDIA GPU张量核心使科学家和工程师能够使用混合精度或双精度来显著地加速合适的算法。NVIDIA HPCSDK数学库针对张量核心和多GPU节点进行了优化,以最小的编码工作量实现系统的全部性能潜力。使用NVIDIA Fortran编译器,可以通过将转换数组内部函数自动映射到cuTENSOR库来利用张量核心。

CPU优化
异构HPC服务器使用gpu来加速计算,并使用基于x86-64、OpenPOWER或Arm指令集架构的多核cpu。所有这些CPU都支持NVIDIA编译器和工具,并且所有编译器优化都在支持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包括一个支持GPUDirect的基于openmpi的CUDA感知MPI库 因此,可以使用远程直接内存访问(RDMA)直接发送和接收GPU缓冲区,包括在CUDA统一内存中分配的缓冲区。CUDA感知开放MPI完全兼容CUDA C/C++、CUDA FORTRAN和英伟达OpenACC编译器。

Nsight性能分析
N光 Systems提供HPC服务器上应用程序性能的全系统可视化,使能够优化消除瓶颈,跨多核CPU和GPU扩展并行应用程序。Nsight Compute允许通过图形或命令行用户界面深入研究GPU加速应用程序的交互式分析器中的GPU内核,并允许使用NVTX API直接检测源代码的区域来查明性能瓶颈。

部署到任何地方
容器通过将应用程序及其依赖项绑定到可移植虚拟环境中,简化了软件部署。NVIDIA HPC SDK包含使用HPC容器生成器开发、分析和部署软件的说明,以简化容器映像的创建。NVIDIA容器运行时支持几乎所有容器框架的无缝GPU支持,包括Docker和Singularity。

用户所说的
“需要Fortran、C和C++编译器,支持用户需要的所有编程模型,并期望Nvidia GPU和AMD EPCC CPU-MPI、OpenMP、OpenACC、CUDA和优化的数学库。NVIDIA HPC SDK会检查所有这些框。”
构建可扩展的GPU加速应用程序(NVIDIA HPC)的更多相关文章
- GPU加速计算
GPU加速计算 NVIDIA A100 Tensor Core GPU 可针对 AI.数据分析和高性能计算 (HPC),在各种规模上实现出色的加速,应对极其严峻的计算挑战.作为 NVIDIA 数据中心 ...
- Python实现GPU加速的基本操作
技术背景 之前写过一篇讲述如何使用pycuda来在Python上写CUDA程序的博客.这个方案的特点在于完全遵循了CUDA程序的写法,只是支持了一些常用函数的接口,如果你需要自己写CUDA算子,那么就 ...
- C#构建可扩展的应用程序(插件)
构建可扩展的应用程序,特别是对于WinForm应用程序是特别有好处的.我们知道,企业的需求是瞬息万变的,企业在使用软件的过程中,很可能对于现有的需求有变动甚至是提出新的需求来,可是我们的软件已经部署在 ...
- GPU加速:宽深度推理
GPU加速:宽深度推理 Accelerating Wide & Deep Recommender Inference on GPUs 推荐系统推动了许多最流行的在线平台的参与.随着为这些系统提 ...
- AI解决方案:边缘计算和GPU加速平台
AI解决方案:边缘计算和GPU加速平台 一.适用于边缘 AI 的解决方案 AI 在边缘蓬勃发展.AI 和云原生应用程序.物联网及其数十亿的传感器以及 5G 网络现已使得在边缘大规模部署 AI 成为可能 ...
- GPU—加速数据科学工作流程
GPU-加速数据科学工作流程 GPU-ACCELERATE YOUR DATA SCIENCE WORKFLOWS 传统上,数据科学工作流程是缓慢而繁琐的,依赖于cpu来加载.过滤和操作数据,训练和部 ...
- 深度学习“引擎”之争:GPU加速还是专属神经网络芯片?
深度学习“引擎”之争:GPU加速还是专属神经网络芯片? 深度学习(Deep Learning)在这两年风靡全球,大数据和高性能计算平台的推动作用功不可没,可谓深度学习的“燃料”和“引擎”,GPU则是引 ...
- Python笔记_第四篇_高阶编程_进程、线程、协程_5.GPU加速
Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码.Pyt ...
- 0704-使用GPU加速_cuda
0704-使用GPU加速_cuda 目录 一.CPU 和 GPU 数据相互转换 二.使用 GPU 的注意事项 三.设置默认 GPU 四.GPU 之间的切换 pytorch完整教程目录:https:// ...
随机推荐
- The 2014 ACM-ICPC Asia Mudanjiang Regional First Round C
题意: 这个是The 2014 ACM-ICPC Asia Mudanjiang Regional First Round 的C题,这个题目当时自己想的很复杂,想的是优先队列广搜,然后再在 ...
- FCKeditor编辑器漏洞
目录 FCKeditor asp网页 aspx网页 php网页 jsp网页 FCKeditor FCKeditor是一个功能强大支持所见即所得功能的文本编辑器,可以为用户提供微软office软件一样的 ...
- Windows核心编程 第四章 进程(中)
4.2 CreateProcess函数 可以用C r e a t e P r o c e s s函数创建一个进程: BOOL CreateProcessW( _In_opt_ LPCWSTR lpAp ...
- unresolved external symbol _WinMain@16
vc下,新建一个win32项目,就写了个main函数,打印hello ,出现了如标题所述的错误 原因: 你建立了一个WINDOWS应用程序,可是你却在入口函数的时候使用main而不是WinMain 解 ...
- Day002 编译型和解释型语言
编译型和解释型语言 原文链接 编译型(Compile) 用编译型语言写的程序执行之前,需要一个专门的编译过程,针对特定的平台,使用专门的编译器,把高级语言翻译成机器语言,以后直接运行而不需要再编译了, ...
- 有趣的css—简单的下雨效果
简单的下雨效果 前言 最近在b站上看到一个下雨效果的视频,感觉思路很清奇,我也按照自己的思路做了一个简单的下雨效果. 由于我制作GIF图片的工具最多只支持制作33FPS的GIF图,所以看起来可能有一点 ...
- PTA 第三章 栈与队列
一.判断题 1.若一个栈的输入序列为1,2,3,--,N,输出序列的第一个元素为i,则第j个输出的元素是j-i-1 (×)解析:应该是不确定的,不能保证数字出栈后不会再入栈 2.所谓" ...
- 【开源技术分享】无需流媒体服务,让浏览器直接播放rtsp/rtmp的神器:EasyMedia
不同于市面上其他需要各种转发到流媒体服务的中间件来说,EasyMedia不需要依赖任何nginx-rtmp,srs,zlmediakit等等第三方流媒体服务,只需要你有rtsp或者rtmp等等协议的视 ...
- 一文学完makefile语法
一.开始 1.Hello World 新建一个makefile文件,写入如下内容, hello: echo "Hello World" clean: echo "clea ...
- 关于在pycharm上使用git(保姆级别教程)
文件 → 设置 先在pycharm上面登录github账号,版本控制 → GitHub → '+' → 通过GitHub登录 会自动跳转至浏览器,然后点击"Authorize in GitH ...