openMP中无限大小的堆栈行为

时间:2011-03-05 22:47:26

标签: stack segmentation-fault parallel-processing openmp

我很好奇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的堆栈才能运行。

当没有声明的堆栈大小时,并行环境中堆栈分配的行为是什么?

1 个答案:

答案 0 :(得分:3)

使用OpenMP时,您必须考虑两种堆栈大小。有初始(或主)线程的堆栈,由ulimit控制。然后是每个“从”线程的堆栈,它由OpenMP环境变量OMP_STACKSIZE控制。第二个堆栈具有由每个实现确定的默认值。大多数都具有不同的大小默认值,具体取决于您是以32位还是64位模式运行。