Questions tagged «mpi»

5
用户需要MPI C ++接口提供哪些功能?
MPI标准的3.0版本正式删除了C ++接口(先前已弃用)。尽管实现可能仍支持它,但MPI-3中的新功能没有MPI标准中定义的C ++接口。有关更多信息,请参阅http://blogs.cisco.com/performance/the-mpi-c-bindings-what-happened-and-why/。 从MPI中删除C ++接口的动机是,与C接口相比,它没有任何重要价值。除“ s / _ / :: / g”外,几乎没有区别,并且未使用C ++用户习惯的许多功能(例如,通过模板自动确定类型)。 作为参加MPI论坛并与许多实现了自己的MPI C函数C ++接口的C ++项目一起工作的人,我想知道MPI C ++接口的理想功能是什么。尽管我什么也不做,但我希望看到一个满足许多用户需求的独立MPI C ++接口的实现。 是的,我熟悉Boost :: MPI(http://www.boost.org/doc/libs/1_54_0/doc/html/mpi.html),但它仅支持MPI-1功能,并且序列化模型应为支持RMA极其困难。 我喜欢的一个MPI的C ++接口是Elemental(https://github.com/poulson/Elemental/blob/master/src/core/imports/mpi.cpp),所以也许人们可以提供一些专业知识方法。特别是,我认为MpiMap解决了一个基本问题。
28 c++  mpi 

3
并行I / O选项,尤其是并行HDF5
我有一个可以并行化的应用程序,但其性能在很大程度上受到I / O的限制。该应用程序读取存储在文件中的单个输入数组,该文件的大小通常为2-5 GB(但我希望这个数字将来会增长)。典型的计算将相同的操作应用于该数组的每一行或每一列。对于CPU繁重的操作,我可以很好地扩展到大约100个处理器,但是对于较慢的操作,I / O和相关的通信(NFS访问)占主导地位,并且我不能有效地使用几个以上的处理器。 在这种情况下,什么是有效且可移植的(理想情况下是高效的)选项?并行HDF5似乎很有希望。有没有人有现实生活中的经验? MPI-I / O是否值得研究?它可以在给定的文件布局下有效地工作,还是必须调整所有内容?

2
Boost :: mpi或C MPI用于高性能科学应用?
我最不喜欢MPI的一点是处理数据类型(即数据映射/掩码),因为它们与面向对象的C ++不太吻合。boost::mpi仅在其网站上支持MPI 1.1: boost :: mpi是标准消息传递接口的C ++友好接口……Boost.MPI可以使用Boost.Serialization库为用户定义的类型构建MPI数据类型。 有没有人boost::mpi对严肃的科学计算有任何经验?你会推荐吗?您是否遇到了任何问题(扩展问题,编译器问题,错误,未实现的功能,需要某些mpi 2.2功能)? 您能否评论使用boost::mpi而不是使用C ++中的MPI C实现?可以同时使用两者吗(可以的话,使用boost :: mpi,在其他地方使用C-MPI)? 您知道使用的任何大型科学代码boost::mpi吗?
16 hpc  c++  mpi 

1
如何在共享内存模式(如OpenMP)中运行MPI-3.0
我正在并行化代码以数字方式求解5维人口平衡模型。当前,我在FORTRAN中有一个很好的MPICH2并行化代码,但是随着我们增加参数值,数组变得太大而无法在分布式内存模式下运行。 我可以访问具有15个节点的群集,其中每个节点具有两个8个核心CPU和128GB RAM。我想在共享内存模式下以MPI-3.0编写运行程序,以便每个进程都不会生成每个数组的自己的副本。 在集群上运行任何东西之前,必须在运行Ubuntu的桌面上对其进行测试。它实质上是集群的一个刀片,因为它具有两个8个核心CPU和128 GB的RAM。我将在上面编写和测试我的代码,因此请针对在Ubuntu计算机上运行程序调整您的响应。 我已经读到有一种方法可以在共享内存模式(如OpenMP)而不是其默认的分布式内存模式下运行MPI-3.0。 问题: 我将如何更改我的代码?我是否需要添加对其他MPI函数的调用MPI_WIN_ALLOCATE? 如何编译我的代码以在共享内存模式下运行MPI-3.0?如果跨越多个节点,情况会有所不同吗? 请提供示例编译脚本。我也只有GNU编译器。我使用的群集不支持Intel编译器。

