新睿云

> GPU加速云服务器 > GPU云服务器并行计算技术的发展及原理

GPU云服务器并行计算技术的发展及原理

作者/来源: 发布时间:2019-06-13

很长时间以来,云计算成了一个热闹词汇。那么到底什么是云计算呢?它本质上是一种社会智力资源的共享,通过云端的技术封包,降低了难度门槛,使得更多用户可以采用各种原本“很难很先进”。如今,中国的移动互联新经济高度繁荣,这就需要有相应技术高度的云计算服务作为龙骨支撑。按照当今计算技术的趋向看——“视频音图+3D+规模机器学习+大数据分析=》高强度计算任务=》云GPU并行运算”,因而云GPU并行计算已逐渐成为技术潮流。

GPU

1.GPU云服务器发展的必要性

随着计算机技术的发展,人们对图形和图像的处理要求也越来越高,尤其现在兴起的3D技术,使图形图像处理和3D计算已经应用到了各种视频游戏,电影产业,医疗成像,空间探索,远程通信等各个方面。

现在风靡的大型3D游戏,诸如《使命召唤》《极品飞车》等,这些游戏画面逼真,3D特效强烈,所以要求计算机对图形图像的处理能力要求也非常高。 2010年放映的电影《阿凡达》开创了动画形象代替了演员的3D电影的先河,它完美的运用了3D立体画面的创造了逼真的效果使画面美轮美奂。在工业设计上,有很多广为人们熟知的3D处理软件,例如AutoCAD,Maya,SolidWorks等知名软件。在医疗成像方面,3D/4D立体成像技术,使医护人员可以获得从传统平面显示无法捕捉到的信息数据,能够360度全方位立体读取影像信息,为临床诊断提供了更丰富、精准的影像资料,大幅度降低了对病灶的漏诊,提高了诊疗质量,必将掀起医疗影像信息处理的一次技术革命。

伴随着IT互联网以及手持终端的发展和普及,要处理的数据量的爆发式增长,手机上也出现了3D游戏的发展趋势,这些都对数据图像和3D计算提出了更多的需求。

由此看来,目前对图形图像以及3D计算的巨大需求,已经要求计算机需要具备强大的3D建模能力,然而CPU的串行处理能力远不能满足高效的处理图像以及3D计算的能力,因此并行计算技术的使用日益广泛。

GPU云服务器

2.以美国NVIDIACUDA运算包为代表的GPU并行运算技术

GPU最大的特点是它拥有超多计算核心,往往成千上万核。而每个核心都可以模拟一个CPU的计算功能,虽然单个GPU核心的计算能力一般低于CPU。对于GPU并行计算,缓存对程序员不透明,程序员可根据实际情况操纵大部分缓存。采用 SIMT - 单指令多线程模型,一条指令配备一组硬件,对应32个线程 (一个线程束)。GPU 内部有很多流多处理器。每个流多处理器都相当于一个“核",而且一个流多处理器每次处理 32 个线程。

著名的显示卡公司NVIDIA为其主流显卡产品设计了专门的GPU并行计算工具包,称之为CUDA(Compute Unified Device Architecture,统一计算架构)。CUDA C/C++语言有如下特点:也是SPMD框架,兼有分布式存储和共享内存的优点,把握GPU的带宽是充分利用GPU计算资源的关键。

以GeForce8800GTX为例,其核心拥有128个内处理器。利用CUDA技术,就可以将那些内处理器串通起来,成为线程处理器去解决数据密集的计算。而各个内处理器能够交换、同步和共享数据。利用NVIDIA的C-编译器,通过驱动程序,就能利用这些功能。亦能成为流处理器,让应用程序利用进行运算。GeForce8800GTX显示卡的运算能力可达到520GFlops,如果建设SLI系统,就可以达到1TFlops。

有软件厂商利用CUDA技术,研发了一个AdobePremierePro的插件。通过插件,用户就可以利用显示核心去加速H.264/MPEG-4AVC的编码速度。速度是单纯利用CPU作软件加速的7倍左右。

NVIDIA从所有基于G80及之后架构的民用与专业显卡或运算模块皆支持CUDA技术。整体运算能力比单纯利用CPU的速度提高7倍甚至更高。TeslaGPU是针对工作站和服务器的加速器,与消费级显卡和专业图形卡相比,具有完整的双精度浮点运算性能,具备双DMA引擎可满足双向PCIe通信,板载内存达到12G(TeslaK40GPU),具有专门的Linux补丁、InfiniBand驱动程序以及CUDA驱动程序,针对Windows 操作系统的CUDA驱动程序可实现更高性能,TCC驱动程序可减少CUDA内核的系统总开销并支持远程桌面(WindowsRemoteDesktop) 以及Windows服务。

