为什么GPU上的页面时间比CPU慢?
18次浏览(过去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上进行测试。
答案(3)
内森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秒。”