我不得不做很多讨厌的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,而不必在新数据上刷新旧的0?在
目前没有回答
相关问题 更多 >
编程相关推荐