Ошибка выполнения 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 максимальное количество разделяемой памяти на поток. Это решило мою проблему.


upc
person Guddu    schedule 14.06.2018    source источник


Ответы (1)


Наиболее распространенная причина этой ошибки заключается в том, что ваша сборка Berkeley UPC настроена на выполнение 32-разрядных исполняемых файлов приложений, которые не могут надежно обрабатывать более 2 ГБ общей кучи на процесс. Вы можете подтвердить это, проверив строку «Архитектура» в выводе этой команды:

upcrun -i xcorupc_alaska (или заменить имя любого исполняемого файла BUPC)

Учитывая конфигурацию вашего оборудования, я настоятельно рекомендую перестроить Berkeley UPC для LP64 ABI, при условии, что ваша ОС поддерживает его (большинство современных ОС поддерживают).

Детали для этого зависят от вашего переводчика и компилятора. Предполагая, что вы используете онлайн-транслятор Berkeley UPC по умолчанию и набор компиляторов, похожий на gcc, вам, вероятно, нужна строка конфигурации, похожая на:

$(srcdir)/configure CC='gcc -m64' CXX='g++ -m64' MPI_CC='mpicc -m64'

обязательно запустите это в новом каталоге сборки, чтобы убедиться, что вы начинаете с чистого листа. Затем соберите и установите как обычно (подробности в $(srcdir)/INSTALL.TXT).

person Dan Bonachea    schedule 15.06.2018
comment
Спасибо. Я пробовал upcrun -i. Моя архитектура была 64 bit x86_64-apple-darwin16.7.0. Я пробовал ваши флаги, но они все равно не работали. Итак, я перечитал файл INSTALL.TXT. Оказывается, даже для системы 64-bit максимальная разделяемая память на поток равна 16 GB. Поэтому я перекомпилировал свой Berkeley UPC с флагом --with-sptr-packed-bits=20,9,35. Это ограничивает максимальное количество потоков до 2^9, но разрешает 2^35 = 32 GB разделяемой памяти на поток. Теперь мой код работает. - person Guddu; 16.06.2018