Ошибка выполнения UPC: размер вне диапазона для UPC_SHARED_HEAP_SIZE
Я пытался запустить код xcorupc_alaska
составлено на Berkeley UPC
upcrun -n 3 -shared-heap=18GB xcorupc_alaska inputpgas0.txt
Общий объем памяти на моем компьютере составляет 64 GB
и я хочу выделить 18 GB
в 3
Процессоры (это четырехъядерный процессор), поэтому это должно быть выполнимо (использование 18x3=54 GB
). Однако я получаю эту ошибку.
UPC Runtime error: out-of-range size for UPC_SHARED_HEAP_SIZE: 18 GB
NOTICE: Before reporting bugs, run with GASNET_BACKTRACE=1 in the environment to generate a backtrace.
UPC Runtime error: out-of-range size for UPC_SHARED_HEAP_SIZE: 18 GB
NOTICE: Before reporting bugs, run with GASNET_BACKTRACE=1 in the environment to generate a backtrace.
UPC Runtime error: out-of-range size for UPC_SHARED_HEAP_SIZE: 18 GB
NOTICE: Before reporting bugs, run with GASNET_BACKTRACE=1 in the environment to generate a backtrace.
Любая идея о том, что вызывает эту ошибку и как ее исправить? Спасибо за вашу помощь.
РЕДАКТИРОВАТЬ: даже для 64 bit
система, по умолчанию максимальная общая память на поток 16 GB
, Согласно информации в INSTALL.TXT
Перекомпилировал с флагом --with-sptr-packed-bits=20,9,35
, Это ограничивает максимальное количество возможных потоков 2^9
, но позволяет 2^16=32 GB
максимальная общая память на поток. Это решило мою проблему.
1 ответ
Наиболее распространенной причиной этой ошибки является то, что ваша сборка Berkeley UPC настроена для работы с 32-разрядными исполняемыми файлами приложений, которые не могут надежно обрабатывать более 2 ГБ общей кучи на процесс. Вы можете подтвердить это, проверив строку "Архитектура" в выходных данных этой команды:
upcrun -i xcorupc_alaska
(или поменяйте местами имя любого исполняемого файла BUPC)
Учитывая конфигурацию вашего оборудования, я бы настоятельно рекомендовал перекомпилировать Berkeley UPC для ABI LP64, предполагая, что ваша ОС поддерживает его (большинство современных ОС поддерживают).
Детали для этого зависят от вашего переводчика и компилятора. Предполагая, что вы используете стандартный онлайн-переводчик Berkeley UPC и gcc-подобный набор компиляторов, вам, вероятно, понадобится строка конфигурации, например:
$(srcdir)/configure CC='gcc -m64' CXX='g++ -m64' MPI_CC='mpicc -m64'
убедитесь, что вы запустили его в новой сборочной директории, чтобы начать с чистого листа. Затем соберите и установите как обычно (подробности в $(srcdir)/INSTALL.TXT
).