2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Работа с OpenMP в C++: распределение процессов
Сообщение11.09.2015, 13:50 


24/07/14
138
Есть программа которая выполняет один и тот же блок с разными начальными параметрами (просчитывает результат столкновения частиц для диапазона начальных скоростей). В Внутри этого блока есть участок, который нужно вычислять строго последовательно (там решение ДУ конечно-разностным методом), поэтому мне нужно, чтобы каждый такой блок рассчитывался одним ядром процессора. Т.е. каждое ядро должно полностью выполнять такой блок для какой-то конкретной начальной скорости. У меня код выглядит примерно так:

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

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

 Профиль  
                  
 
 Re: Работа с OpenMP в C++: распределение процессов
Сообщение11.09.2015, 16:34 


24/07/14
138
_Er, а где определяются Ваши переменные, которые используются в области последовательных вычислений? Если они Вам не нужны вне цикла for, то попробуйте определить их в начале этого цикла.

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

 Профиль  
                  
 
 Re: Работа с OpenMP в C++: распределение процессов
Сообщение11.09.2015, 19:39 


24/07/14
138
Сделал как Вы сказали – вроде бы работает. По крайней мере выводит нормальные данные, без ошибок с неопределенными значениями типа -1.#IND. Спасибо!

(Оффтоп)

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


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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group