【问题标题】:How to implement a program in openCL using MPI on a single cpu machine如何在单 cpu 机器上使用 MPI 在 openCL 中实现程序
【发布时间】:2012-01-16 18:02:58
【问题描述】:

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

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

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

这是我想做的项目提案

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

  • 研究 MPI 以解决问题

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

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

【问题讨论】:

  • 那么...您想使用 MPI 和 OpenCL 实现一些并行算法吗?您为应用程序设定的目标是什么?您想比较 MPI 和 OpenCL 的性能吗?
  • 不要为 Intel CPU 实现矩阵乘法。下载并使用 ATLAS、OpenBLAS(以前称为 GotoBLAS)、BLIS 或 Intel MKL 并调用 DGEMM。 BLAS 就像 Linux 一样,每个人都可以使用,但很少有人可以正常开发。

标签: mpi opencl parallel-processing


【解决方案1】:

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

当然,这不会那么容易,将两者结合起来需要相当多的工作,但这是要牢记的基本方法。从一个问题开始,让它在 C++ 中的单个处理器上运行,然后尝试其中一个。不要试图一次做所有的事情,否则你将一事无成。

对于矩阵乘法等问题,互联网上有很多 GPU 和 MPI 实现的示例可供学习。

【讨论】:

  • 非常感谢 :) 任何学习这些东西基础知识的链接都会有帮助
  • MPI标签下的FAQ有一些MPI资源的链接;我(当然)喜欢我们在我们中心教授的教程(support.scinet.utoronto.ca/wiki/index.php/…),但那里有很多。对于 OpenCL,我喜欢本教程 (marcusbannerman.co.uk/index.php/research/teaching-resources/…),但同样有一百万个可供选择。几乎所有的 OpenCL/CUDA 教程都会以矩阵乘法为例。
  • 根据我的项目需求的变化,我现在正在做中值滤波,虽然基础代码中值滤波和bitsonic排序是可用的,这是有风险的,因为我以后必须扩展代码,
  • 我在 openCL 中编写了用于计算平均过滤和模式的代码,以及图像的中值过滤... cl 文件为每个过滤器提供了三个内核...我不知道如何使用 MPI 执行此操作 .. 测量是最后一步,我对此一无所知..
【解决方案2】:

简化:

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

创建实例的任务,如果它们是相同或不同的工作人员,拓扑由您决定。

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

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

【讨论】:

  • 我可以在英特尔酷睿 i5 cpu 上运行 MPI 程序吗?
  • MPI是一个标准,你肯定可以用,但是你需要选择一个实现,比如OpenMPI
猜你喜欢
  • 1970-01-01
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 2016-08-21
  • 1970-01-01
  • 2022-01-17
  • 2020-06-01
相关资源
最近更新 更多