使用gpu加速MATLAB代码



AccelerEyes于2012年12月宣布,它与Mathworks一起使用GPU代码,并已停止其MATLAB产品Jacket:

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

可惜他们不再卖茄克牌了。

据我了解,基于ArrayFire的Jacket GPU Array解决方案比MATLAB提供的gpuArray解决方案要快得多。

我开始使用gpuArray,但我看到许多函数实现得很差。例如一个简单的

myArray(:) = 0 

非常慢。我已经编写了一些自定义cuda - kernel,但是实现得很差的标准MATLAB功能增加了很多开销,即使在整个代码中始终使用gpuArrays。我通过用手写的CUDA代码替换MATLAB代码来修复一些问题-但我不想重新实现MATLAB标准功能。

我缺少的另一个特性是稀疏的GPU矩阵。

我的问题是:

如何加速MATLAB提供的糟糕实现的默认GPU实现?特别是,我如何加速稀疏矩阵操作在MATLAB中使用GPU?

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

并行计算工具箱功能

  • 用于在多处理器上运行任务并行算法的并行for循环(parfor)
  • 支持支持cuda的NVIDIA gpu
  • 通过本地运行的worker在桌面上充分使用多核处理器
  • 计算机集群和网格支持(使用MATLAB分布式计算服务器)
  • 并行应用程序的交互式和批处理执行
  • 分布式阵列和单程序多数据(spmd)构造用于大数据处理和数据并行算法

MATLAB GPU计算支持NVIDIA CUDA-Enabled GPU

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

可以通过并行计算工具箱在MATLAB中使用gpu,该工具箱支持:

  • 支持cuda的NVIDIA gpu ,计算能力2.0或更高。对于14a及更早的版本,1.3的计算能力就足够了。
  • GPU使用直接来自MATLAB
    • 支持gpu的MATLAB函数,如fft,滤波器和几个线性代数运算
    • 工具箱中支持GPU的功能:图像处理工具箱、通信系统工具箱、统计和机器学习工具箱、神经网络工具箱、相控阵系统工具箱和信号处理工具箱(了解更多关于GPU对信号处理算法的支持)
    • CUDA内核集成在MATLAB中的应用,只使用一行MATLAB代码
  • 桌面和计算机集群上使用并行计算工具箱和MATLAB分布式计算服务器中的MATLAB worker的多个gpu

我有幸参加了AccelerEyes的创始人John的演讲。他们没有得到加速,因为他们只是删除了写得不好的代码,并用在这里和那里节省一些比特的代码取而代之。它们的加速主要来自利用缓存的可用性和在内存(GPU)中执行大量操作。Matlab依赖于在GPU和CPU之间传输数据,如果我没记错的话,因此加速是疯狂的。

最新更新