背景我正在使用 mpi4py 并行运行一个 python 程序。
我在每个核心上分发文件,这样每个核心有1个文件(有2个核心);这只是一个测试场景。
每个核心现在运行一个程序“prog.exe”,大约需要 5 分钟才能完成。我使用 os.system(...) 并在调用之后立即使用 Barrier() (以防核心 i 在核心 j 之前完成)。
我已经测试了一些简单的 os.system(...) 调用(例如简单地回显某些东西)并且效果很好。
但是,prog.exe 是一个需要读取磁盘文件的程序。该文件在各个内核中是相同的。因此,当调用 os.system(...) 时, prog.exe 会读取文件,但它对两个内核都这样做。
问题 发生的情况是一个核心完成(它似乎总是我测试的根源)而另一个没有。
假设一核心打开文件(首先访问它),然后进行一些解析。然后,另一个核心进入文件,但是呜呜,它已经打开了,所以不能这样做。
潜在的解决方案因此,解决方案似乎是让每个核心将文件复制到自己的文件夹中。但是,内核可以并行复制文件,还是在复制过程中对文件设置了类似的锁?
社区问题
- 我的假设正确吗?程序因文件锁定而崩溃?
- 更一般地说,您如何处理内核共享相同数据文件的加载(似乎很常见)的这种情况?每个核心都复制文件吗?考虑到锁等可能吗?
进一步的思考 如果读取同一个文件没有问题,那么问题一定是我的prog.exe 有问题,但是在这种情况下,能否确认读取同一个文件是可以的。
谢谢