使用GPU加速MATLAB代码?

AccelerEyes于2012年12月宣布,它将与Mathworks在GPU代码上合作,并已停止使用MATLAB的产品Jacket:

http://blog.accelereyes.com/blog/2012/12/12/exciting-updates-from-accelereyes/

不幸的是,他们不再销售Jacket许可证。

据我所知,基于ArrayFire的Jacket GPU Array解决scheme比由MATLAB提供的gpuArray解决scheme快得多。

我开始使用gpuArray,但是我发现许多函数执行得不好。 例如一个简单的

myArray(:) = 0 

很慢。 我写了一些定制的CUDA-Kernels,但是执行不力的标准MATLABfunction增加了很多开销,即使在整个代码中一直使用gpuArrays。 我通过用手工编写的CUDA代码replace了MATLAB代码来解决了一些问题 – 但我不想重新实现MATLAB标准function。

我缺less的另一个function是稀疏的GPUmatrix。

所以我的问题是:

如何加快由MATLAB提供的糟糕实现的默认GPU实现? 特别是,如何在使用GPU的MATLAB中加速稀疏matrix运算?

MATLAB确实支持基于CUDA的GPU。 您必须从“并行计算工具箱”访问它。 希望这两个链接也有帮助:

并行计算工具箱function

主要特征

  • 用于在多个处理器上运行任务并行algorithm的并行for循环(parfor)
  • 支持支持CUDA的NVIDIA GPU
  • 通过本地运行的工作人员在桌面上充分使用多核处理器
  • 计算机集群和网格支持(使用MATLAB分布式计算服务器)
  • 交互式和批量执行并行应用程序
  • 分布式数组和单一程序多数据(spmd)构造,用于大型数据集处理和数据并行algorithm

MATLAB GPU计算支持支持NVIDIA CUDA的GPU

使用MATLAB进行GPU计算,可以比使用C或Fortran更容易地使用GPU加速应用程序。 使用熟悉的MATLAB语言,您可以充分利用CUDA GPU计算技术,而无需了解GPU架构或低级GPU计算库的复杂性。

您可以使用GPU通过并行计算工具箱使用GPU,该工具箱支持:

  • 计算能力为2.0或更高的支持CUDA的NVIDIA GPU 。 对于版本14a和更早版本,计算能力1.3就足够了。
  • GPU直接使用MATLAB
    • 支持GPU的MATLAB函数 ,如fft,filter和几个线性代数运算
    • graphics处理工具箱,通信系统工具箱,统计和机器学习工具箱,neural network工具箱,相控阵系统工具箱和信号处理工具箱(了解GPU支持信号处理algorithm的更多信息)
    • CUDA内核集成在MATLAB应用程序中 ,只使用一行MATLAB代码
  • 并行计算工具箱和MATLAB分布式计算服务器上使用MATLAB 工作站的桌面和计算机集群上的多个GPU

我有幸参加了AccelerEyes创始人约翰的讲话。 他们没有得到加速,因为他们只是删除了写得不好的代码,并用代码保存了一些在这里和那里的代码。 他们的加速主要是利用caching的可用性,并在内存(GPU)上进行大量操作。 Matlab依靠在GPU和CPU之间传输数据,如果我没有记错的话,那么加速是疯狂的。

Interesting Posts