Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mat_for_c
131 / 126 / 28
Регистрация: 26.04.2013
Сообщений: 636
Завершенные тесты: 2
#1

OpenMP - C++

11.04.2014, 22:49. Просмотров 445. Ответов 4
Метки нет (Все метки)

есть код в общем виде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
#pragma omp parallel for
for (i = 0; i < n; ++i) {
   temp = B[i];   // обращаемся
   for (j = 0; j < k; ++j)
      if (A[j]  !=  ...)  // обращаемся
         break;
   ...
#pragma omp critical section
{
   if ( ... )
      A.push_back(...)  // изменяем
   else
      B.push_back(...)  // изменяем
}
...
} // for
вопрос: если один поток в критической секции, а другой обращается к общим А или B, то прога может вылетать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2014, 22:49     OpenMP
Посмотрите здесь:

C++ Вопросы по OpenMP
C++ Цикл for и OpenMP
C++ Не работает openmp
C++ OpenMP
Параллельность в openMP C++
C++ OpenMP, тройной интеграл
Технологии OpenMP C++
C++ Магия OpenMP
C++ Программирование на OpenMP
C++ OPENmp параллельные потоки QT
OpenMP цикл for C++
OpenMP и SIMD C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
11.04.2014, 23:10     OpenMP #2
Цитата Сообщение от mat_for_c Посмотреть сообщение
если один поток в критической секции, а другой обращается к общим А или B, то прога может вылетать?
Если общие данные защищены критической секцией, то будет просто блокировка второго потока на время пока первый не выйдет из критической секции.
mat_for_c
131 / 126 / 28
Регистрация: 26.04.2013
Сообщений: 636
Завершенные тесты: 2
11.04.2014, 23:27  [ТС]     OpenMP #3
хорошо. а если в цикле вызывается функция, то надо определять ее в private?
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
11.04.2014, 23:37     OpenMP #4
Цитата Сообщение от mat_for_c Посмотреть сообщение
а если в цикле вызывается функция, то надо определять ее в private?
Поясните мысль.
mat_for_c
131 / 126 / 28
Регистрация: 26.04.2013
Сообщений: 636
Завершенные тесты: 2
11.04.2014, 23:56  [ТС]     OpenMP #5
скажем так:
в этом условии вызывается функция, определит выполнение break:
Цитата Сообщение от mat_for_c Посмотреть сообщение
if (A[j] != ...)
хотя я указал, что j относится как private, вдруг результат возвращается как общий и влияет на весь цикл (хотя вряд ли)

главная проблема: сыпется прога, хотя вроде и указал все private и критическую секцию....

Добавлено через 10 минут
или тут надо так:
C++
1
2
3
4
for (j; ...)
   int res = func();
   if (A[i] != res)
...
Yandex
Объявления
11.04.2014, 23:56     OpenMP
Ответ Создать тему
Опции темы

Текущее время: 23:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru