为什么GPU上的页面时间比CPU慢?

18次浏览(过去30天)
大卫·何
大卫·何 2020年12月1日
回答: 神骑士 2021年5月30日
我是一名物理研究员,我的很多数值工作都涉及到小的复值矩阵的批量乘法。这让我非常兴奋地看到R2020b pagemtimes 函数已经实现,因为这正是我所需要的。
然而,在GPU和CPU之间的速度比较测试中,GPU的表现明显更差。以下是此类测试的一个最小示例:
batchSize = [100 100 100];
matSize = [2 2];
a = complex(rand([matSize batchSize]), rand([matSize batchSize]));
gpuA = gpuArray(a);
F = @() pagemtimes(a,a);
gpuF = @() pagemtimes(gpuA, gpuA);
时间(f)我大概只有0.05秒
gputimeit (gpuF)我大约只有0.3秒
显著的放缓仅仅是因为批处理/矩阵大小对于GPU优化来说太小而无法克服开销吗?还是有什么我没注意到的事?
我正在NVIDIA Quadro P1000 GPU上进行测试。
5个评论
神骑士
神骑士 2021年5月30日
扁平化和非扁平化只改变数组元数据,因此它本质上是一个自由操作。

登录评论。

答案(3)

马特·J
马特·J 2020年12月1日
编辑:马特·J 2020年12月1日
我没有支持的Matlab版本万博1manbetx pagemtimes ,但对于GPU版本,建议改为尝试 pagefun (@mtimes…) .我确实看到了相对于 mtimesx
batchSize = [100 100 100];
matSize = [2 2];
a = complex(rand([matSize batchSize]), rand([matSize batchSize]));
gpuA = gpuArray(a);
F = @() mtimesx(a,a);
gpuF = @() pagefun(@mtimes,gpuA, gpuA);
时间(f)我得到0.8175秒左右
gputimeit (gpuF)我得到大约0.1033秒
1评论
大卫·何
大卫·何 2020年12月2日
马特,谢谢你的回答。当我测试时 pagefun 我得到的结果和 pagemtimes .有趣的是,你的CPU和GPU时间与我的非常不同。

登录评论。


内森Zechar
内森Zechar 2021年5月29日
你好,大卫,我有一个类似的问题,发现pagemtimes比展开一个方程和在CPU和GPU上编码要慢。但是对于GPU来说,它是非常慢的。
这里有一个例子。这可以用两种不同的方式进行编码。请注意仅使用CPU时的页面时间性能。
清晰的所有
Nx = 100;
Ny = 100;
Nz = 100;
[A1, A2, A3, B1, B2, B3, C1, C2, C3,...
E11, E12汽油、E13 E21、E22 E23, E31, E32, E33,...
F11,F12,F13,F21,F22,F23,F31,F32,F33] = deal(rand(Nx,Ny,Nz));
抽搐
I = 1:20
%%电场更新
C1 = F11。* (A1。* E11 + B1) + F12。* (A2。* E12汽油+ B2) + F13。* (A3。* E13 + B3);
C2 = F21。* (A2。* E21 + B2) +——F22。* (A2。* E22 + B2) + F23。* (A3。* E23 + B3);
C3 = F31。* (A3。* E31 + B3) + F32。* (A3。* E32 + B3) + F33。* (A3。* E33 + B3);
结束
toc
[A,B,C] = deal(rand(3,1,Nx,Ny,Nz));
[E,F] = deal(rand(3,3,Nx,Ny,Nz));
抽搐
I = 1:20
C = pagemtimes(F,(B+pagemtimes(E,A)));
结束
toc
没有pagemtimes -“运行时间为0.032141秒”。
使用pagemtimes -“运行时间为0.325006秒”
在deal()函数中的变量上使用gpuArray(),时间差异甚至更慢!
没有pagemtimes -“运行时间为0.012688秒。”
使用pagemtimes -“运行时间为5.357220秒。”

神骑士
神骑士 2021年5月30日
这可能只是因为您在专为单精度操作设计的设备上运行双精度数学。在这些设备上,gpuBench对于CPU上的双精度操作并没有显示出多大的改进。你能把你的数据转换成单精度,看看GPU是否有改进吗?

标签

s manbetx 845


释放

R2020b

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!