MPI与OpenCL一起使用?

时间:2012-10-31 01:19:53

标签: opencl mpi

在将我的应用程序分成各种任务并将其转换为多线程环境时,我已经意识到从根本上说我的基本概念是错误的:OpenCL不适合我需要在我的应用程序中执行的操作,但仅限于问题的数学部分。

所以在这一点上我想知道我是否可以使用MPI在不同的设备上启动n个线程,然后在设备有GPU的情况下启动OpenCL内核。

这是常见的事情,还是使用MPI排除OCL,反之亦然?

我的目标是在计算机上运行应用程序并使用连接到它的任何设备(如果存在),以增加计算能力并分享任务。任务本身分为处理数字(非常适合OCL),OGL呈现来自数据处理部分的结果,UI管理和交互以及数据管理(保存,存储,替换)。

根据我的理解,MPI无法像OCL那样将线程传递给GPU,但是OCL主要用于数学运算,所以如果我的应用程序需要访问网络来检索信息,它就不会有任何好处,或者如果需要使用OGL来绘制线程的结果;在这种情况下,最好的选择是MPI。

任何关于可行选择的建议都将得到更多的赞赏。

2 个答案:

答案 0 :(得分:5)

这绝对可行(见this question and answer)。所有MPI确实会产生程序的多个实例并处理它们之间的通信。它不关心在每个单独节点上本地执行什么操作。例如,有一次我写了一个MPI程序,其中主程序使用Qt来可视化从工人那里收到的数据。

答案 1 :(得分:5)

MPI和OpenMP是HPC的一种非常标准的混合编程模型。对MPI和OpenCL进行相同的操作没有实际或理论上的限制。

MPI可以处理进程之间的通信,而openCL处理GPU上的计算密集型部分。

通常,只要环境一致(相同的操作系统,相同的库版本,相同的架构等),将任何库与MPI一起用作多台机器上的一组不同进程之间的协调语言没有任何限制。 / p>