upc - UPC 运行时错误:UPC_SHARED_HEAP_SIZE 的大小超出范围
问题描述
我尝试运行xcorupc_alaska
编译的代码Berkeley UPC
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
,我用flag重新编译--with-sptr-packed-bits=20,9,35
。这将可能的最大线程数限制为2^9
,但允许2^16=32 GB
每个线程的最大共享内存。这解决了我的问题。
解决方案
导致此错误的最常见原因是您构建的 Berkeley UPC 配置为针对 32 位应用程序可执行文件,这些可执行文件无法可靠地处理每个进程超过 2GB 的共享堆。您可以通过检查此命令输出中的“架构”行来确认这一点:
upcrun -i xcorupc_alaska
(或交换任何 BUPC 可执行文件的名称)
鉴于您的硬件配置,我强烈建议您为 LP64 ABI 重建 Berkeley UPC,假设您的操作系统支持它(大多数现代操作系统都支持)。
执行此操作的详细信息取决于您的翻译器和编译器。假设您使用的是默认的在线 Berkeley UPC 翻译器和类似 gcc 的编译器套件,您可能需要如下配置行:
$(srcdir)/configure CC='gcc -m64' CXX='g++ -m64' MPI_CC='mpicc -m64'
确保在一个新的构建目录中运行它,以确保您从一个干净的状态开始。然后像往常一样构建和安装(详细信息见$(srcdir)/INSTALL.TXT
)。
推荐阅读
- razor - 使用 Cypress 在 Blazor 输入字段中键入文本不起作用
- jboss - jboss wildfly 17.0.1 - 静默身份验证质询文件的正确位置是什么?
- c# - 在 C# 中的 datagridview 中过滤数据
- vba - 找不到项目或库 - 无法选择参考选项和模块被冻结
- linux - 如何从数据文件的第二列中删除像 los30_9_ 这样的字符串?
- react-native - React Native FlatList 中的重叠项
- tensorflow - 当输入步骤可变时,RNN 中的损失函数不会下降
- batch-file - 显示默认打印机的属性和首选项
- c++ - 将 std::vector::data 传递给期望类型**(双指针)的函数
- javascript - Facebook 登录在 Andriod 中不起作用 Facebook 在应用浏览器中