UPC Runtime error: out-of-range size for UPC_SHARED_HEAP_SIZE
UPC Runtime error: out-of-range size for UPC_SHARED_HEAP_SIZE
我尝试了 运行 在 Berkeley UPC
上编译的代码 xcorupc_alaska
upcrun -n 3 -shared-heap=18GB xcorupc_alaska inputpgas0.txt
我电脑上的总内存是 64 GB
,我想分配 18 GB
到 3
个 CPU(它是一个四核处理器),所以它应该是可行的(用法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
最大共享内存。这解决了我的问题。
导致此错误的最常见原因是您的 Berkeley UPC 版本配置为面向 32 位应用程序可执行文件,它不能可靠地处理每个进程超过 2GB 的共享堆。您可以通过检查此命令输出中的 "Architecture" 行来确认这一点:
upcrun -i xcorupc_alaska
(或交换任何 BUPC 可执行文件的名称)
鉴于您的硬件配置,我强烈建议为 LP64 ABI 重建 Berkeley UPC,假设您的 OS 支持它(大多数现代 OS 都支持)。
执行此操作的详细信息取决于您的翻译器和编译器。假设您正在使用默认的在线 Berkeley UPC 翻译器和类似 gcc 的编译器套件,您可能需要这样的配置行:
$(srcdir)/configure CC='gcc -m64' CXX='g++ -m64' MPI_CC='mpicc -m64'
确保 运行 在新的构建目录中进行此操作,以确保您从头开始。然后像往常一样构建和安装($(srcdir)/INSTALL.TXT
中的详细信息)。
我尝试了 运行 在 Berkeley UPC
xcorupc_alaska
upcrun -n 3 -shared-heap=18GB xcorupc_alaska inputpgas0.txt
我电脑上的总内存是 64 GB
,我想分配 18 GB
到 3
个 CPU(它是一个四核处理器),所以它应该是可行的(用法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
最大共享内存。这解决了我的问题。
导致此错误的最常见原因是您的 Berkeley UPC 版本配置为面向 32 位应用程序可执行文件,它不能可靠地处理每个进程超过 2GB 的共享堆。您可以通过检查此命令输出中的 "Architecture" 行来确认这一点:
upcrun -i xcorupc_alaska
(或交换任何 BUPC 可执行文件的名称)
鉴于您的硬件配置,我强烈建议为 LP64 ABI 重建 Berkeley UPC,假设您的 OS 支持它(大多数现代 OS 都支持)。
执行此操作的详细信息取决于您的翻译器和编译器。假设您正在使用默认的在线 Berkeley UPC 翻译器和类似 gcc 的编译器套件,您可能需要这样的配置行:
$(srcdir)/configure CC='gcc -m64' CXX='g++ -m64' MPI_CC='mpicc -m64'
确保 运行 在新的构建目录中进行此操作,以确保您从头开始。然后像往常一样构建和安装($(srcdir)/INSTALL.TXT
中的详细信息)。