22 / 4 / 3
Регистрация: 06.12.2015
Сообщений: 303
1

OpenMP. Время выполнения программы больше чем без OpenMP

22.01.2017, 00:06. Показов 4634. Ответов 2
Метки нет (Все метки)

Сегодня первый раз сел за OpenMP. Читаю на сайте майкрософта как работает этот API. Так вот там сказано:"Директива #pragma omp for сообщает, что при выполнении цикла for в параллельном регионе итерации цикла должны быть распределены между потоками группы". И приведен такой листинг.
C++
1
2
3
4
5
6
#pragma omp parallel
{
#pragma omp for
for(int i = 1; i < size; ++i)
        x[i] = (y[i-1] + y[i+1])/2;
}
В моей программе надо присвоить элементу двум матрицам. Я взял к примеру 3*3. Затем сложить эти матрицы. И ещё я прикрепил в начале счетчик времени. В конце вывожу время - онм не гвоорит, что без этих пргма-директив вес работает намного быстрее. Подскажите пжл, заранее спасибо)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "stdafx.h"
#include <omp.h>
#include <iostream>
#include <ctime>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "");
    int a[3][3], b[3][3], c[3][3];
    unsigned int start_time = clock();
#pragma omp parallel
    {
#pragma omp for
        for (int j = 0; j < 3; j++)
            for (int i = 0; i < 3; i++)
                a[i][j] = i + j;
    }
#pragma omp parallel
    {
#pragma omp for
        for (int j = 0; j < 3; j++)
            for (int i = 0; i < 3; i++)
                b[i][j] = (i + j) * 2;
    }
 
#pragma omp parallel
    {
#pragma omp for
        for (int j = 0; j < 3; j++)
            for (int i = 0; i < 3; i++)
                c[i][j] = a[i][j] + b[i][j];
    }
 
    
    for (int j = 0; j < 3; j++)
    {
        for (int i = 0; i < 3; i++)
        {
            cout << c[i][j] << " ";
        }
        cout << "\n";
 
    }
    unsigned int end_time = clock();
    unsigned int search_time = end_time - start_time;
    cout << "Времы выполнения программы - " << search_time;
    
    
    cin.get();
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2017, 00:06
Ответы с готовыми решениями:

OpenMP. Время выполнения программы увеличивается с количеством потоков
Задача: найти сумму максимальных элементов строк матрицы. Я составил код программы и распараллелил...

OpenMP Сортировка методом пузырька. Растет время выполнения
Здравствуйте, написал прогу, сортирует двумерный массив методом пузырька в нескольких потоках и...

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

Перемножения матриц с OpenMP дольше чем...
Здравствуйте! Написал 2 программы перемножения матриц, одну с использованием OpenMP, другую -...

2
1466 / 1184 / 819
Регистрация: 29.02.2016
Сообщений: 3,583
22.01.2017, 09:23 2
чтобы сравнение было корректным нужно убрать вывод на экран и задать размер массивов не 3 а 3000
0
Evg
Эксперт CАвтор FAQ
21192 / 8208 / 633
Регистрация: 30.03.2009
Сообщений: 22,520
Записей в блоге: 30
22.01.2017, 11:39 3
Чтобы хоть что-то запустить в параллель, нужно создавать потоки. Процесс создания потоков требует времени. Синхронизация потоков так же требует времени. А потому распараллеливание даёт прирост только в том случае, когда экономия времени за счёт параллельного исполнения превышает накладные расходы по обслуживанию потоков. Говоря по простому, прирост производительности будет только на большом объёме данных. Это правило относится не только к OpenMP, а к любому методу распараллеливания
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2017, 11:39

Помощь в написании контрольных, курсовых и дипломных работ здесь.

OpenMP. Назначение числа потоков во время исполнения
Задача проста - есть готовые вектора, с которыми надо проводить операции. Размер их очень большой,...

OpenMP: Компиляция без -fopenmp выдаёт ошибку
Следующий код нормально компилируется (в LiveCD на основе Debian) командой gcc -o program source.c...

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

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


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

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

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