Форум программистов, компьютерный форум, киберфорум
OpenMP
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
1

Цикл for и OpenMP

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

Author24 — интернет-сервис помощи студентам
Недавно распаралелил свой цикл 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 нигде общих ресурсов больше не используется...
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2013, 21:59
Ответы с готовыми решениями:

OpenMP цикл for
Здравствуйте. Хочу что бы каждый поток вывел по 2 случайных числа, используя цикл for. Вот...

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

Распараллелить цикл со сложной индексацией используя OpenMP
Пусть есть такой цикл, преобразующий массив: #define N 6 #define RADIUS 1 int arr; int...

OpenMP. Время выполнения программы больше чем без OpenMP
Сегодня первый раз сел за OpenMP. Читаю на сайте майкрософта как работает этот API. Так вот там...

1
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
23.05.2013, 16:31  [ТС] 2
Разобрался сам. Дело было в Winapi-функции, которая генерировала случайные числа. Она не выполнялась параллельно, поэтому постоянно возникали барьеры, что приводило к большому спаду производительности.
0
23.05.2013, 16:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2013, 16:31
Помогаю со студенческими работами здесь

Создать программу по всем 3 видам циклов...цикл с параметром,цикл с условием,цикл,и цикл с предусловием...
Найти сумму чисел 1 в квадрате до 10 c квадрате...операцию возведению в степень не использовать...

Цикл с предусловием, цикл с постусловием и цикл с параметром
Объясните пожалуйста как делать эти циклы. У меня не получается. Можете сделать как на фото, или на...

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

Qt и openMP
Здравствуйте. Хочется написать программу для решегия уравнения Бюргерса. Попытался распаралелить с...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru