Введение в прагматическую директиву с параллелью для l oop (C ++, OpenMP, Nsight Eclipse IDE) - PullRequest
1 голос
/ 07 апреля 2020

Использование Nsight Eclipse Edition 10.2 для отладки простого кода C ++ с использованием gdb 7.11.1 .

В коде используется прагма-вызов OpenMP для разветвления for -l oop. Ниже приведен минимальный рабочий пример, где простой массив q заполняется значениями другой переменной p:

#pragma omp parallel for schedule (static)
for(int p=pstart; p<pend; p++){
   const unsigned i = id[p];
   if(start <= i && i < end)
      q[i - start] = p;
}

В режиме отладки я хотел бы использовать функцию step-in (классически F5 ), чтобы следить за тем, как массив q заполняется p. Тем не менее, эти шаги превышают для l oop в целом и возобновляются, когда параллельные нити снова соединяются.

Есть ли способ заставить перейти в прагму директива / openMP l oop?

1 Ответ

1 голос
/ 07 апреля 2020

Есть ли способ заставить перейти в прагматическую директиву / openMP l oop?

Это будет зависеть от отладчика, но также не совсем понятно, что это будет означать , Поскольку многие потоки выполняют параллель l oop, ожидаете ли вы, что каждый из них остановится, а затем объединится? Как вы ожидаете, чтобы показать разные состояния каждого потока? (у каждого будут свои p и i). Что произойдет, если поток управления потоком расходится?

Есть отладчики, которые могут сделать что-то из этого (например, TotalView на Linux), но это не тривиально (а TotalView стоит денег [что вполне справедливо и разумно: -)]).

Что вам может понадобиться, это установить точку останова внутри l oop, а затем обработать ее ударами N потоков ... (которая не отвечает на ваш точный вопрос, но позволяет увидеть, что происходит в l oop, что, возможно, то, что вам действительно нужно сделать!)

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