GPU测试

我最近买了一个图形处理器。它之所以被称为GPU,是因为这种处理器最初是用来加快图形速度的。但是MATLAB用它来加速计算。我们来看看gpuArray在我的机器上进行对象基准测试。多年来我一直在做计算机基准测试。我喜欢在改变任务大小的情况下做配置文件,看看所需的内存量如何影响性能。我在做这些侧写的时候总能学到一些意想不到的东西。Ben Todoroff是MathWorks并行处理团队的一员。去年他贡献了# 34080, gpuBench到MATLAB中央文件交换。他已经能够比较几种不同的图形处理器。我将只考虑一个GPU的性能,但更详细。重要的注意。这只是两倍的精度。单精度是另一回事。

内容

我的笔记本电脑

我做大部分工作的笔记本电脑是一台ThinkPad t480,搭载英特尔酷睿i7-8650U处理器,基本工作频率为1.90 GHz。CPU有4核,最高Turbo频率为4.20 GHz。主存为16GB。我使用的是64位的微软Windows 10操作系统。零售价在1500美元左右。MATLAB使用英特尔数学内核库,它是多线程的。因此,它可以利用所有四个核心。

GPU

GPU采用NVIDIA Titan V处理器,频率为1.455 GHz。它有12GB内存,640个张量核和5120个CUDA核。它装在一个独立的Thunderbolt外设盒里,外设盒比笔记本电脑本身大几倍。这个盒子有自己的240W电源和一对风扇。它的零售价为2999美元。 图片来源:NVIDIA

基准测试

这是一个令人沮丧的项目。试图测量现代计算机的速度是非常困难的。我可以在我的机器上打开任务管理器性能表。我可以打开飞行模式,这样我就不用连网了。我可以关闭MATLAB并关闭所有其他窗口,除了性能仪表本身。我可以等到所有短暂活动都消失。但我还是没有得到一致的时间。下面是任务管理器的快照。工作频率在1.90 GHz和远远超过3 GHz的额定基本速度之间自动变化。它会随着温度的变化而上下波动,谁知道还有什么。当我在寒冷的早晨第一次给这台机器通电时,它运行得比白天晚些时候快。请注意,239个进程和3026个线程的利用率为8%。我知道这些线程中的大多数都是空闲的,等待唤醒并干扰我的计时实验。我所能做的就是计算多次,然后取平均值。或者我应该用最短的时间,就像短跑运动员的个人最好成绩一样。

失败

我要进行测量吉拍.就是10^9次。什么是失败?大多数矩阵计算的内循环要么是点积,下载188bet金宝搏
S = S + x(i)*y(i)
或者daxpys, 2x + y,
Y (i) = a*x(i) + Y (i)
在这两种情况下,都是一次乘法、一次加法和少量索引、加载和存储操作。总的来说,这是两个浮点运算,或者说两个失败.每次通过内循环都算两次失败。如果我们忽略缓存和内存的影响,矩阵计算所需的时间大致与flop的数量成正比。

CPU, \ b

下面是一个典型的基准运行时间的标志性x = A\b
T = 0 (1,30);M = 0 (1,30);N = 0:500:15000;Tspan = 1.0;
当~get(stop,'value') k = randi(30);Nk = n(k);A = randn(nk,nk);B = randn(nk,1);CNT = 0;Tok = 0;当tok < tspan x = A\b;CNT = CNT + 1;Tok = toc;End t(k) = t(k) + tok/cnt; m(k) = m(k) + 1; end
T = T /m;Gigaflops = 2/3*n.^3./t/1.e9;
这会在500 × 500和15000 × 15000之间随机改变矩阵的大小。如果计算时间少于一秒一个\ b时,重复计算。结果是3000阶或更低阶的系统需要重复。在两个极端情况下,500阶的系统需要重复100次以上,而15,000阶的系统需要超过30秒。如果我运行这个程序超过一个小时,每一个值n遇到几次,平均次数稳定下来。之后添加了一些注释
情节(n t ' o ')
我得到时间越来越长n ^ 3,不出所料。为一个\ b内部循环大致执行2/3 n ^ 3次数,千兆次
Giga = 2/3*n.^3./t/1.e9
我的结论是x = A\b我的机器每秒可达七千万亿次N = 10000对于更大的矩阵来说并没有加快太多。

CPU、A * B

2的乘法n——- - - - - -n矩阵需要2 n ^ 3失败的次数是解决一个线性系统的三倍。 因此,CPU上的矩阵乘法运算可以达到80gigaflops以上,而订单小到2000。

GPU, \ b

现在说说这个项目的主要动机,GPU。首先,求解一个线性方程组。这里我们遇到了一个重大的障碍——GPU上的内存只够处理21000级左右的线性系统。对于这种系统,性能可以达到1万亿次浮点运算(10^12次浮点运算)。如果GPU有更多的内存,那么这个速度是远远达不到的。 这里有一个不连续,可能是缓存大小的影响N = 8000

GPU, A * B

将矩阵乘法分解成GPU可以处理的许多小的并行任务是很容易的。 14000数量级的一对矩阵可以在不到一秒的时间内相乘。每秒6万亿次浮点运算是最高速度。我们的订单是3000。

A \ b,比较

GPU和CPU的性能如何一个\ b?对于789级或更小的线性系统,CPU比GPU更快。GPU可以比CPU快15倍,直到耗尽内存。当然,这还不包括任何数据传输时间。

A * B,比较

对于矩阵乘法,情况就大不相同了。作为矩阵顺序的函数,CPU和GPU都能很快达到它们的最高速度。那么是800亿次浮点运算,而不是6万亿次浮点运算。GPU快了75倍。

超级计算机,过去和现在

四十多年前,在LINPACK基准测试在美国,世界上最快的超级计算机是位于博尔德的国家大气研究中心(NCAR)新安装的Cray-1。这台机器可以在50毫秒内解决一个100 × 100的线性系统。这是每秒14兆次浮点运算(10^6次浮点运算),大约是每秒1.6兆次浮点运算最高速度的十分之一。在每秒6万亿次浮点运算时,我桌上的计算机要快37500倍。Cray-1和NVIDIA Titan V都可以从更大的内存中获益。另一方面,当今世界上最快的超级计算机是峰会在田纳西州橡树岭国家实验室。它的最高速度是每秒200千万亿次(10^15次),大约比我的笔记本电脑加GPU快37500倍。而且,Summit有很多内存。

发布与MATLAB®R2018b

|

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。