奇怪的分析器GPU错误?

1视图(30天)
克里斯托弗Kanan
克里斯托弗Kanan 2015年11月2日
回答: 神骑士 2015年11月27日
我有一个循环,GPU上做一些操作。当我从命令行调用该函数时,每个时代都在96秒。当我从分析器调用它,每个时代大约需要4秒。CPU版本的代码运行在大约63秒。任何想法如何解决这个问题,我没有分析器GPU加速?我从分析器完全可以叫它,但这似乎是愚蠢的。这是代码的一部分,似乎受到这种现象的影响。r阵很大,例如,4000 x78000。
抽搐
r = gpuArray(单(r));
U_grad = gpuArray(单(0));
W = gpuArray(单(W '));
k = 1: max_class
U_grad = U_grad + bsxfun (@times W (:, k), r);
结束
U_grad =双(收集(U_grad)) * (q);
toc
2的评论
克里斯托弗Kanan
克里斯托弗Kanan 2015年11月2日
我发现了一个bug,需要移除这个循环的需要,所以我真的不需要我回答的问题了。看起来GPU是未能从命令行运行时分配GPU内存,但能够分配的内存脚本时称为分析器。当我把断点和检查变量,他们有一个警告GPU内存。
但是,它似乎仍然奇怪从分析器工作而不是命令行。
我的设置:NVIDIA泰坦(原始,而不是X,等等。),Windows 2015 MATLAB

登录置评。

答案(1)

神骑士
神骑士 2015年11月27日
当你有分析器(从MATLAB R2015a起),让现实的计时GPU被迫同步运行。
我猜没有分析器,你的第二个电话 bsxfun 执行之前第一个完成(这是可能的因为它可以计算不需要以前的循环)的输出。MATLAB试图输出数组的适当分配空间大小,但是没有足够的空间供两个数组的大小。
的分析器,空间第一次调用 bsxfun 已经释放,可用第二 bsxfun
你可以确认这是通过调用 等待(gpuDevice) 内循环来防止这种执行重叠。

类别

找到更多的在GPU计算帮助中心文件交换

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!