3

我必须做很多讨厌的 i/o,并且我选择使用带有 numpy 的内存映射文件......在经历了很多头痛之后,我意识到当一个进程“刷新”到磁盘时,它通常会覆盖其他进程正在尝试的内容用旧数据写入...我知道使用 mmap 包您可以只将一个块写入磁盘。我会使用 mmap 但因为我的数据由零和非常小的数字混合组成,所以很难弄清楚它们作为字符串有多少字节以及哪个处理器“拥有”哪个块。

有没有办法执行以下操作:

size = comm.Get_size()
rank = comm.Get_rank()
f = open('largedatafile','w').close()
if int(rank) == 0:
    matrix = numpy.zeros(size)
    fp = numpy.memmap('largedatafile',dtype='float32',mode='r+',shape=(size))
    fp[:] = matrix[:]
    fp.flush()


fp = numpy.memmap('largedatafile',dtype='float32',mode='r+',shape=(size))
fp[rank] = numpy.random.randn() #this is a dummy task
fp.flush([rank]) #or fp[rank].flush()

这样每个处理器都可以同时更新 mmap 而无需将旧零刷新回新数据?

4

0 回答 0