私は多くの厄介な 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 を更新できるようにするには?