如何使用gpu计算

关于gpu计算和cpu计算:

gpu跑的是对应的gpu指令,并不是什么语言,cpu也一样所有语言一样是要被编译成对应平台的机器指令。或者用解析器执行时转换成机器指令python做深度学习,要做gpu加速,底层还是要通过编译器转换成gpu指令。所用的工具一般是CUDA,Opencl,DirectCompute.使用CUDA就是把C/C++代码编译成GPU的指令。再配合其他API调用代码,只能用在Nvidia的GPUOpenCL跟DirectCompute是不分显卡的。只要显卡硬件支持通用计算,实现了该驱动。CL的kernel是一种类C的语言。最终会被编译成GPU指令。至于C++ Java也可以做的,也只是调用编译好的Kernel。往里面拷贝数据,穿参数。让GPU计算完后,CPU再取回数据。GPU计算一般是面向大型的统一的数据,所谓统一就是数据类型都是一样的。就是固定类型,大小的数组。因为是SIMD/SIMT,适合做简单的计算。对每个数据单元的处理是一样的,不适合有复杂条件跳转的逻辑。所以GPU加速使用场景比较有限。另外的SIMD指令加速,对于小型的数据,可以优先考虑。因为GPU加速,可能需要内存拷贝,使用开销相对较大。用SIMD的话,直接就是用CPU的特殊指令MMX SSE AVX加速。Java应该会有对应的包,C++用Intrinsic头文件。

GPU特别适合运行单程序多数据流的数据并行处理任务,即主要支持SPMD并行计算模式(matlab的spmd的思想则是不同的数据,用同一个程序处理。当然这个程序内部可以编写针对不同情况的处理代码。parfor的并行思想是把同一批数据分给for循环中不同的循环体,进行处理。spmd的内部实现代码限制很少,spmd的灵活性比parfor要高得多)

对于机器学习而言,需要大数据来训练。就是需要大量的并行的重复计算,GPU正好有这个专长,非常适合。
  大数据已经是与人们生活息息相关的科学技术,并且随着互联网以及物联网的普及发展,大数据将会给现代社会带来更大的商业价值。在大数据时代,由于处理的数据量庞大以及数据处理算法的改进,仅使用CPU对海量数据进行分析会导致效率低下。因此人们开始构建新的计算架构来提升大数据处理的性能。人们首先将GPU应用于大数据处理中。GPU虽然没有CPU复杂的控制逻辑,但是其具有CPU不能比拟的数量众多的计算资源,并且GPU的结构类型非常统一,适合于对大量数据进行并行计算。

适合GPU运算的运算类型有以下六种:

(1)大量的轻量级运算

即用大量数据或者用同一数据多次调用同一公式或者计算过程,公式本身并不复杂,只是执行的次数较多,这是GPU先天的优势。

(2)高度并行

高度并行指的就是各个数据之间运算互不影响,即耦合度较低。由于GPU本身硬件基础决定,各个workgroup之间并不相互通信,只有同一workgroup内的work-item之间才相互通信,所以GPU本身并不支持迭代等数据耦合度较高的计算,这是GPU本身要求。

(3)计算密集型

任务可以分为计算密集型和IO密集型。计算密集型,即少量的IO读取+大量的计算,消耗CPU资源较多;而IO密集型,是指多次使用IO读取+少量计算,这种情况涉及到寄存器与内存之间以及与设备内存之间的通信问题,主要限制原因是显存带宽问题。

(4)控制简单

对比GPU来说,CPU更擅长判断、逻辑控制、分支等,有通用计算能力,并含有强大的ALU(算术运算单元);而GPU更适合于逻辑简单的运算。

(5)多个阶段执行。

运算程序可分解为多个小程序或者同一程序可分多个阶段执行,这就类似于使用集群处理同一任务,将其分解为多个任务碎片分发到各节点执行,以提高运算速率。

(6)浮点型运算。

GPU擅长浮点型运算。

一直以来,CPU在计算机上负责“计算”,CPU的核数越大,运算能力越强。相较于CPU的十几核来说,GPU上可以承载数千个处理单元。在过去,GPU技术主要被应用于图像渲染和真实场景模拟。

现在,GPU计算已经在深度学习、高性能计算(HPC)中广泛应用,越来越像更高性能的CPU。GPU的这种“大规模并行计算”的能力已经开始被挖掘,定位也从之前协处理器向主流处理器做转移。

CUDA代表“计算统一设备架构(Compute U-nified Device Architecture)",是N V IDIA公司专为GPU计算而发展的一套应用软件开发环境与工具软件。   CUDA包含3个主要组件:一个可访问GPU上并行计算资源的编译器,一个计算专用的运行时驱动程序,以及一套针对CUDA开发的优化科学计算程序库。    CUDA的核心部分是专门开发的C编译器,它简化了GPU并行程序的编码,熟悉C语言的编程人员通过它可以专注于开发并行程序而不是处理图形API。为 了简化开发,CUDA的C编泽器允许程序员将CPU和GPU的代码混合记录到一个程序文件中。在C程序中增加一些简单的代码,通知CUDA编译器哪些函数 由CPU处理,哪些为GPU处理。由GPU处理的函数被CUDA编译器编译,而CPU处理代码则由标准C编译器编译

使用CUDA开发GPU计算应用软件,开发人员使用一种全新的编程模式将并行数据映射、加载到GPU中,CUDA程序则把要处理的数据细分成更小的区 块,然后并行处理。当GPU计算程序运行时,开发者只需在主机CPU上运行程序,

CUDA驱动程序会自动在GPU上载人和执行程序。主机端程序可以通过高 速的PCI Express总线与GPU进行信息交互。数据的传输,GPU运算功能的启动以及其他一些CPU和GPU的交互都可以通过调用运行时驱动程序中的专门操作 来完成,这些高级操作把程序员从手动管理GPU运算资源中解放出来。    采用CUD、技术的GPU既可作为灵活的线程处理器来运行,由数 千个计算程序来调用线程,协作解决复杂的问题,也可作为流处理器运行在具体的应用程序中,其中的各个线程并不进行信息交流。能够采用CUDA技术的应用程 序可以使用GPU进行细粒度的数据密集型处理,并使用多核心 GPU进行复杂的粗粒度任务,例如控制和数据管理

Matlab使用gpu计算:

无需成为 CUDA® 程序员,MATLAB® 即可让您能够使用 NVIDIA® GPU 来加速 AI、深度学习和其他计算密集型分析。使用 MATLAB 和 Parallel Computing Toolbox™,您可以:

直接在 MATLAB 中调用 NVIDIA GPU,有 500 多个内置函数可供使用。

使用 MATLAB worker 和 MATLAB Parallel Server™ 访问台式机、计算集群和云上的多GPU。

使用 GPU Coder™ 直接从 MATLAB 生成 CUDA 代码,以便部署到数据中心、云和嵌入式设备。

使用 GPU Coder 从 MATLAB 生成 NVIDIA TensorRT™ 代码,实现低延迟和高吞吐量的推理。

将 MATLAB AI 应用程序部署到配备 NVIDIA GPU的数据中心,与使用 MATLAB Production Server™ 的企业系统集成。

猜你喜欢

转载自blog.csdn.net/qq_42152032/article/details/131342001