如何在单个cpu机器上使用MPI在openCL中实现程序

时间:2011-12-09 12:39:45

标签: mpi opencl parallel-processing

我是GPU编程的新手,我有没有显卡的笔记本电脑,我想在intel openCL上开发矩阵乘法程序,并使用MPI实现这个应用程序..

可以发布任何指南和有用的链接。

我对MPI的事情感到困惑,我们是否必须为MPI编写代码,或者我们是否必须使用一些开发的MPI来运行我们的应用程序?

这是我想做的项目提案

GPU集群计算(C ++,OpenCL和MPI)

  • 研究MPI以解决问题

  • 在一台机器上实施OpenCL应用程序(矩阵乘法/二维图像处理)

  • 使用MPI实施应用程序(例如大型2D图像处理)

2 个答案:

答案 0 :(得分:8)

所以要理解的是,MPI和OpenCL用于您的目的是完全正交的。 MPI用于GPU节点之间的通信; OpenCL用于通过使用GPU(或多个CPU内核)加速单个节点上的本地计算。对于任何这些问题,您首先要编写代码的串行C ++版本。下一步是(以任何顺序)处理单个节点的OpenCL实现,并处理分解问题的MPI版本(想要用户主从任何上面列出的问题)到多个进程,每个进程执行其计算的本地部分,这有助于全局解决方案。完成这两个部分后,您将合并这两个部分,并使用分布式内存(MPI部分)GPU(OpenCL部分)版本的代码来解决此问题。

当然,这并不是那么容易,将两者结合起来会花费相当多的工作,但这是记住的基本方法。从一个问题开始,让它在C ++中的单个处理器上运行,然后尝试使用其中一个。不要试图一次完成所有事情,否则你永远无法到达任何地方。

对于像矩阵乘法这样的问题,互联网上有许多GPU和MPI实现的例子可供学习。

答案 1 :(得分:2)

简化:

MPI是一个用于通信过程的库,也是一个在集群中运行应用程序的平台。您编写了一个使用MPI库的程序,然后该程序应该使用MPI执行。 MPI在集群中将该应用程序分叉N次,并允许将该应用程序实例与消息进行通信。

制作实例的任务(如果它们是相同或不同的工作人员)和拓扑结构取决于您。

我认为有三种使用方法(OpenCL和MPI):

  1. MPI启动(K + 1)个实例,一个主服务器和K个从服务器。主设备将数据拆分为块,从设备使用OpenCL处理GPUS中的数据。所有的奴隶都是一样的。
  2. MPI启动(k + 1)个实例,一个主设备和k个从设备。每个从站计算一个专门的问题(从站1矩阵乘法,从站2块压缩,等等),主站将数据指向工作流类型的任务。
  3. MPI启动(k + 1)个实例,一个主设备和k个从设备。与案例1相同,但主设备还向从设备发送OpenCL程序以处理数据。