GPU

3.GPU计算的原理

那么,CPU与GPU如何协同工作?下图展示了CPU与GPU的并存体系模式。

GPu并行计算

在需要GPU进行运算时,以NVIDIA推出的CUDA(Compute Unified Device Architecture)为例,整体的原理如下:

gpu云服务器

整体分为4步:

从主机内存将需要处理的数据copy到GPU的内存 CPU发送数据处理执行给GPU GPU执行并行数据处理将结果从GPU内存copy到主机内存

CUDA提供了对于一般性通用需求的大规模并发编程模型,使用户可以对NVIDIA GPU方便的对于GPU进行并发性编程。如果进行编译优化会在特定操作系统里面把计算并行化分配到GPU的多个core里面,由于GPU有多个core(上千个),所以并发度大大提高,运算效率会比CPU高。下面用代码表明了如何通过GPU进行计算:

有三个数组int a[10], b[10], c[10];我们要计算a和b的向量之和存放到c中。

一般C语言

for(int i=0; i<10; i++)

c[i] = a[i] + b[i];

CUDA编程做法:

GPU中的每个线程(核)有一个独立序号叫index,那么只要序号从0到9的线程执行c[index] = a[index] + b[index];就可以实现以上的for循环。以下为代码示例:

#include <stdio.h>

#include <cuda_runtime.h>

define N 10;/* 定义10个GPU运算线程 */

define SIZE N*sizeof(int);

/* 运行在GPU端的程序 */

__global__voidvectorADD(int* a,int* b,int* c)

{

intindex = threadIdx.x;//获得当前线程的序号

if(index < blockDim.x)

c[index] = a[index] + b[index];

}

intmain ()

{

/* 本地开辟三个数组存放我们要计算的内容 */

int* a = (int*) malloc (SIZE);

int* b = (int*) malloc (SIZE);

int* c = (int*) malloc (SIZE);

/* 初始化数组A, B和C */

for(inti=0; i<N; i++)

{

h_a[i] = i;

h_b[i] = i;

}

/* 在GPU上分配同样大小的三个数组 */

int* d_a;

int* d_b;

int* d_c;

cudaMalloc((void**)&d_a, SIZE);

cudaMalloc((void**)&d_b, SIZE);

cudaMalloc((void**)&d_c, SIZE);

/* 把本地的数组拷贝进GPU内存 */

cudaMemcpy(d_a, a, SIZE, cudaMemcpyHostToDevice);

cudaMemcpy(d_b, b, SIZE, cudaMemcpyHostToDevice);

/* 定义一个GPU运算块 由 10个运算线程组成 */

dim3 DimBlock = N;

/* 通知GPU用10个线程执行函数vectorADD */

vectorADD<<<1, DimBlock>>>(d_a, d_b, d_c);

/* 将GPU运算完的结果复制回本地 */

cudaMemcpy(c, d_c, SIZE, cudaMemcpyDeviceToHost);

/* 释放GPU的内存 */

cudaFree(d_a);

cudaFree(d_b);

cudaFree(d_c);

/* 验证计算结果 */

for(intj=0; j<N; j++)

printf("%d ", c[j]);

printf("/n");

}

4.GPU云服务器的使用性能

GPU云主机突破了传统GPU,能发挥极致性能,具有高并行、高吞吐、低时延等特点,在科学计算表现中,性能比传统架构提高几十倍。用户无需预先采购、准备硬件资源,可一次性购买,免除硬件更新带来的额外费用,能有效降低基础设施建设投入。目前新睿云现有GPU云服务器型号:xr.GPU.P1、xr.GPU.p2,其中xr.GPU.P1型号显卡型号为P40,xr.GPU.P2型号显卡型号为P100。欢迎用户前往新睿云官网购买使用。


本文发布的内容、图片如果涉及侵权请尽快告知,我们将会在第一时间删除。


热门标签
new year
在线咨询
咨询热线 400-1515-720
投诉与建议
{{item.description}}

—您的烦恼我们已经收到—

我们会将处理结果发送至您的手机

请耐心等待