问题标签 [mpi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mpi - MPI_Request 在 MPI 进程中是全局的吗?
如果我声明一个 MPI_Request 表(每个 CPU 一个请求),则在用于 MPI_Isend/MPI_Irecv 时将可以全局访问它?(与初始化 MPI 环境后随处可访问的 MPI_comm 相比)
谢谢。
distributed - 最近没有关于 MPI 的书籍:它快死了吗?
我从未使用过消息传递接口 (MPI),但我听说过它的名字,最近一次是使用 Windows HPC Server。我快速浏览了亚马逊,看看是否有任何书籍,但它们的日期都是大约 7 年或更长时间。MPI 是否仍然是新应用程序的有效技术选择,还是已在很大程度上被其他分布式编程替代方案(例如 DataSynapse GridServer)取代?
由于它不是真正的实现,而是一个标准,学习它会导致更好的分布式编程系统设计的可能性有多大(假设它没有死)?还有什么我应该看的吗?
mpi - 将 strace 与 mpiexec 一起使用
如何从 mpiexec (MPICH2, linux) 开始跟踪 MPI 并行作业的所有进程?
-o
会弄乱不同进程的输出
PS 致一些编辑:谁可能会这么认为MPICH is the name of the library. MPICH2 is a particular version.
。MPICH2 实际上是MPICH2 is an all-new implementation of MPI
,我有时不得不同时使用 mpich 和 mpich2。所以,我们不能用 mpich 代替 mpich2。
.net - .net 4.0 任务并行库与 MPI.NET
.net 4.0 任务并行库是否会取代 MPI.NET 进行高性能计算?
MPI.NET 在这里http://www.osl.iu.edu/research/mpi.net/svn/是用于 Microsoft .NET 环境的消息传递接口 (MPI) 的高性能、易于使用的实现. MPI 是编写在分布式内存系统(例如计算集群)上运行的并行程序的事实标准。
.NET 4 TPL 说:“任务并行库 (TPL) 是 .NET Framework 版本 4 中 System.Threading 和 System.Threading.Tasks 命名空间中的一组公共类型和 API。TPL 的目的是使通过简化向应用程序添加并行性和并发性的过程来提高开发人员的工作效率。TPL 动态扩展并发度以最有效地使用所有可用的处理器。此外,TPL 处理工作的分区,线程的调度关于线程池、取消支持、状态管理和其他低级细节。通过使用 TPL,您可以最大限度地提高代码的性能,同时专注于您的程序旨在完成的工作。
我的目标是构建一个可以在 Windows HPC 2008 上运行的应用程序 ……走哪条路?
c - 在 C 中使用 MPI_Type_Vector 和 MPI_Gather
我正在尝试将平方矩阵与 MPI 并行相乘。
我使用 MPI_Type_vector 将方形子矩阵(浮点数组)发送到进程,以便它们可以计算子产品。然后,对于下一次迭代,这些子矩阵作为 MPI_Type_contiguous 发送到相邻进程(发送整个子矩阵)。这部分按预期工作,并且本地结果是正确的。
然后,我使用 MPI_Gather 和连续类型将所有本地结果发送回根进程。问题是,最终的矩阵是逐行构建的(显然,通过这种方法),而不是逐个子矩阵。
我写了一个丑陋的程序来重新排列最终的矩阵,但我想知道是否有一种直接的方式来执行发送 MPI_Type_vectors 的“逆”操作(即,发送一个值数组并直接以子数组形式排列在接收阵列)。
一个例子,试图澄清我的长文本:
A[16] 和 B[16]
这些确实是二维数组,A[4][4] 和 B[4][4]。
是要相乘的 4x4 矩阵;C[4][4] 将包含结果;使用了 4 个进程(Pi 和 i 从 0 到 3):
Pi 得到两个 2x2 子矩阵: subAi[4] 和 subBi[4] ;他们的产品本地存储在 subCi[4] 中。
例如,P0 得到:
subA0[4] 包含 A[0]、A[1]、A[4] 和 A[5] ;
subB0[4] 包含 B[0]、B[1]、B[4] 和 B[5]。
计算完所有内容后,根进程收集所有 subCi[4]。
然后 C[4][4] 包含:
[
subC 0 [0], subC 0 [1], subC 0 [2], subC 0 [3],
subC1[0], subC1[1], subC1[2], subC1[3],
subC2[0], subC2[1]、subC2[2]、subC2[3]、
subC3[0]、subC3[1]、subC3[2]、subC3[3]]
我希望它是:
[
subC 0 [0], subC 0 [1], subC1[0], subC1[1],
subC 0 [2], subC 0 [3], subC1[2], subC1[3],
subC2[0], subC2[1]、subC3[0]、subC3[1]、
subC2[2]、subC2[3]、subC3[2]、subC3[3]]
无需进一步操作。有人知道方法吗?
感谢您的建议。
添加信息以回答“高性能标记”:
1 好吧,我的初始矩阵是二维数组(形状为 A[4][4])。我想在写我的问题时让它简短,我现在看到这是一个坏主意......
我确实定义了 MPI_Type_vector 如下,例如:
(顺便说一句,我看不出扁平数组有什么不同)。
2 我不是 MPI 方面的专家,远非 MPI,所以我可能会做一些奇怪的事情。这是我的一些代码,应用于示例(仅处理 A,B 非常相似):
从根向从属进程发送子矩阵:
奴隶收到:
然后,进程之间的交换通过 subMatrixLocal 的 MPI_Send 和 MPI_Recv 完成,即:
完成所有本地操作后,我将所有 subC 矩阵收集到 C 中:
我得到了前面提到的结果,我必须重新排序......
关于您提出的算法:下一步将是使用 GPU 进行矩阵乘法,其中方阵产品是有效的。MPI 将仅用于将矩阵从 CPU 传输到 CPU。当然,届时将考验全球效率。
0 你说“相同的类型定义应该适用于反向操作”。但是,我的 MPI_Vector_type 在“大”矩阵上运行良好,但无法直接在子矩阵上使用它(在 2x2 矩阵上应用 MPI_Vector_type(2, 2, 4) 会产生错误的结果,因为它需要最后两个值“在”定义的数组“之外”......)。你的意思是我应该创建另一个 MPI_Vector_type 并发送/接收它?
c - MPI 超立方体广播错误
我有一个使用 MPI 编写的超立方体的一对多广播方法:
从 main 调用它时:
在 8 个节点上编译和执行,我收到一系列错误报告,报告进程 1、3、5、7 在接收任何数据之前停止:
我哪里错了?
c++ - 用 MPI_Wtime() 替换对 clock() 的调用后立即崩溃
我有一个在本地计算机上开发的 MPI 程序,但需要在远程计算机上运行。我曾经clock()
测量时间,但在发现它在远程机器上运行得不够好(由于完全不同的架构)之后,我替换了一些对clock()
with的调用MPI_Wtime()
,这产生了所需的结果。该程序仍然在本地和远程机器上运行。
但是,我只是将所有其他调用替换为clock()
,MPI_Wtime()
现在在本地计算机上启动程序会立即导致进程停止,退出代码为 -1073741819。即使我将 acout
放在 的第一行main()
,也没有输出,所以我很确定这不是我的编程错误,但我不知道出了什么问题。
源代码的更改如何导致程序在更改的代码(或任何代码,就此而言)执行之前失败?
parallel-processing - MPI 大数据全对全传输
我的 MPI 应用程序有一些生成一些大数据的过程。假设我们有 N+1 个进程(一个用于主控,其他是工作进程),每个工作进程都会生成大数据,现在只是写入普通文件,命名为 file1,file2,...,fileN。每个文件的大小可能完全不同。现在我需要将所有文件 M 发送到排名 M 进程以完成下一项工作,所以这就像所有数据传输一样。
我的问题是我应该如何使用 MPI API 有效地发送这些文件?我以前使用Windows共享文件夹来传输这些,但我认为这不是一个好主意。
我考虑过 MPI_file 和 MPI_All_to_all,但这些函数似乎不太适合我的情况。简单的 MPI_Send 和 MPI_Recv 似乎很难使用,因为每个进程都需要传输大数据,我暂时不想使用分布式文件系统。
c++ - 可以在 Internet 上而不是在 LAN 集群内分发 MPI (C++) 程序吗?
我编写了一些在大型集群上完美运行的 MPI 代码。集群中的每个节点都具有相同的 cpu 架构,并且可以访问网络(即“通用”)文件系统(以便每个节点都可以执行实际的二进制文件)。但考虑这种情况:
- 我办公室里有一台带有双核处理器(英特尔)的机器。
- 我家里有一台带有双核处理器(amd)的机器。
两台机器都运行linux,两台机器都可以在本地成功编译和运行MPI代码(即使用2核)。
现在,是否可以通过 MPI 将两台机器链接在一起,以便我可以利用所有 4 个内核,同时牢记不同的架构,并牢记没有共享(网络)文件系统的事实?
如果是这样,怎么做?
谢谢,本。
distributed - MPI(或其他)中任务分配的库?
我希望在集群上实现“分支和绑定”(就像亚马逊所说的那样),因为我希望它能够水平扩展,而不仅限于单个 CPU。Judith Hippold 和 Gudula Runger 有一篇论文“Task Pool Teams: A Hybrid Programming Environment for Irregular Algorithms on SMP Clusters”。它基本上是一个自下而上的任务窃取框架,类似于英特尔的 TBB,除了 ad-hoc 网络而不是共享内存。如果这个库可用,我会使用它(用 TBB 替换本地的螺纹部分)。不幸的是,他们似乎没有在我能找到的任何地方下载它,所以我想知道那里有其他实现或类似的库吗?
看起来微软的任务并行库也没有类似的东西可以窃取。
(我试图在'threadpool'之后制作一个标签'taskpool',这是最常用的变体(在'thread-pool'之前)但是没有足够的分数。任何足够重的人认为值得添加?)
编辑:
我还没有尝试过,但它 PEBBL(在这里:software.sandia.gov/trac/acro/wiki/Packages)声称可以扩展非常高。回答者从 El-Ghazali Talbi 编辑的 2006 年“Parallel Combinatorial Optimization”中的 Wiley 书籍“Parallel Branch-and-Bound Algorithms”,Crainic,Le Cun 和 Roucairol,2006 年提到的论文是我找到它的地方,并且列出了其他库;有些可能会更好,我保留更新此内容的权利:)。有趣的是谷歌没有找到这些库,要么我的谷歌搜索很弱,要么谷歌本身有时并不神奇。