При параллельном обновлении файла numpy.memmap существует ли способ только "сбрасывать" фрагмент, а не весь файл?

Мне пришлось сделать много неприятных операций ввода-вывода, и я решил использовать файлы с отображением в памяти с 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 ответов

Другие вопросы по тегам