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

如何在单cpu机器上使用MPI在openCL中实现程序,mpi,opencl,parallel-processing,Mpi,Opencl,Parallel Processing,我是GPU编程新手,我的笔记本电脑没有显卡,我想在intel openCL上开发一个矩阵乘法程序,并使用MPI实现这个应用程序 可以发布任何指南和帮助完整链接 我对MPI的事情感到困惑,我们是必须为MPI编写代码,还是必须使用一些开发的MPI来运行我们的应用程序 这是我想做的项目提案 GPU集群计算(C++、OpenCL和MPI) 研究分布问题的MPI 在一台机器上实现OpenCL应用程序(矩阵乘法/2D图像处理) 使用MPI实现应用程序(例如大型2D图像处理) 简化: MPI是一个用于通信进

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

可以发布任何指南和帮助完整链接

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

这是我想做的项目提案

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

  • 研究分布问题的MPI

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

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

简化:

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

创建实例的任务(如果它们是相同或不同的辅助对象)以及拓扑由您决定

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

  • MPI启动(K+1)实例,一个主实例和K个从实例。主设备将数据分割成块,从设备使用OpenCL处理GPU中的数据。所有的奴隶都是一样的
  • MPI启动(k+1)实例,一个主实例和k个从实例。每个从机计算一个专门的问题(从机1矩阵乘法、从机2块压缩等),主机在工作流类任务中指导数据
  • MPI启动(k+1)实例,一个主实例和k个从实例。与第1种情况相同,但主程序也向从属程序发送OpenCL程序以处理数据
    所以需要理解的是,MPI和OpenCL对于您来说是完全正交的。MPI用于GPU节点之间的通信;OpenCL用于通过使用GPU(或多个CPU核)在单个节点上加速本地计算。对于任何这些问题,您可以从编写代码的系列C++版本开始。下一步将是(以任何顺序)为单个节点开发OpenCL实现,并开发MPI版本,该版本将问题(您不希望为上述任何问题使用主从)分解到多个进程上,每个进程都进行局部计算,这有助于获得全局解。一旦这两个部分都完成了,您就可以合并这两个部分,并拥有一个分布式内存(MPI部分)GPU(OpenCL部分)版本的代码来解决这个问题

    当然,这并不容易,将两者结合起来需要相当多的工作,但这是需要记住的基本方法。从一个问题开始,让它在C++中的一个处理器上工作,然后用一个或另一个来尝试。不要试图同时做每件事,否则你将一事无成


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

    。。。您想同时使用MPI和OpenCL实现一些并行算法吗。您为应用程序设定的目标是什么?是否要比较MPI和OpenCL的性能?不要为英特尔CPU实现矩阵乘法。下载并使用ATLAS、OpenBLAS(前身为GotoBLAS)、BLIS或Intel MKL,然后致电DGEMM。BLAS就像Linux一样,每个人都可以使用它,但很少有人能够正确开发。非常感谢:)任何了解这些基本知识的链接都会很有帮助MPI标签下的FAQ都有一些指向MPI资源的链接;我(当然)喜欢我们在中心教的教程,但还有很多。对于OpenCL,我喜欢本教程(),但同样有一百万种选择。几乎所有的OpenCL/CUDA教程都会以矩阵乘法为例。根据我的项目要求的变化,我现在正在做中值滤波,虽然可以使用带有bitsonic排序的基本代码中值滤波,但这是有风险的,因为我以后必须扩展代码,我已经在openCL中编写了用于计算图像的平均滤波和模式以及中值滤波的代码。。。cl文件有三个内核,每个筛选器一个。。。我不知道如何使用MPI实现这一点。。mearging是最后一步,我对此一无所知。我可以在intel core i5 cpu上运行MPI程序吗?MPI是一种标准,当然可以使用,但需要选择一种实现,如OpenMPI