繁体   English   中英

Matlab和GPU / CUDA编程

[英]Matlab and GPU/CUDA programming

我需要对同一数据集运行多个独立的分析。 具体来说,我需要运行一堆100 glm(广义线性模型)分析,并正在考虑利用我的视频卡(GTX580)。

当我可以使用Matlab和Parallel Computing Toolbox(并且我对C ++不太满意)时,我决定尝试一下。

我知道单个GLM不适用于并行计算,但是由于我需要并行运行100-200,因此我认为使用parfor可能是一种解决方案。

我的问题是我不清楚应该采用哪种方法。 我编写了matlab函数glmfit的gpuArray版本,但使用parfor相比标准的“ for”循环没有任何优势。

这与matlabpool设置有关吗? 我什至不清楚如何设置它以“查看” GPU卡。 默认情况下,如果我没有记错的话,它设置为CPU的内核数(在我的情况下为4)。 我在方法上完全错误吗?

任何建议将不胜感激。

编辑

谢谢。 我知道GPUmat和Jacket,无需费太多力气就可以开始用C编写代码,但是我正在为每个人都使用Matlab或R的部门测试GPU计算的可能性。最终目标是基于C2050的集群Matlab分发服务器(或者至少这是第一个项目)。 从MathWorks上阅读AD,我的印象是,即使没有C技能,并行计算也是可能的。 不可能要求我系的研究人员学习C语言,因此我猜测GPUmat和Jacket是更好的解决方案,即使局限性很大,并且不存在对glm等几种常用例程的支持。

它们如何与集群接口? 他们是否与某些工作分配系统一起工作?

我建议您尝试使用GPUMat (免费)或AccelerEyes Jacket (购买,但有免费试用版),而不是并行计算工具箱。 该工具箱没有太多功能。

为了获得最佳性能,您可能需要自己学习一些C语言(不需要C ++)和原始CUDA中的代码。 这些高级工具中的许多工具可能对它们如何管理内存传输还不够聪明(您可能会由于不必要地通过PCI-E总线改组数据而失去所有计算优势)。

Parfor将帮助您利用多个GPU,而不是单个GPU。 问题是单个GPU一次只能做一件事,因此parfor在单个GPU上或在单个GPU上的parfor将实现完全相同的效果(如您所见)。

Jacket往往效率更高,因为它可以组合多个操作并更有效地运行它们并具有更多功能,但是大多数部门已经具有并行计算工具箱,而不是Jacket,因此可能是一个问题。 您可以尝试演示进行检查。

没有使用gpumat的经验。

并行计算工具箱正在变得越来越好,您需要的是一些大型矩阵运算。 GPU善于多次执行同一操作,因此您需要以某种方式将代码组合到一个操作中,或者使每个操作足够大。 我们说的是至少并行需要约10000个事物,尽管它不是1e4矩阵的集合,而是一个至少包含1e4元素的大型矩阵。

我确实发现,使用并行计算工具箱,您仍然需要大量内联CUDA代码才能有效(它仍然很有限)。 它更好地使您可以内联内核并将Matlab代码转换为内核,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM