MATLAB 并行计算工具箱 - 并行化与 GPU?
Posted
技术标签:
【中文标题】MATLAB 并行计算工具箱 - 并行化与 GPU?【英文标题】:MATLAB Parallel Computing Toolbox - Parallelization vs GPU? 【发布时间】:2011-11-23 01:23:25 【问题描述】:我正在与拥有一些他们想要加速的 MATLAB 代码的人合作。他们目前正试图将所有这些代码转换为 CUDA 以使其在 CPU 上运行。我认为使用 MATLAB 的并行计算工具箱来加快速度会更快,并在具有 MATLAB 的分布式计算工具箱的集群上运行它,允许我在多个不同的工作节点上运行它。现在,作为并行计算工具箱的一部分,您可以使用things like GPUArray。但是,我对这将如何工作感到困惑。使用 parfor(并行化)和 gpuarray(gpu 编程)之类的东西是否相互兼容?我可以同时使用吗?是否可以在不同的工作节点(并行化)之间拆分某些东西,同时还可以利用每个工作节点上可用的任何 GPU?
他们认为仍然值得探索将所有 matlab 代码转换为 cuda 代码以在具有多个 GPU 的机器上运行所需的时间......但我认为正确的方法是使用 MATLAB 中已经内置的功能.
非常感谢任何帮助、建议和指导!
谢谢!
【问题讨论】:
您可以考虑为此尝试使用 Jacket 而不是 gpuArrays。我没有听说有人对 gpuArrays 的性能感到满意,原因如下:accelereyes.com/compare 【参考方案1】:如果您使用 CUDA 编写它,则可以保证在芯片级并行运行,而不是使用 MATLAB 对非并行架构的最佳猜测,并尽最大努力使其并行运行。
有点像喝新鲜的山水径流而不是购买过滤水。选择最纯粹的解决方案。
【讨论】:
【参考方案2】:当您使用 parfor 时,您实际上是在将 for 循环划分为多个任务,每次循环迭代一个任务,并将这些任务拆分为由多个 worker 并行计算,其中每个 worker 都可以被视为一个 MATLAB 会话,而无需交互式图形用户界面。您将集群配置为在集群的每个节点上运行指定数量的工作程序(通常,您会选择运行的工作程序数量等于该节点上可用处理器核心的数量)。
另一方面,gpuarray 向 MATLAB 表明您想让一个矩阵可供 GPU 处理。在底层,MATLAB 将数据从主存储器编组到图形板的内部存储器。某些 MATLAB 函数(文档中有它们的列表)可以在 gpuarrays 上运行,并且计算发生在 GPU 上。
这两种技术的主要区别在于 parfor 计算发生在集群节点的 CPU 上,可以直接访问主内存。 CPU 内核通常具有较高的时钟频率,但 CPU 集群中的 CPU 内核数量通常少于 GPU 内核的数量。单独而言,GPU 内核比典型的 CPU 内核慢,并且它们的使用需要将数据从主内存传输到视频内存并再次返回,但集群中的数量更多。据我所知,混合方法应该是可能的,其中您有一组 PC,每台 PC 都有一个或多个 Nvidia Tesla 板,并且您同时使用 parfor 循环和 gpuarrays。但是,我还没有机会尝试这个。
【讨论】:
【参考方案3】:如果您主要对模拟感兴趣,GPU 处理是完美的选择。但是,如果您想分析(大)数据,请使用并行化。这样做的原因是,如果您不必来回复制数据,GPU 处理只会比 cpu 处理快。在模拟的情况下,您可以在 GPU 上生成大部分数据,只需将结果复制回来。如果您尝试在 GPU 上处理更大的数据,您经常会遇到内存不足的问题。 如果您的计算机 CPU 中有大数据结构和 2 个以上的内核,则并行化非常好。
【讨论】:
以上是关于MATLAB 并行计算工具箱 - 并行化与 GPU?的主要内容,如果未能解决你的问题,请参考以下文章
Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_并行运算-利用GPU并行执行MATLAB程序
通信算法之六十五:Matlab多线程处理与并行处理 多核与GPU