Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
#1

OpenMP - C++

24.02.2014, 20:53. Просмотров 653. Ответов 7
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
#pragma omp parallel private(i) shared(j)
    [COLOR="yellow"]{[/COLOR]
#pragma omp for
        for (j = 0; j < n; j++) {
            for (i = 0; i < m; i++) {
                mas[i][j] = rand();
            }
        }
    [COLOR="Yellow"]}[/COLOR]
те скобки, что я выделил, не хотят в программу включаться, их то нормально принимает, а последнюю самую в функции подчеркивает и пишет, что
требуется объявление
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2014, 20:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос OpenMP (C++):

OpenMP. Время выполнения программы больше чем без OpenMP - C++
Сегодня первый раз сел за OpenMP. Читаю на сайте майкрософта как работает этот API. Так вот там сказано:&quot;Директива #pragma omp for...

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

Программирование на 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...

Цикл for и OpenMP - C++
Недавно распаралелил свой цикл for, а теперь решил посмотреть на сколько я выигрываю от этого. Но вот неожиданность, все многопоточные...

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

7
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
25.02.2014, 09:18 #2
RayPas, с точки зрения OpenMP не нахожу ничего подозрительного кроме shared(j). Этим самым вы говорите о том, что j общая для всех потоков. Должно быть так:
C++
1
2
3
4
5
6
7
8
9
#pragma omp parallel private(i, j) shared(mas, n, m)
{
    #pragma omp for
    for (j = 0; j < n; j++) {
        for (i = 0; i < m; i++) {
            mas[i][j] = rand();
        }
    }
}
1
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
25.02.2014, 19:18  [ТС] #3
anmartex, исправил, вроде заработало, а скажите, что может влиять на то, что время с увеличением потоков увеличивается?
читал про непотокобезопасную фун-ю rand(), заменял ее на обычное генерирование массивов чисел, время поменялось, но все равно осталось расходящимся, в чем может проблема быть?
0
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
26.02.2014, 03:55 #4
Цитата Сообщение от RayPas Посмотреть сообщение
anmartex, исправил, вроде заработало, а скажите, что может влиять на то, что время с увеличением потоков увеличивается?
Естественно на мелких операциях время потокового выполнения возрастёт, ибо у вас идут накладные расходы на формирование/обслуживание потоков и т.п. Об этом в любой литературе по распараллеливанию обязательно говорится.
Цитата Сообщение от RayPas Посмотреть сообщение
читал про непотокобезопасную фун-ю rand()
Потокобезопасной является rand_r, хотя по ней ничего вам больше не могу сказать.

Цитата Сообщение от RayPas Посмотреть сообщение
заменял ее на обычное генерирование массивов чисел, время поменялось, но все равно осталось расходящимся, в чем может проблема быть?
Повторюсь, что на мелких задачах в производительности вы потеряете в следствии того, что накладные расходы формирования/обслуживания потоков будут в разы превышать расходы на выполнение самой задачи.
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 12:15  [ТС] #5
anmartex, омг, а как же тогда решить эту задачку...распараллеливание нужно сделать именно на примере матрицы...
это в принципе возможно?
0
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
26.02.2014, 12:26 #6
Цитата Сообщение от RayPas Посмотреть сообщение
распараллеливание нужно сделать именно на примере матрицы...
это в принципе возможно?
Так делайте, что вам мешает? Просто чтобы наглядно выиграть в производительности нужна либо большая матрица, либо более сложные операции над ней.
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 12:28  [ТС] #7
anmartex, матрица у меня там 5 на 5. Видимо маловато?
просто читал что openMP наиболее простой способ, потоки создаются у меня, и кстати, только почему то до 64...хотя по заданию до 300сот точно надо, а это от чего зависит?
0
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
26.02.2014, 16:16 #8
Цитата Сообщение от RayPas Посмотреть сообщение
только почему то до 64...хотя по заданию до 300сот точно надо
Не знаю, у меня без проблем:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <omp.h>
 
int main() {
 
    omp_set_num_threads(300);
 
    #pragma omp parallel
    {
        printf("%d ", omp_get_thread_num());
    }
 
    return 0;
}
OpenMP
0
26.02.2014, 16:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2014, 16:16
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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