CUDA刷新:GPU计算生态系统
CUDA刷新:GPU计算生态系统
CUDA Refresher: The GPU Computing Ecosystem
这是CUDA Refresher系列的第三篇文章,其目标是刷新CUDA中的关键概念、工具和优化,以供初级或中级开发人员使用。
易于编程和性能的巨大飞跃是CUDA平台被广泛采用的关键原因之一。CUDA平台成功的第二大原因是拥有广泛而丰富的生态系统。
与任何新平台一样,CUDA的成功依赖于CUDA生态系统可用的工具、库、应用程序和合作伙伴。任何新的计算平台都需要开发人员将应用程序移植到新的平台。至这样做,开发人员需要最先进的工具和开发环境。
在应用程序开始扩展之后,在数据中心级别需要更多的工具。英伟达致力于为开发者和企业提供最先进的工具和生态系统服务。
Figure 1: CUDA Ecosystem: The building blocks to make the CUDA platform the best developer choice.
英伟达最近宣布了最新的A100架构和DGX A100系统的基础上,这一新的架构。新的A100 GPU还配备了丰富的生态系统。
图1显示了在15年多的时间里进化的更广泛的生态系统组成部分。在这篇文章中,将详细介绍每个生态系统组件。
Programming languages and APIs
NVIDIA发布了CUDA工具包,提供了使用C/C++编程语言的开发环境。使用此工具包,可以在gpu上开发、优化和部署应用程序。NVIDIA还提供了一个PGI工具包来使用Fortran语言编程。
还有许多第三方工具链可用:
· PyCUDA—Use CUDA API operations from a Python interface. 使用来自Python接口的CUDA API操作。
· Altimesh Hybridizer—Generate CUDA C source code from .NET assemblies (MSIL) or Java archives (java bytecode). 从.NET程序集(MSIL)或Java存档(Java字节码)生成CUDAC源代码。
· OpenACC—Use directives to program GPUs and compiler-generated CUDA code before executing on CUDA GPUs. 使用指令对gpu进行编程,并在对CUDA gpu执行之前编译生成的CUDA代码。
· OpenCL—Use low-level API operations to program CUDA GPUs. 使用低级API操作来编程CUDA gpu。
Alea-GPU—Program CUDA GPUs with the .NET framework. 使用.NET框架的Alea GPU程序CUDA GPU。
Libraries
库对于为任何编程环境中广泛使用的公共例程提供性能下降是必不可少的。针对目标计算架构进行了很好的优化,并且具有较高的软件质量。还节省了应用程序开发时间,并提供了开始使用GPU加速的最简单方法。
NVIDIA在CUDA平台上提供了一个称为CUDA-X的层,CUDA-X是一个库、工具和技术的集合。GPU加速CUDA库支持跨多个领域的加速下降,如线性代数、图像和视频处理、深度学习和图形分析。对于开发自定义算法,可以使用与常用语言和数字包以及已发布的开发API操作的可用集成。
NVIDIA CUDA工具包附带了大量常用库。许多合作伙伴还在CUDA平台上贡献了许多库。以下是一些广泛使用的库的列表:
· Mathematical libraries: cuBLAS, cuRAND, cuFFT, cuSPARSE, cuTENSOR, cuSOLVER
· Parallel algorithm libraries: nvGRAPH, Thrust
· Image and video libraries: nvJPEG, NPP, Optical Flow SDK
· Communication libraries: NVSHMEM, NCCL
· Deep learning libraries: cuDNN, TensorRT, Jarvis, DALI
· Partner libraries: OpenCV, FFmpeg, ArrayFire, MAGMA
Profiling and debugging tools分析和调试工具
任何编程体系结构的重要元素之一是编写、调试和优化程序的健壮而高效的工具。CUDA生态系统是健壮的,NVIDIA花费了大量的精力来确保拥有快速、轻松、高效地编写所需的所有工具。
以下是CUDA分析和调试工具的预览:
NVIDIA Nsight这是一个低开销的分析、跟踪和调试工具。提供了一个基于GUI的环境,可以跨NVIDIA平台(如大型多GPU x86服务器、Quadro工作站等)进行扩展。
CUDA GDB这是linuxgdb的一个扩展,提供了一个基于控制台的调试接口,可以从命令行使用。CUDA GDB可以在本地系统或任何远程系统上使用。基于GUI的插件也可用,例如DDD、EMACS或Nsight Eclipse Edition。
CUDA-Memcheck是一个必备的工具,通过检查并发运行的数千个线程来洞察内存访问问题。
还有许多第三方解决方案,包括:
Datacenter tools and cluster management数据中心工具和群集管理
NVIDIA gpu为应用程序提供了巨大的加速,这些应用程序进一步扩展到大量的gpu。许多科学应用,如分子动力学和量子化学,以及人工智能应用,都需要一个gpu集群来将应用性能扩展到通过高速网络连接的数千个gpu。现代数据中心使用NVIDIA GPUs和Mellanox高速互连来扩展应用程序以大规模扩展性能。
需要一个复杂的生态系统才能在数据中心轻松部署。企业需要工具来轻松管理和运行这些密集的数据中心。英伟达与生态系统合作伙伴密切合作,为开发人员和DevOps提供AI和HPC软件生命周期每一步的软件工具。
以下是英伟达为加强这一生态系统所做的一些努力:
· Container registry
· Scheduling and orchestration
· Cluster management tools
· Monitoring tools
Containers
容器是轻松部署应用程序的现代方式。NVIDIA提供NVIDIA NGC的所有深度学习和HPC容器。NVIDIA对这些容器进行了测试、维护和优化。NGC还提供了托管第三方容器的方法。组织也可以选择拥有私有容器存储库。
调度和编排
调度和编排是数据中心管理和操作的另一个重要方面。Kubernetes是现代流行的容器编排系统,用于自动化应用程序部署、扩展和管理。NVIDIA GPUs上的Kubernetes使用GPU加速功能扩展了行业标准的容器编排平台。Kubernetes为NVIDIA GPU资源调度提供了最先进的支持。
群集管理工具
主要的标准集群管理工具都支持NVIDIA gpu。一些例子包括Bright Cluster, Ganglia, StackIQ, and Altair PBS Works作品。
监视工具
NVIDIA还提供了一套称为DCGM的工具,用于管理和监视集群环境中的gpu。NVIDIA还公开了一个基于API的接口,通过nvmlapi监视gpu。在这些工具的帮助下,数据中心运营团队可以持续执行主动健康监测、全面诊断、系统警报和治理策略,包括电源和时钟管理。这些工具可以单独使用,也可以与任何行业标准工具套件集成使用。还可以使用NVML API操作构建自己的工具。
CUDA ecosystem and GPU-accelerated applications
在2006年CUDA发布之后,开发人员已经在CUDA上移植了许多应用程序。
第一批开始移植应用程序的开发人员是科学界。这个社区移植了许多标准应用程序,以及自行开发的代码。具有内在并行性的应用程序,如图像和视频处理,是移植到CUDA的第一个用例之一。
深度学习是另一个大规模并行性有助于加速应用程序的例子。目前几乎每个深度学习框架都使用CUDA/GPU计算来加速深度学习训练和推理。
NVIDIA维护一个目录,列出所有GPU加速应用程序。这个列表只是GPU计算加速的应用程序的一个子集。很多申请都是内部的,不在这份名单上。
GPUs everywhere
CUDA的广泛采用要求每个需要GPU来开发CUDA代码和端口应用程序的开发人员。多年前,NVIDIA决定在NVIDIA设计的每个GPU都将支持CUDA架构:
用于游戏和笔记本电脑的GeForce GPU
专业可视化的Quadro GPU
数据中心GPU
嵌入式soc的Tegra
跨所有产品线的单一计算体系结构和CUDA的向后兼容性使该平台成为开发人员的选择。可以访问笔记本电脑和PC、工作站、服务器和嵌入式设备中的GPU,并在任何地方运行相同的CUDA代码。地球上的每一个云服务提供商都为CUDA支持的gpu供电。
Summary
NVIDIA致力于为CUDA开发者提供广泛而丰富的生态系统支持。一个庞大的工程师团队一直在努力确保能得到所有正确的工具。以下是CUDA开发人员可以利用的优势:
使用丰富的编程语言支持和开发环境工具(如调试器、探查器等)开发CUDA代码。
通过优化、测试和维护库来降低应用程序的加速。
使用经过优化和测试的容器及其在NVIDIA NGC上的可用性,易于部署。
支持在集群环境中扩展应用程序的工具。
使用CUDA加速了更广泛的应用。
CUDA刷新:GPU计算生态系统的更多相关文章
- GPU计算的后CUDA时代-OpenACC(转)
在西雅图超级计算大会(SC11)上发布了新的基于指令的加速器并行编程标准,既OpenACC.这个开发标准的目的是让更多的编程人员可以用到GPU计算,同时计算结果可以跨加速器使用,甚至能用在多核CPU上 ...
- Julia:高性能 GPU 计算的编程语言
Julia:高性能 GPU 计算的编程语言 0条评论 2017-10-31 18:02 it168网站 原创 作者: 编译|田晓旭 编辑: 田晓旭 [IT168 评论]Julia是一种用于数学计 ...
- CUDA刷新器:CUDA编程模型
CUDA刷新器:CUDA编程模型 CUDA Refresher: The CUDA Programming Model CUDA,CUDA刷新器,并行编程 这是CUDA更新系列的第四篇文章,它的目标是 ...
- GPU计算的十大质疑—GPU计算再思考
http://blog.csdn.NET/babyfacer/article/details/6902985 原文链接:http://www.hpcwire.com/hpcwire/2011-06-0 ...
- OpenGL实现通用GPU计算概述
可能比較早一点做GPU计算的开发者会对OpenGL做通用GPU计算,随着GPU计算技术的兴起,越来越多的技术出现,比方OpenCL.CUDA.OpenAcc等,这些都是专门用来做并行计算的标准或者说接 ...
- (Matlab)GPU计算简介,及其与CPU计算性能的比较
1.GPU与CPU结构上的对比 2.GPU能加速我的应用程序吗? 3.GPU与CPU在计算效率上的对比 4.利用Matlab进行GPU计算的一般流程 5.GPU计算的硬件.软件配置 5.1 硬件及驱动 ...
- python3使用pycuda执行简单GPU计算任务
技术背景 GPU的加速技术在深度学习.量子计算领域都已经被广泛的应用.其适用的计算模型是小内存的密集型计算场景,如果计算的模型内存较大,则需要使用到共享内存,这会直接导致巨大的数据交互的运算量,通信开 ...
- [转]如何远程连接运行OpenGL/Cuda 等GPU程序
发现一篇神文,解决了困扰许久的远程桌面OpenGL/GPU 等问题... 原地址在这:http://www.tanglei.name/how-to-run-gpu-programs-using-rem ...
- 多GPU计算
多GPU计算已经可以说,只要是个成熟的模型,都使用了这一点. 例如: gluoncv:https://github.com/dmlc/gluon-cv/blob/master/scripts/dete ...
随机推荐
- POJ2060最小路径覆盖
题意: 有n个任务,如果时间来得及干完某些任务后还可以接着干别的任务,给一个任务清单,问最少派出去多少人能完成所有任务. 思路: 比较简单的追小路径覆盖问题了,在DAG中找到 ...
- 利用 ROP 技术绕过 DEP 保护的一次简单尝试
\x 01 前言 DEP是数据执行保护的英文缩写,全称为Data Execution Prevention.数据执行保护(DEP) 是一套软硬件技术,能够在内存上执行额外检查以帮助防止在系统上运行恶意 ...
- HBASE-使用问题-split region
问题描述: HBASE表的管理以REGION分区为核心,通常面临如下几个问题: 1) 数据如何存储到指定的region分区,即rowkey设计,region splitkey设计 2)设计的split ...
- Java并发容器篇
作者:汤圆 个人博客:javalover.cc 前言 断断续续一个多月,也写了十几篇原创文章,感觉真的很不一样: 不能说技术有很大的进步,但是想法确实跟以前有所不同: 还没开始的时候,想着要学的东西太 ...
- [LeetCode每日一题]88. 合并两个有序数组
[LeetCode每日一题]88. 合并两个有序数组 问题 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 初始化 n ...
- SwiftUI 简明教程之指示器
本文为 Eul 样章,如果您喜欢,请移步 AppStore/Eul 查看更多内容. Eul 是一款 SwiftUI & Combine 教程 App(iOS.macOS),以文章(文字.图片. ...
- 序列化-Hessian
引用官网介绍: Hessian is a dynamically-typed, binary serialization and Web Services protocol designed for ...
- 运维告诉我CPU飙升300%,为什么我的程序上线就奔溃了
线上服务CPU飙升 前言 功能开发完成仅仅是项目周期中的第一步,一个完美的项目是在运行期体现的 今天我们就来看看笔者之前遇到的一个问题CPU飙升的问题. 代码层面从功能上看没有任何问题但是投入使用后却 ...
- 手写Spring MVC框架(一) 实现简易版mvc框架
前言 前面几篇文章中,我们讲解了Spring MVC执⾏的⼤致原理及关键组件的源码解析,今天,我们来模仿它⼿写⾃⼰的mvc框架. 先梳理一下需要实现的功能点: tomcat加载配置文件web.xml: ...
- Charles的证书下载(web)
1.charles的证书下载(web) 1.为什么下载charles的ssl证书? 默认情况下,charles不能解析https协议的接口,里面的请求和响应数据都是乱码格式,所以我们需要下载ssl证书 ...