OpenMP Расположение частных переменных? - PullRequest
2 голосов
/ 25 января 2012

Где размещаются приватные переменные openmp?В каждом стеке потоков, динамически или через какой-то общий массив или что-то?

Ответы [ 2 ]

2 голосов
/ 26 января 2012

Спецификация OpenMP не указывает, должны ли эти переменные быть размещены в стеке или в куче (и если они находятся в куче, если она находится в общем массиве или если для каждого потока выделен один объект) , Как правило, я бы предположил, что частные переменные расположены в стеке (нет причин не делать этого, и, как правило, это более эффективно). Согласно руководству , которое является поведением, используемым в libgomp (реализация, используемая gcc), по крайней мере, не имею никакого представления о других реализациях (хотя я вижу небольшую причину, почему они не должны делать то же самое).

0 голосов
/ 25 января 2012

OpenMP не определяет ничего о распределении приватных переменных.Есть два варианта: куча и стек.Если мы думаем о том, что каждый поток выполняет меньшее количество инструкций, имеет смысл для основного потока выделить частные переменные, как показано ниже.

Код:

1: set_threads(n)
2: #pragma omp parallel private(var)
3: { 
4:   var = ...
5:}

Машинный код:line2: var_ptr = новые переменные [n]line4: var_ptr [get_thread_id ()] = ...

Но приведенный выше код вызовет много ложного обмена частными переменными в разных потоках.Поэтому я думаю, что для компилятора имело бы смысл размещать их в стеке каждого потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...