Я испытываю некоторые затруднения из-за кода, который я параллелизировал. Код написан в Fortran90, и я параллелизировал его с помощью mpi. Я не буду отправлять код потому что его больше чем 10 тысяч строк долго.
Однако пытаясь работать над более прекрасной сеткой, я начал иметь эту ошибку:
Operating system error: Cannot allocate memory
Allocation would exceed memory limit
-------------------------------------------------------
Primary job terminated normally, but 1 process returned
a non-zero exit code.. Per user-direction, the job has been aborted.
-------------------------------------------------------
--------------------------------------------------------------------------
mpiexec detected that one or more processes exited with non-zero status, thus causing
the job to be terminated. The first process to do so was:
Process name: [[28926,1],0]
Exit code: 1*
У меня есть 16 ГБ RAM, и я думаю, что превышаю 4 ГБ, не очень, но было бы похоже, будет ли предел вокруг этого. Должно быть много пространства. Я раньше имел подобную проблему в FORTRAN77 (я первоначально написал код в F77 и затем передал его Fortran90). Я раньше решал его с помощью флага -mcmodel=large
. Однако это не работает теперь.
Кроме того, что-то странно, потому что, если я выполняю только один процесс для данной сетки, он даст эту ошибку на выделении памяти. Но если я выполняю его в, позволяет, говорят, 8 процессов, ошибки не происходит. Это походит на предел "перемещения" с количеством процессов. Когда я выполняю больше процессов, массивы меньше в каждом процессе, но общий объем выделенной памяти должен быть больше, чем только с одним процессом.
Здесь Вы видите мой терминал, ошибку и вершину, в то время как код работает
Какая-либо идея того, что могло бы продолжаться?
Спасибо вам обоим. Я нашел причину, почему я выделял огромный объем памяти. Все было правильно, я просто забыл, что выделял огромный массив, который я должен сделать что-то еще в другой версии кода.
Спасибо.