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是一个必备的工具,通过检查并发运行的数千个线程来洞察内存访问问题。

还有许多第三方解决方案,包括:

·       ARM Forge

·       TotalView Debugger

·       PAPI CUDA Component

·       TAU Performance System

·       VampirTrace

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计算生态系统的更多相关文章

  1. GPU计算的后CUDA时代-OpenACC(转)

    在西雅图超级计算大会(SC11)上发布了新的基于指令的加速器并行编程标准,既OpenACC.这个开发标准的目的是让更多的编程人员可以用到GPU计算,同时计算结果可以跨加速器使用,甚至能用在多核CPU上 ...

  2. Julia:高性能 GPU 计算的编程语言

    Julia:高性能 GPU 计算的编程语言 0条评论 2017-10-31 18:02    it168网站 原创 作者: 编译|田晓旭 编辑: 田晓旭 [IT168 评论]Julia是一种用于数学计 ...

  3. CUDA刷新器:CUDA编程模型

    CUDA刷新器:CUDA编程模型 CUDA Refresher: The CUDA Programming Model CUDA,CUDA刷新器,并行编程 这是CUDA更新系列的第四篇文章,它的目标是 ...

  4. GPU计算的十大质疑—GPU计算再思考

    http://blog.csdn.NET/babyfacer/article/details/6902985 原文链接:http://www.hpcwire.com/hpcwire/2011-06-0 ...

  5. OpenGL实现通用GPU计算概述

    可能比較早一点做GPU计算的开发者会对OpenGL做通用GPU计算,随着GPU计算技术的兴起,越来越多的技术出现,比方OpenCL.CUDA.OpenAcc等,这些都是专门用来做并行计算的标准或者说接 ...

  6. (Matlab)GPU计算简介,及其与CPU计算性能的比较

    1.GPU与CPU结构上的对比 2.GPU能加速我的应用程序吗? 3.GPU与CPU在计算效率上的对比 4.利用Matlab进行GPU计算的一般流程 5.GPU计算的硬件.软件配置 5.1 硬件及驱动 ...

  7. python3使用pycuda执行简单GPU计算任务

    技术背景 GPU的加速技术在深度学习.量子计算领域都已经被广泛的应用.其适用的计算模型是小内存的密集型计算场景,如果计算的模型内存较大,则需要使用到共享内存,这会直接导致巨大的数据交互的运算量,通信开 ...

  8. [转]如何远程连接运行OpenGL/Cuda 等GPU程序

    发现一篇神文,解决了困扰许久的远程桌面OpenGL/GPU 等问题... 原地址在这:http://www.tanglei.name/how-to-run-gpu-programs-using-rem ...

  9. 多GPU计算

    多GPU计算已经可以说,只要是个成熟的模型,都使用了这一点. 例如: gluoncv:https://github.com/dmlc/gluon-cv/blob/master/scripts/dete ...

随机推荐

  1. hdu4179 限制最短路

    题意:       这个题目估计读懂题意就ok了,关键是题意蛋疼,像我这样的英语渣渣活着可真难啊,题意大体是这样,给你n个点m条无向边,给你起点和终点,让你求从起点到终点的最短路径,其中有一些限制: ...

  2. Windows核心编程笔记之错误处理

    0x01 GetLastError() 函数用于获取上一个操作的错误代码 #include <Windows.h> #include <iostream> using name ...

  3. 【JavaScript】Leetcode每日一题-在D天内送包裹的能力

    [JavaScript]Leetcode每日一题-在D天内送包裹的能力 [题目描述] 传送带上的包裹必须在 D 天内从一个港口运送到另一个港口. 传送带上的第 i 个包裹的重量为 weights[i] ...

  4. 【JavaScript】Leetcode每日一题-递增顺序搜索树

    [JavaScript]Leetcode每日一题-递增顺序搜索树 [题目描述] 给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没 ...

  5. PHP基础—PHP的数据类型与常量使用

  6. 10个 解放双手的 IDEA 插件,这些代码都不用写(第二弹)

    本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富~ 鸽了很久没发文,不写文章的日子真的好惬意,每天也不用愁着写点什 ...

  7. 如何将代码托管到Github

    Github是最火热的源代码管理平台,你可以通过这个平台,将代码托管起来,防止代码丢失,或者将自己的代码展示给世界. 首先要下载Git,请自行在各大应用平台下载. 下载完成后,在你的菜单上下文中就会出 ...

  8. Mybatis学习之自定义持久层框架(四) 自定义持久层框架:生产sqlSession

    前言 上一回我们完成了数据库配置文件的读取和解析工作,有了这些准备工作,我们就可以与数据库创建连接和会话了,所谓sqlSession就是数据库的会话,一切增删查改操作都是在与数据库的会话中完成,下面我 ...

  9. OCR-Form-Tools项目试玩记录(一)本地部署

    OCR-Form-Tools是微软的一个开源代码库,包含微软表单识别和OCR服务相关的多种工具.Github仓库地址 目前,表单标注工具(OCR Form Labeling Tool)是首个发布到本该 ...

  10. 【BUAA软工】结对编程作业

    项目 内容 课程:2020春季软件工程课程博客作业(罗杰,任健) 博客园班级链接 作业:BUAA软件工程结对编程项目作业 作业要求 课程目标 学习大规模软件开发的技巧与方法,锻炼开发能力 作业目标 完 ...