Поведение стека с неограниченным размером в openMP - PullRequest
3 голосов
/ 06 марта 2011

Мне любопытно, как 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

Последняя команда выполняется без ошибок и дает правильный результат. Для работы требуется стек ~ 12 МБ.

Каково поведение выделения стека в параллельной среде, когда не объявлен размер стека?

1 Ответ

3 голосов
/ 06 марта 2011

Существует два размера стека, которые вы должны учитывать при работе с OpenMP. Существует стек исходного (или основного) потока, который контролируется ulimit. Затем идет стек каждого из «подчиненных» потоков, который управляется переменной среды OpenMP OMP_STACKSIZE. Этот второй стек имеет значение по умолчанию, определяемое каждой реализацией. Большинство из них имеют разные размеры по умолчанию в зависимости от того, работаете ли вы в 32-битном или 64-битном режиме.

...