2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3
 
 Re: Параллельная программа на OpenMP
Сообщение12.01.2020, 14:36 
Заслуженный участник


20/08/14
11764
Россия, Москва
Mihaylo
С вашей логикой должно быть очевидно 2n потоков, может быть даже плюс ещё несколько. :facepalm:
Так что да, два потока совершенно не очевидно, photon абсолютно прав (да ещё о многом важном и не упомянул).

 Профиль  
                  
 
 Re: Параллельная программа на OpenMP
Сообщение12.01.2020, 14:57 


12/07/15
3312
г. Чехов
Два цикла с сугубо последовательными вычислениями. Последовательные вычисления плохо параллелятся. Требуются какие-то нетривиальные преобразования, чтобы эти циклы эффективно разбить по потокам.

 Профиль  
                  
 
 Re: Параллельная программа на OpenMP
Сообщение12.01.2020, 15:27 
Экс-модератор
Аватара пользователя


23/12/05
12063
Mihaylo в сообщении #1434707 писал(а):
Последовательные вычисления плохо параллелятся.
Это верно, в частности, параллелить строки типа
Код:
P[i] = c / (-a * P[i - 1] + b);
как это сделано у автора нельзя - результат работы программы станет непредсказуем, но это не значит, что нельзя разбить на отдельные потоки внутренние циклы типа

Используется синтаксис C++
 for (i = n - 2; i >= 1; i--)
{
    C1[i][j] = P[i] * C1[i + 1][j] + Q[i];
}

 Профиль  
                  
 
 Re: Параллельная программа на OpenMP
Сообщение12.01.2020, 15:35 


12/07/15
3312
г. Чехов
Да, преобразование только надо сделать. OpenMP сможет сам справиться?

 Профиль  
                  
 
 Re: Параллельная программа на OpenMP
Сообщение12.01.2020, 15:38 
Экс-модератор
Аватара пользователя


23/12/05
12063
А, я соврал, тут же снова есть зависимость C1[i] от С1[i+1]...

 Профиль  
                  
 
 Re: Параллельная программа на OpenMP
Сообщение12.01.2020, 15:39 
Заслуженный участник


20/08/14
11764
Россия, Москва
А строки типа P[i] = c / (-a * P[i - 1] + b); параллелятся созданием копии массивов для правой части выражения, можно и лучше даже общей для всех потоков (многопоточный readonly доступ не конфликтует). Копию кстати тоже можно создавать параллельно. ;-)

(Оффтоп)

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

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

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



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

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


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

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