matlab - 为什么 MATLAB 中的 pagemtimes 在 GPU 上运行缓慢?
问题描述
我在我的 GPU (GTX 1060 Q-Max) 上运行我的 MATLAB 代码,但我遇到了 pagemtimes 和交叉函数的执行时间问题。我正在使用的一个矩阵(BBI1)的大小是 2 x 2 x 418824,其他的大小相似,所以使用 GPU 计算应该没问题。我在代码的以下部分看到了显着的性能损失:
BBI1 = pagemtimes(pagemtimes(xiII_T,xiII),II) - pagemtimes(xiII,xiII_T);
BBJ1 = 2*pagemtimes(xiI,xiII_T) - pagemtimes(pagemtimes(xiI_T,xiII),II) - pagemtimes(xiII,xiI_T);
eInII = pagemtimes(pagemtimes(xiII_T,xiII),xiI) - pagemtimes(pagemtimes(xiI_T,xiII),xiII);
eIInI = pagemtimes(pagemtimes(xiI_T,xiI),xiII) - pagemtimes(pagemtimes(xiII_T,xiI),xiI);
outI = 2 * CC * ((1./AA) - (1./aa)) .* BBI1 + 2 * CC * 1./(aa.^3) .* pagemtimes(eInII,pagetranspose(eInII));
outJ = 2 * CC * ((1./AA) - (1./aa)) .* BBJ1 + 2 * CC * 1./(aa.^3) .* pagemtimes(eInII,pagetranspose(eIInI));
性能测试如下:
pagemtimes 和 cross 根本没有针对我的情况进行优化,还是我遗漏了什么?如何加速上面的代码?
更新:下面的最小可重复示例:
matrix = rand(2,2,418824);
matrix_T = pagetranspose(matrix);
% measure on CPU
tic
times1 = pagemtimes(pagemtimes(matrix,matrix_T),matrix);
toc
% measure on GPU
matrix = gpuArray(matrix);
matrix_T = pagetranspose(matrix);
tic
times2 = pagemtimes(pagemtimes(matrix,matrix_T),matrix);
wait(gpuDevice);
toc
给出输出:
Elapsed time is 0.012834 seconds.
Elapsed time is 0.440265 seconds.
解决方案
推荐阅读
- c - 如何获取我在 HWND 上绘制的所有像素代码?
- r - 如何使用两个列表来创建表(列和行)
- python-3.x - "TypeError: product_show() missing 1 required positional argument: 'Option'"
- javascript - 如何使用 javascript 关闭 file_browse 对话窗口
- angular6 - 如何从不同的域以角度 6 呈现 html 响应
- wpf - 在 wpf,MVVM 灯下,突然简单的 relaycommand 不起作用。我应该从哪里开始寻找?
- unit-testing - 在 AOT/release 或 profile 模式下运行颤振/飞镖测试?
- android - VoicePackage ID 是否保证稳定?
- javascript - 打字稿函数重载和缺少参数
- c++ - 将 32 位遗留代码移植到 64 位时如何处理不断变化的数据类型大小?