4
对与使用MPI的代码/库兼容的单元测试框架有何建议?
通常,我编写串行代码,然后编写,并使用一些xUnit风格的测试框架(MATLAB xUnit,PyUnit / nose或Google的C ++测试框架)编写单元测试。 基于对Google的粗略搜索,关于从业人员如何对使用MPI的测试代码进行单元化的知识很少。有什么最佳实践吗? 与单元测试和测试驱动的开发策略相比,我正在寻找与应该用于测试框架的软件有关的答案(如果存在的话,答案很可能是“编写自己的代码”),其中自定义测试代码的案例示例会很有帮助)。 我要测试的大部分内容都是用于右侧步进功能的评估以及用于时间步进器的Jacobian矩阵汇编例程,这些例程将集成半离散的PDE。我将使用PETSc,因此,如果有PETSc特定的内容,那么除了更通用的测试框架之外,这也将有所帮助。 澄清度编辑: 一个示例将在中${PETSC_DIR}/src/ts/examples/tutorials/ex2.c,在该示例中,我想测试类似的内容RHSFunction(右侧函数评估),然后RHSJacobian(雅可比矩阵评估)。我将针对组装好的右侧和组装好的Jacobian矩阵的已知值进行测试;对于一些简单的问题实例,我可以通过分析获得这些值。这些函数是特定于应用程序的函数,不会执行任何其他应用程序级函数,但是如果在函数内完成矢量或矩阵汇编,则可以调用MPI(如上面的链接PETSc示例中所示)。如果我编写的函数仅计算处理器局部的矢量或矩阵的部分,则我将尽可能对全局汇编版本进行测试,因为对于并行编程来说,这是我的第一次直观思考全局矢量和全局矩阵。这些测试将在较小的问题规模和少量的处理器上运行。 我可以想到一些实现此目的的策略: 根据我在该主题上所做的Google搜索,一种可能效果不佳的策略是构造一个已知的输出,并行找到相对/绝对误差,然后进行幼稚的比较。输出可能会出现乱码 -任何使用MPI编写“ Hello,world”程序的人都知道原因-这限制了进行单元测试的效用。(这是提出问题的动力。)在调用单元测试框架时,似乎还存在一些潜在的棘手问题。 写输出到文件(PETSc中,例如,使用VecView和MatView),和比较反对的东西,如已知的输出ndiff或numdiff。我从以前通过文件比较进行单元测试的经验中得到的这种方法的直觉是,它会很挑剔,并且需要进行一些过滤。但是,此方法似乎非常适合进行回归测试,因为我可以将上述实用程序替换为plain diff,而不必担心匹配文本格式。我已经收集到该策略或多或少是WolfgangBangerth和Andybauer所建议的。PETSc似乎也使用类似的方法进行某些测试。 使用单元测试框架,将所有信息收集到MPI等级为0的处理器上,并仅在处理器等级为0时要求它执行单元测试。我可以对规范做类似的事情(这种方式可能更容易),尽管需要权衡取舍就是返回的任何错误都会告诉我我的计算有问题,但是哪些元素没有错误。然后,我不必担心任何单元测试输出都会出现乱码。我只需要担心正确调用单元测试框架。当确切的解决方案可用时,PETSc似乎在其示例程序中使用基于规范的比较,但进行比较时,它不使用单元测试框架(也不必这样做)。

2
mpi_allgather操作的计算成本与收集/分散操作相比如何?
我正在研究一个可以通过使用单个mpi_allgather操作或一个mpi_scatter和一个mpi_gather操作来并行化的问题。这些操作在while循环内被调用,因此它们可能被多次调用。 在使用MPI_allgather方案的实现中,我正在将分布式矢量收集到所有进程中以进行重复矩阵求解。在另一种实现中,我将分布式矢量收集到单个处理器(根节点)上,在该处理器上求解线性系统,然后将求解矢量散布到所有进程中。 我很好奇的是,一次收集操作的成本是否比分散和收集操作的总和还要多。消息的长度是否在其复杂性中起重要作用?在mpi的实现之间是否有所不同? 编辑:

3
可视化事件数据以搜索性能问题的方式
我正在尝试使用高度异步的通信模式来优化MPI应用程序。每个等级都有要计算的事物的列表,如果输入或输出位于不同等级上,则根据需要发送消息。此外,每个级别都有线程(当前有一个通信线程和5个工作线程)。 我在代码的不同性能关键部分使用计时器来检测代码,这为我提供了每个线程的(开始,结束,类型)三元组列表。以明显的方式绘制,将时间作为水平轴,将等级和线程作为垂直,并用颜色表示每个线程当前正在执行的操作,我得到了这样的图像,其中有16个等级的线程,每个线程有6个线程: 我的问题是:还有什么其他可视化此数据的方式可以帮助解决性能问题?在对异步应用程序进行性能分析时,是否有人喜欢使用他们喜欢的绘图类型? 该数据集的局限性在于它不知道数据流的结构,但是在尝试收集更复杂的数据之前,我想从中获得尽可能多的洞察力。 如果有人要环顾四周(未通过正常路线上传),则此处为未压缩的图像。不幸的是,即使我相信它是有效的,Firefox也不会接受它,可能是因为它太大了。

2
超级计算的通讯开销
我正在寻找可靠的参考资料,以说明超级计算机在协调与完成与任务相关的实际工作中所花费的资源。资源可能具有可用的处理能力,但即使瓦特也似乎是有效的单位。 我相信我的一位教授或教科书曾说过,在大规模并行系统中,多达一半的可用处理能力用于协调任务和消息传递。不幸的是,我似乎找不到此参考文献或有关此比例的任何其他材料。 我意识到这将取决于超级计算机体系结构,并且在这方面现代实现可能会更有效率,因此,跨多个体系结构或演进(在专用消息传递硬件之前和之后)的该指标概述可能会更好。
10 hpc  mpi 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.