我将尝试使用CUDA优化一些用MATLAB编写的代码。我最近开始编程CUDA,但我对它是如何工作有一个大概的了解。
所以,说我想在一起添加两个矩阵。在CUDA中,我可以编写一种算法,利用线程计算结果矩阵中每个元素的答案。但是,这种技术可能与MATLAB的功能类似吗?在这种情况下,效率不是独立于技术而只能归因于硬件水平吗?
答案 0 :(得分:3)
该技术可能类似,但请记住,使用CUDA,您可以同时运行数百个线程。如果MATLAB使用线程并且这些线程在四核上运行,那么每个时钟周期只能获得4个线程,而你可能会在相同的时钟周期内在CUDA上运行几百个线程。
所以回答你的问题,是的,这个例子中的效率与技术无关,只能归因于硬件。
答案 1 :(得分:1)
答案是肯定的,所有效率都是硬件水平。我不知道matlab是如何工作的,但CUDA的优势在于可以同时执行多个线程,这与matlab不同。
另一方面,如果您的问题很小,或者需要许多读写操作,CUDA可能只是一个额外的问题。
答案 2 :(得分:0)
CUDA官方支持matlab。
[需要链接]
您可以使用mex文件在MATLAB上运行GPU。
瓶颈是数据从CPU-RAM传输到GPU的速度。因此,如果传输最小化并以大块完成,则加速很快。
答案 3 :(得分:0)
对于简单的事情,最好在Matlab PCT中使用gpuArray支持。你可以在这里查看 http://www.mathworks.de/de/help/distcomp/using-gpuarray.html
对于像添加gpuArrays,乘法,分钟,最大值等的东西,他们使用的实现往往是正常的。我确实发现像制作像abs(y-Hx)这样的小矩阵的批处理操作。^ 2,你最好写一个小内核来为你做。