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