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

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

Войти
Регистрация
Восстановить пароль
 
mat_for_c
139 / 134 / 29
Регистрация: 26.04.2013
Сообщений: 649
Завершенные тесты: 2
#1

OpenMP - C++

11.04.2014, 22:49. Просмотров 452. Ответов 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
Посмотрите здесь:

Технологии OpenMP - C++
Доброго времени суток. Объясните, почему на такой код void quickSortR(int left,int right,int *mass) { int i,j; bool f; double...

Параллельность в openMP - C++
Использую Visual Studio 2013. Проц - двухъядерный Intel E6550. omp_get_max_threads() возвращает 2, что логично, но прагма omp parallel...

OpenMP, тройной интеграл - C++
Здравствуйте! Стоит задача нахождения интеграла с использованием технологии OpenMP. Написал следующий код нахождения интеграла методом...

Сортировка с использованием OpenMP - C++
Ребят, помогите пожалуйста распараллелить с помощью OpenMP сортировку подсчетом (Counting Sort). Код последовательной версии: ...

OpenMP долгий dinamic - C++
Добрый день. Была задача разобраться с OpenMP. Возникла следающая проблема- при распаралеливании цикла по методу dinamic, код: void...

Умножение матриц с использованием OpenMP - C++
Здрасте. Есть следующая задача. Нужно реализировать умножение двух квадратных матриц с использованием OpenMP. Без него все пашет нормально,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
11.04.2014, 23:10     OpenMP #2
Цитата Сообщение от mat_for_c Посмотреть сообщение
если один поток в критической секции, а другой обращается к общим А или B, то прога может вылетать?
Если общие данные защищены критической секцией, то будет просто блокировка второго потока на время пока первый не выйдет из критической секции.
mat_for_c
139 / 134 / 29
Регистрация: 26.04.2013
Сообщений: 649
Завершенные тесты: 2
11.04.2014, 23:27  [ТС]     OpenMP #3
хорошо. а если в цикле вызывается функция, то надо определять ее в private?
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
11.04.2014, 23:37     OpenMP #4
Цитата Сообщение от mat_for_c Посмотреть сообщение
а если в цикле вызывается функция, то надо определять ее в private?
Поясните мысль.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2014, 23:56     OpenMP
Еще ссылки по теме:

Перемножение матриц блоками. OpenMP - C++
Помогите до работать программу. Необходимо чтобы каждый поток отдельно брал строку или столбец матрицы для перемножения(ленточное) и...

OpenMP. Возможность неблокировки UI на время вычислений - C++
насколько я понял OpenMP хорошо распараллеливает те участки программы, где ведется обработка больших массивов данных. можно ли как нибудь...

Одновременная работу двух циклов openMP - C++
как можно сделать так чтобы два цикла работали одновременно? #pragma omp parallel { #pragma omp sections { #pragma omp...

OpenMP. Определитель матрицы и обратная матрица - C++
Здравствуйте. Пишу параллельную программу для нахождения определителя матрицы и обратной матрицы. Нашел алгоритмы в нете и сделал...


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

Или воспользуйтесь поиском по форуму:
mat_for_c
139 / 134 / 29
Регистрация: 26.04.2013
Сообщений: 649
Завершенные тесты: 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
Ответ Создать тему
Опции темы

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