2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Работа с OpenMP в C++: распределение процессов
Сообщение11.09.2015, 13:50 
Есть программа которая выполняет один и тот же блок с разными начальными параметрами (просчитывает результат столкновения частиц для диапазона начальных скоростей). В Внутри этого блока есть участок, который нужно вычислять строго последовательно (там решение ДУ конечно-разностным методом), поэтому мне нужно, чтобы каждый такой блок рассчитывался одним ядром процессора. Т.е. каждое ядро должно полностью выполнять такой блок для какой-то конкретной начальной скорости. У меня код выглядит примерно так:

Используется синтаксис C++
        #pragma omp parallel for
         for (int k = 0; k < Nv; k++)
{
v = v0 + k*dv;
...
{кусок который нельзя вычислять параллельно}
...
}
Но в результате работы такого кода параллельно вычисляется весь блок, вместе с куском который нужно считать последовательно. (Без параллельных вычислений код работает как надо)

Как мне распределить этот цикл между ядрами чтобы каждая отдельная итерация выполнялась только одним ядром?

 
 
 
 Re: Работа с OpenMP в C++: распределение процессов
Сообщение11.09.2015, 16:34 
_Er, а где определяются Ваши переменные, которые используются в области последовательных вычислений? Если они Вам не нужны вне цикла for, то попробуйте определить их в начале этого цикла.

Я почитал кое-какую литературу по OpenMP, пока ждал, что кто-нибудь ответит на Ваш вопрос, и насколько я понял, по умолчанию компилятор не разрешает вложенного параллелизма – для этого нужно дать ему дополнительные инструкции, которые Вы, как я понимаю, не прописывали. Так что, скорее всего, Ваш код выполняется именно так, как вы хотели (каждую итерацию просчитывает отдельное ядро), а Ваша проблема в таком случае, вероятно, заключается в том, что результат различных итераций цикла for записывается в одни и те же переменные, определенные вне цикла.

 
 
 
 Re: Работа с OpenMP в C++: распределение процессов
Сообщение11.09.2015, 19:39 
Сделал как Вы сказали – вроде бы работает. По крайней мере выводит нормальные данные, без ошибок с неопределенными значениями типа -1.#IND. Спасибо!

(Оффтоп)

_Er в сообщении #1052586 писал(а):
Я почитал кое-какую литературу по OpenMP, пока ждал, что кто-нибудь ответит на Ваш вопрос
И Вам было не впадлу??? :shock:


 !  Предупреждение за оффтопик и провоцирование оффтопика в тематическом разделе (обращение к самому себе как другому человеку). Не морочьте участникам форума голову!
/ GAA, 12.09.2012

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group