我很好奇openmp如何使用无限制的堆栈大小来处理(或者不是这样):
[alm475@compute-0-139 ~]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
max nice (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 278528
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 4096
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
max rt priority (-r) 0
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 278528
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[alm475@compute-0-139 ~]$ big_stack_openmp
Segmentation Fault
[alm475@compute-0-139 ~]$ ulimit -s 30960
[alm475@compute-0-139 ~]$ big_stack_openmp
最终命令运行干净并产生正确的结果。它需要大约12MB的堆栈才能运行。
当没有声明的堆栈大小时,并行环境中堆栈分配的行为是什么?
答案 0 :(得分:3)
使用OpenMP时,您必须考虑两种堆栈大小。有初始(或主)线程的堆栈,由ulimit控制。然后是每个“从”线程的堆栈,它由OpenMP环境变量OMP_STACKSIZE控制。第二个堆栈具有由每个实现确定的默认值。大多数都具有不同的大小默认值,具体取决于您是以32位还是64位模式运行。