MPI_Reduce: невозможно выделить байты для временного буфера - PullRequest
0 голосов
/ 07 октября 2019

Я получаю странную ошибку памяти от реализации Cray MPI_Reduce. Я использую MPI_Reduce, чтобы собрать определяемую пользователем структуру из всех моих процессов и получить минимум, определенный пользовательской функцией минимизации. Это прекрасно работает до определенного момента, но когда оно достигает определенного количества структур, оно выдает мне эту ошибку (из нескольких процессов):

Rank 445 [Thu Oct  3 11:46:50 2019] [c3-1c2s7n0] Fatal error in PMPI_Reduce: Other MPI error, error stack:
PMPI_Reduce(1394)........: MPI_Reduce(sbuf=0x1003e60d600, rbuf=(nil), count=12582912, dtype=USER<struct>, op=0x98000001, root=1024, MPI_COMM_WORLD) failed
MPIR_Reduce_impl(1200)...:
MPIR_Reduce_intra(893)...:
MPIR_Reduce_impl(1200)...:
MPIR_Reduce_intra(996)...:
MPIR_Reduce_binomial(137): Unable to allocate 1207959552 bytes of memory for temporary buffer (probably out of memory)

Это имело бы смысл, если бы ябыло на самом деле нехватка памяти, но я запускаю это не более 22 процессов на узел на вычислительных узлах с 128 ГБ памяти. Я проверил использование памяти непосредственно перед вызовом Reduce с помощью отладчика, и у меня есть около 100 ГБ для каждого набора из 22 процессов, выполняющих этот вызов. Это должно легко соответствовать ~ 26 ГБ, требуемым для выделения «временного буфера» для 22 процессов. Кто-нибудь знает, какой объем памяти требуется MPI_Reduce? Может ли это быть вызвано чем-то другим, кроме моего узла не хватает памяти? Будем весьма благодарны за любые указания относительно источника этой проблемы.

Заранее спасибо!

...