MPI 协调作业和写入文件

MPI coordination of jobs and writing to files

我刚刚开始将 OpenMPI 与 python 结合使用。我 运行 使用不同输入(例如 300 个)的相同任务,每个任务有几百次。结果彼此独立,每个进程将其最终答案打印到文件中,因此进程之间确实不需要相互通信。但是,开始新的迭代需要完成前一个迭代的所有过程。

我有两个问题。第一个很简单,我认为答案是肯定的,但如果有人能给我一些建议,告诉我该读什么,那就太好了。写入文件时,进程不会冲突,对吧? (是否有内置锁定机制?)

我的其他问题是,如果其中一个进程完成时间太长(与执行相同任务的其他进程相比太长,可能是其 2 或 3 倍)并且由于一些,程序的继续执行被阻止了?有什么方法可以让我跟踪进程已经持续了多长时间 运行,如果它超过了特定的时间限制,我可以终止它吗?

如果有人能指出正确的方向,我将不胜感激。

写入文件时,可以(经常)进行一些协调或序列化,但不是在应用程序级别。这些内核级隐式锁不是应用程序可以请求的,但会对性能产生很大影响。

考虑这种情况

"A writes 500 bytes at offset 0. B writes 500 bytes at offset 1000"

这些写入可能同时发生——但很大程度上取决于底层文件系统。 GPFS 和 Lustre 具有在块 (GPFS) 或页面 (Lustre) 上运行的锁定协议。 A 和 B 都会尝试获取锁。一个将成功并立即继续,另一个将在 A 完成后才继续。

这里有很多,所以我要引用你问题的一些部分,一步一个脚印。

I'm running the same task with different inputs (like 300 of them) a few hundred times each.

如果可以的话,只启动 N 个进程一次,并在开始时给每个进程 M 个输入会更有效率。不要启动 N 个进程 M 次。

The results are independent of each other and each process prints its final answer to a file, so there really is no need for processes to communicate with each other.

那么实际上 MPI 可能对您没有用处。重点是沟通,所以如果你不这样做,那是完全没有必要的。

However, starting a new iteration requires all processes from the previous one being complete.

哦,这就是沟通,不是吗?所以换句话说,你的模式是:

N个作业处理N个输入,等待全部完成,重复M次。

但大概 M 次迭代中的每一次的每个输入都取决于前一次迭代,因为你说前一次迭代必须在开始下一次迭代之前完成。所以这就是更多的沟通!所以你的模式是:

N 个作业处理 N 个输入,等待所有输入完成,然后计算下一组 N 个输入,重复 M 次。

When writing to a file, processes won't conflict, right? (is there a built in lock mechanism?)

没错。如果两个进程写入同一文件的不同区域,则不会发生冲突。可能会有性能损失,但这仅在您编写很多内容时才重要。您还可以在 "append" 模式下打开文件,在这种情况下,任何高达几千字节的单次写入都是原子的,这也可能适用于某些用例。如果您需要写入大量数据,最好从每个进程写入一个单独的文件。

What if one of the processes is taking too long to complete (too long in comparison to the other processes that were doing the same task, so maybe 2 or 3 times as long) and because of a few, the continuing execution of the program is being held back? Is there some way that I can keep track of how long a process has been running and if it goes past a specific time limit, can I terminate it?

你不应该这样做,因为相同的输入稍后会被另一个进程缓慢处理。除非你认为输入可能有问题,在这种情况下,每个进程都应该保留自己的内部计时器,如果超过预定限制就放弃。