MPI与OpenCL的结合?

MPI与OpenCL的结合?,opencl,mpi,Opencl,Mpi,在将应用程序划分为各种任务并将其转换为多线程环境时,我意识到基本上我的基本概念是错误的:OpenCL不适用于我需要在应用程序中执行的操作,而只适用于问题的数学部分 所以在这一点上,我想知道我是否可以使用MPI在不同的设备上启动n个线程,然后在设备有GPU的情况下启动OpenCL内核 这是常见的做法,还是使用MPI排除OCL,反之亦然 我的目标是在计算机上运行一个应用程序,并使用连接到它的任何设备(如果存在),以提高计算能力并共享任务。任务本身分为处理数字(非常适合OCL)、数据处理部分结果的OG

在将应用程序划分为各种任务并将其转换为多线程环境时,我意识到基本上我的基本概念是错误的:OpenCL不适用于我需要在应用程序中执行的操作,而只适用于问题的数学部分

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

这是常见的做法,还是使用MPI排除OCL,反之亦然

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

据我所知,MPI无法像OCL那样将线程寻址到GPU,但OCL的主要用途是数学运算,因此,如果我的应用程序需要访问网络来检索信息,或者需要使用OGL来绘制线程的结果,MPI将不会有任何好处;在这种情况下,最好的选择是MPI


任何关于可行方案的建议都将不胜感激。

这绝对是可行的(请参阅)。MPI真正做的就是生成程序的多个实例并处理它们之间的通信。它不关心在每个节点上本地执行哪些操作。例如,有一次我编写了一个MPI程序,其中主进程使用Qt来可视化它从工作人员那里接收到的数据。

MPI和OpenMP是HPC的一个相当标准的混合编程模型。使用MPI和OpenCL进行同样的操作没有实际或理论上的限制

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


一般来说,只要环境一致(相同的操作系统、相同的库版本、相同的体系结构等),将任何库与MPI一起用作多台机器上一组不同进程之间的协调语言是没有限制的。

谢谢您的消息;检查链接的问题,它有一些好的信息。所以,如果我做对了,我可以创建线程并将它们发送到各种设备,线程可以调用调用内核的函数来执行OCL代码?我可能会用C写所有的东西,这样它就可以工作了。我正在做一些和你做的相似的事情;我正在尝试使用通过MPI连接的所有内容,因此我不必为线程顺序而发疯,而是使用主机收集所有结果并将其可视化。知道它是可行的,我感觉好多了:)@newbiez:类似的,是的,但是“生成线程并将它们发送到各种设备”部分让我怀疑你对MPI的工作原理并不完全清楚
mpiexec
启动进程,而不是线程,每个进程都是整个程序的全新实例。但是,是的,在这些实例中,您可以启动OCL线程来使用本地资源。所以我猜我当时弄错了……我的期望是,我可以将我的应用程序划分为子系统,每个子系统可以发送到不同的单元(物理机),然后主机协调所有内容。因此,为了给出一个真实的案例场景,我将编写应用程序,以便OGL部分在一台机器上完成,数据在另一台机器上收集,计算分布在两台机器上,主机协调所有内容,确保OGL部分仅在返回计算结果后才完成。我完全偏离了MPI的轨道吗?@newbiez:不,这仍然是MPI的完美选择。但是,在MPI环境中没有专用的“主机”机器:所有进程除了其级别之外都是平等的,并且它们都在各自的机器上同时启动(或者说,两者都不保证在其他机器之前启动)。通常,MPI程序将首先查询自己的排名,并使用它来决定它所扮演的角色。因此,如果需要,您仍然可以拥有一个中央控制节点,但您必须手动协调工作。谷歌几个MPI示例程序/教程,一切都会变得清晰起来。:)谢谢你的洞察力。问题是我需要一个不一致的环境…我可能会将pc、mac或droid设备连接到主机,所以我需要一些不知道它在哪里运行的东西…这就是我选择OCL的原因。据我所知,MPI也是不可知的,因为它在抽象级别上工作,不关心具体细节,但我不能在GPU上使用它;因此,我尝试使用这两种方法。