CUDA和MATLAB用于循环优化

5
我将尝试通过使用CUDA来优化一些用MATLAB编写的代码。最近我开始了解CUDA编程,但我对其工作原理有一个基本的了解。
假设我想要将两个矩阵相加。在CUDA中,我可以编写一个算法,利用一个线程计算结果矩阵中每个元素的答案。然而,这种技术与MATLAB已经使用的技术可能类似,那么效率是否独立于技术,并且只能归因于硬件水平呢?

可能会有趣的是将MathWorks的解决方案与第三方工具和手工制作的CUDA进行比较。http://developer.nvidia.com/object/matlab_cuda.html - zellus
4个回答

3

技术可能相似,但请记住使用CUDA时有数百个线程同时运行。如果MATLAB正在使用线程并且这些线程正在四核心上运行,则每个时钟周期只能执行4个线程,而您可以在具有相同时钟周期的CUDA上运行数百个线程。

因此,回答您的问题,是的,在这个例子中效率与技术无关,仅归因于硬件。


我一点也不会惊讶地看到加速 - 实际上,考虑到输入规模值得承担额外开销,我是期望这种加速的。但是,我的观点是,算法本身(即并行计算每个元素的加法)与硬件无关,不会对加速产生贡献。 - dnbwise

1
答案毫无疑问是肯定的,所有的效率都是在硬件层面上实现的。我不知道Matlab的工作原理,但CUDA的优势在于可以同时执行多个线程,而不像Matlab那样。另外,如果你的问题很小,或者需要进行许多读写操作,那么CUDA可能只会增加额外的麻烦。

据推测,MATLAB 在虚拟机层面利用了多个线程。 - dnbwise

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这样的小矩阵批量操作之类的东西,最好编写一个小内核来完成它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接