我正在尝试在32节点集群上运行NAS-UPC基准测试。
在问题规模较小的情况下,它可以正常工作。当我毕业到更大的问题规模(CLASS D)时,我得到了这个错误(对于MG基准)
*** Caught a fatal signal: SIGBUS(7) on node 2/32
p4_error: latest msg from perror: Bad file descriptor
*** Caught a signal: SIGPIPE(13) on node 0/32
p4_error: latest msg from perror: Bad file descriptor
p4_error: latest msg from perror: Bad file descriptor
*** FATAL ERROR: recursion failure in AMMPI_SPMDExit
*** Caught a signal: SIGPIPE(13) on node 27/32
*** Caught a signal: SIGPIPE(13) on node 20/32
*** Caught a signal: SIGPIPE(13) on node 21/32
p4_error: latest msg from perror: Bad file descriptor
*** FATAL ERROR: recursion failure in AMMPI_SPMDExit
*** FATAL ERROR: recursion failure in AMMPI_SPMDExit
*** FATAL ERROR: recursion failure in AMMPI_SPMDExit
*** Caught a signal: SIGPIPE(13) on node 16/32
*** FATAL ERROR: recursion failure in AMMPI_SPMDExit
任何人都可以解释为什么会发生这种情况,如果有人之前看过这个错误并修复过它吗?
编辑:弄清楚它是一个与内存相关的问题。但是我无法在编译时为应用程序分配适量的内存答案 0 :(得分:2)
检查dmesg
输出 - 它可能是内存不足的问题。或者,它可以是来自ulimit -a
的一些人,例如stacksize(某些NAS任务的默认堆栈大小太小)。
如果你的任何一台机器的dmesg
输出中有“内存不足:被杀过程###”这样的行 - 这意味着你的程序需要(并试图使用)大量内存,比你的操作系统更大可以给应用程序。内存有几个限制:
ulimit -v
- 虚拟内存大小的用户限制。检查所有ulimit -a
限制,但似乎您的情况不是这个free
命令检查)。但是,如果您的应用程序使用的内存大于RAM大小,并开始进行交换 - 性能会很差(在大多数情况下)。答案 1 :(得分:0)
我认为基准测试需要的内存比我在编译时分配的内存要多。