如何提高MATLAB中gather()函数的速度,或者这是将数据从gpuArray传输到通用数组的替代方法?

问题描述

我写了一个算法来解决一组 PDE。在while循环中间有一些很长的方程,我尝试通过GPU计算这些方程以加快速度,然后进一步使用这些方程的结果。它运行成功,但是,gather() 函数几乎占用了总时间的 1/5(3000 秒)。我尝试在命令窗口中使用 [dk1,dk2,dk3,dk4,dk5,dk6,dk7,dk8,dk9] = dkfunction(S,T),它只花费 0.001 秒。

我很困惑为什么这段代码在大循环中表现不佳?我想知道是否有一种方法可以加速 gather() 函数,或者替代函数?顺便问一下,mex 文件中数组的大小应该是固定的还是不固定的?

(注意:我的代码很长,所以我附上了我的问题的分析器和核心部分(简化)。dkfunction 与 cuda 相关。

以下代码运行时间的Profiler:

enter image description here

while t<n  

   %Omitted code for S and T calculation.
   %%%
[dk1,T); 

[dkvTdT,dkvTdS,dkvhdT,dkvhdS,dphaivdT,dphaivdS,dkhdS,dkdS,dphaidS] = gather(dk1,dk9);
   %%%
   %Omitted code to use dkvTdt..... to calculate other variables and t steps.
   %%%

end

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)