执行并行代码的顺序部分(大量操作和写入文件)的有效方法? 我有一个使用MPI的C++代码,并以顺序并行顺序模式执行。上述模式在时间循环中重复。 在用串行代码验证代码时,我可以减少并行部分的时间,事实上,这种减少几乎与处理器数量成线性关系

执行并行代码的顺序部分(大量操作和写入文件)的有效方法? 我有一个使用MPI的C++代码,并以顺序并行顺序模式执行。上述模式在时间循环中重复。 在用串行代码验证代码时,我可以减少并行部分的时间,事实上,这种减少几乎与处理器数量成线性关系,mpi,parallel-processing,Mpi,Parallel Processing,我面临的问题是,当使用更多处理器时,顺序部分所需的时间也会显著增加 与整个程序的总顺序时间相比,并行部分执行所需的时间更少 因此,尽管在使用更高数量的处理器时并行部分的时间减少了,但是由于在执行顺序部分时时间的增加,时间的节省损失很大。此外,顺序部分还包括在每个时间步进行大量计算,并在某个指定时间将数据写入输出文件 所有处理器在顺序部分执行期间运行,并行计算后数据收集到根处理器,仅允许根处理器写入文件 因此,有人能提出什么是计算并行代码的串行部分(大量操作+写入文件)的有效方法吗?如有需要,我也

我面临的问题是,当使用更多处理器时,顺序部分所需的时间也会显著增加

与整个程序的总顺序时间相比,并行部分执行所需的时间更少
因此,尽管在使用更高数量的处理器时并行部分的时间减少了,但是由于在执行顺序部分时时间的增加,时间的节省损失很大。此外,顺序部分还包括在每个时间步进行大量计算,并在某个指定时间将数据写入输出文件
所有处理器在顺序部分执行期间运行,并行计算后数据收集到根处理器,仅允许根处理器写入文件
因此,有人能提出什么是计算并行代码的串行部分(大量操作+写入文件)的有效方法吗?如有需要,我也想澄清其中任何一点


提前感谢。

首先,从单独的线程(或MPI术语中的进程)写入文件,以便其他线程可以使用您的内核进行计算

然后,检查为什么并行版本比顺序版本慢得多。这通常意味着您创建的任务太小,因此线程之间的通信(同步)会影响您的性能。思考任务是否可以组合成块,并并行处理完整的块

当然,还可以使用任何适合多线程环境的分析器

[编辑]

顺序部分=逻辑中不能(也不能)并行的部分,你的意思是相同的吗?多核上的顺序部分可以工作稍微慢一点,可能是因为OS dispatcher或类似的原因。奇怪的是,你们看到了明显的不同

磁盘本质上是连续的,因此从多个线程写入磁盘不会带来任何好处,但可能会导致多个线程同时尝试这样做,并等待彼此,而不是执行有用的操作

顺便问一下,您使用什么MPI实现


您的问题描述太高,请提供一些伪代码或类似的内容,这可以帮助我们帮助您

感谢Andy的回答,正如您正确猜测的那样,顺序部分确实包含大量的小任务(函数调用)。但在评估并行部分的时间时,我也考虑了并行开销(通信b/w线程)。但固有的顺序部分是随着处理器的增加而花费更多时间的部分。它不应该与具有1个处理器的顺序部分占用相同的时间吗?另外,你能解释一下你从不同的线程写东西的意思吗。组合这些块绝对是一个好建议,我们将对此进行研究。