2010-12-09 98 views
5

我将尝试通过使用CUDA优化用MATLAB编写的一些代码。我最近开始编程CUDA,但我对它的工作原理有了一个总体的了解。CUDA和MATLAB for循环优化

所以,说我想添加两个矩阵在一起。在CUDA中,我可以编写一个算法,利用线程计算结果矩阵中每个元素的答案。但是,这种技术可能与MATLAB已经做的很相似吗?在那种情况下,效率是否独立于技术并且仅仅归因于硬件水平?

+0

将MathWorks的解决方案与第三方工具和手工制作的CUDA进行比较可能会很有趣。 http://developer.nvidia.com/object/matlab_cuda.html – zellus 2010-12-09 22:12:15

回答

3

该技术可能相似,但请记住CUDA中有数百个线程同时运行。如果MATLAB正在使用线程,并且这些线程正在四核上运行,那么每个时钟周期只能执行4个线程,而在相同的时钟周期内,您可能需要几百个线程才能在CUDA上运行。

所以要回答你的问题,是的,这个例子中的效率与技术无关,仅仅归因于硬件。

+0

我不会惊讶地发现加速 - 事实上,期望它给予输入大小是值得的开销。但是,我的观点是算法本身(即并行计算每个元素的加法)不会影响加速,而与硬件无关。 – dnbwise 2010-12-09 21:59:41

1

答案毫不含糊,所有的效率都是硬件水平。我不知道matlab的工作原理,但CUDA的优点是可以同时执行多线程,与matlab不同。

请注意,如果问题很小或者需要很多读写操作,CUDA可能只会是一个额外的麻烦。

+0

推测,MATLAB使用虚拟机级别的多个线程。 – dnbwise 2010-12-09 22:35:03

0

CUDA对matlab有官方支持。

[需要链接]

您可以使用MEX文件从MATLAB GPU上运行。

瓶颈是数据从CPU-RAM传输到GPU的速度。所以如果转移最小化并以大块完成,加速很好。

0

对于简单的事情,最好在Matlab PCT中使用gpuArray支持。你可以在这里检查它 http://www.mathworks.de/de/help/distcomp/using-gpuarray.html

对于添加gpuArrays,乘法,分钟,最大等等,他们使用的实现往往是好的。我确实发现,为了像abs(y-Hx)这样的小矩阵的批处理操作。^ 2,你最好写一个小内核来为你做。