首页 > 解决方案 > 为什么 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.

标签: matlabgpu

解决方案


推荐阅读