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

OpenMP - C++

Восстановить пароль Регистрация
 
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
24.02.2014, 20:53     OpenMP #1
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]
те скобки, что я выделил, не хотят в программу включаться, их то нормально принимает, а последнюю самую в функции подчеркивает и пишет, что
требуется объявление
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2014, 20:53     OpenMP
Посмотрите здесь:

C++ Вопросы по OpenMP
C++ Цикл for и OpenMP
C++ не работает openmp
OpenMP C++
Параллельность в openMP C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
25.02.2014, 09:18     OpenMP #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();
        }
    }
}
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
25.02.2014, 19:18  [ТС]     OpenMP #3
anmartex, исправил, вроде заработало, а скажите, что может влиять на то, что время с увеличением потоков увеличивается?
читал про непотокобезопасную фун-ю rand(), заменял ее на обычное генерирование массивов чисел, время поменялось, но все равно осталось расходящимся, в чем может проблема быть?
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
26.02.2014, 03:55     OpenMP #4
Цитата Сообщение от RayPas Посмотреть сообщение
anmartex, исправил, вроде заработало, а скажите, что может влиять на то, что время с увеличением потоков увеличивается?
Естественно на мелких операциях время потокового выполнения возрастёт, ибо у вас идут накладные расходы на формирование/обслуживание потоков и т.п. Об этом в любой литературе по распараллеливанию обязательно говорится.
Цитата Сообщение от RayPas Посмотреть сообщение
читал про непотокобезопасную фун-ю rand()
Потокобезопасной является rand_r, хотя по ней ничего вам больше не могу сказать.

Цитата Сообщение от RayPas Посмотреть сообщение
заменял ее на обычное генерирование массивов чисел, время поменялось, но все равно осталось расходящимся, в чем может проблема быть?
Повторюсь, что на мелких задачах в производительности вы потеряете в следствии того, что накладные расходы формирования/обслуживания потоков будут в разы превышать расходы на выполнение самой задачи.
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
26.02.2014, 12:15  [ТС]     OpenMP #5
anmartex, омг, а как же тогда решить эту задачку...распараллеливание нужно сделать именно на примере матрицы...
это в принципе возможно?
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
26.02.2014, 12:26     OpenMP #6
Цитата Сообщение от RayPas Посмотреть сообщение
распараллеливание нужно сделать именно на примере матрицы...
это в принципе возможно?
Так делайте, что вам мешает? Просто чтобы наглядно выиграть в производительности нужна либо большая матрица, либо более сложные операции над ней.
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
26.02.2014, 12:28  [ТС]     OpenMP #7
anmartex, матрица у меня там 5 на 5. Видимо маловато?
просто читал что openMP наиболее простой способ, потоки создаются у меня, и кстати, только почему то до 64...хотя по заданию до 300сот точно надо, а это от чего зависит?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2014, 16:16     OpenMP
Еще ссылки по теме:

Технологии OpenMP C++
C++ Магия OpenMP
C++ Программирование на OpenMP

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

Или воспользуйтесь поиском по форуму:
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
26.02.2014, 16:16     OpenMP #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
Yandex
Объявления
26.02.2014, 16:16     OpenMP
Ответ Создать тему
Опции темы

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