Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CUDA和MATLAB在回路优化中的应用_Matlab_Performance_Cuda_Gpgpu - Fatal编程技术网

CUDA和MATLAB在回路优化中的应用

CUDA和MATLAB在回路优化中的应用,matlab,performance,cuda,gpgpu,Matlab,Performance,Cuda,Gpgpu,我将尝试使用CUDA优化一些用MATLAB编写的代码。我最近开始为CUDA编程,但我对它的工作原理有了一个大致的了解 假设我想把两个矩阵相加。在CUDA中,我可以编写一个算法,利用线程计算结果矩阵中每个元素的答案。然而,这种技术不可能与MATLAB已经做的类似吗?在这种情况下,效率不是独立于该技术,而只取决于硬件级别吗?该技术可能类似,但请记住,CUDA有数百个线程同时运行。如果MATLAB使用线程,并且这些线程在四核上运行,那么每个时钟周期只能执行4个线程,而在CUDA上使用相同的时钟周期可能

我将尝试使用CUDA优化一些用MATLAB编写的代码。我最近开始为CUDA编程,但我对它的工作原理有了一个大致的了解


假设我想把两个矩阵相加。在CUDA中,我可以编写一个算法,利用线程计算结果矩阵中每个元素的答案。然而,这种技术不可能与MATLAB已经做的类似吗?在这种情况下,效率不是独立于该技术,而只取决于硬件级别吗?

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


因此,为了回答您的问题,是的,本例中的效率与技术无关,并且仅归因于硬件。

答案是肯定的,所有效率都是硬件级别的。我不知道matlab是如何工作的,但CUDA的优点是可以同时执行多个线程,这与matlab不同


另一方面,如果您的问题很小,或者需要很多读写操作,CUDA可能只是一个额外的麻烦。

CUDA对matlab有官方支持

[需要链接]

您可以使用mex文件从MATLAB在GPU上运行


瓶颈是数据从CPU-RAM传输到GPU的速度。因此,如果将传输最小化并分块进行,则加速效果会非常好

对于简单的事情,最好在Matlab PCT中使用gpuArray支持。您可以在这里查看它


对于添加gpuarray、乘法、mins、max等,它们使用的实现往往是正常的。我确实发现,对于像abs(y-Hx)这样的小矩阵的批处理操作,^2,您最好编写一个小内核来为您实现这一点。

如果看到加速,我一点也不会感到惊讶-事实上,考虑到输入大小,期望它是值得开销的。但是,我的观点是,算法本身(即并行计算每个元素的加法)对加速没有贡献,与硬件无关。将MathWorks的解决方案与第三方工具和手工CUDA进行比较可能会很有趣。据推测,MATLAB在虚拟机级别使用多线程。