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

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

Войти
Регистрация
Восстановить пароль
 
nonedark2008
883 / 622 / 125
Регистрация: 28.07.2012
Сообщений: 1,662
#1

Цикл for и OpenMP - C++

21.05.2013, 21:59. Просмотров 518. Ответов 1
Метки нет (Все метки)

Недавно распаралелил свой цикл for, а теперь решил посмотреть на сколько я выигрываю от этого.
Но вот неожиданность, все многопоточные версии работают дольше, чем одномоточная.
Грешу на синхронизацию, но не понимаю в чем дело...
Вот собственно код цикла:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma omp parallel for shared(breakNum) num_threads(4)
    for (INT i = 0; i < 500; ++i)
    {
      if (breakNum != -1)
        continue; 
      if (randDivision(numArr[i]) == false)
        continue;
      if (millerRabinTest(numArr[i], 50) == false)
        continue;
      #pragma omp critical 
        breakNum = i;
    }
Практически в любом случае однопоточный работает быстрее многопоточного. Для наглядности, однопоточный работает в пределах от 7 до 13 секунд. А многопоточный где-то от 11 до 25. В чем может быть проблема? Кроме как breakNum нигде общих ресурсов больше не используется...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2013, 21:59     Цикл for и OpenMP
Посмотрите здесь:

OpenMP цикл for - C++
Здравствуйте. Хочу что бы каждый поток вывел по 2 случайных числа, используя цикл for. Вот программа: #include &lt;iostream&gt; using...

Как завершить цикл в OpenMP - C++
Использую OpenMP для параллельных расчетов очень нужно при определенном условии экстренно завершить цикл break; с OpenMP не...

Распараллелить цикл со сложной индексацией используя OpenMP - C++
Пусть есть такой цикл, преобразующий массив: #define N 6 #define RADIUS 1 int arr; int flag; int x,y; do { flag = 0;

OpenMP - C++
#pragma omp parallel private(i) shared(j) { #pragma omp for for (j = 0; j &lt; n; j++) { for (i = 0; i &lt; m;...

OpenMP - C++
есть код в общем виде... #pragma omp parallel for for (i = 0; i &lt; n; ++i) { temp = B; // обращаемся for (j = 0; j &lt; k; ++j)...

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

Программирование на OpenMP - C++
Такой вопрос, у меня есть прога, которая работает ~сутки, не буду вдаваться что и как она делает, мне посоветовали для быстроты...

Магия OpenMP - C++
Есть такой код: Expr = ... // vector&lt;pair&lt;size_t, double&gt;&gt; #ifdef _OPENMP #pragma omp parallel num_threads( 2==(size_level-ptr) ? 1...

OpenMP и SIMD - C++
Добрый день. Не могу исправить код, чтобы использовалось 4 ядра, а не 1. В функцию proizv нужно добавить распараллеливание вычислений с...

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

Не работает openmp - C++
Написал простенькую программку с распараллеливанием собрал откомпилил, но распараллеливания нет. Программка выглядит так: ...

Вопросы по OpenMP - C++
Всем доброго времени суток! 1. Заметил, что потоки создаваемые в цикле for так и висят в диспетчере задач Windows до завершения работы...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nonedark2008
883 / 622 / 125
Регистрация: 28.07.2012
Сообщений: 1,662
23.05.2013, 16:31  [ТС]     Цикл for и OpenMP #2
Разобрался сам. Дело было в Winapi-функции, которая генерировала случайные числа. Она не выполнялась параллельно, поэтому постоянно возникали барьеры, что приводило к большому спаду производительности.
Yandex
Объявления
23.05.2013, 16:31     Цикл for и OpenMP
Ответ Создать тему
Опции темы

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