Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2012, 12:14   #1
vitik
Пользователь
 
Регистрация: 07.01.2011
Сообщений: 33
По умолчанию Распараллеливание циклов с ипользованием OpenMP

Есть проблема , получился парадокс - время роботы программы с распараллеливанием дольше на 1 сек чем без распараллеливания, ожидалось наоборот . Для наглядности сделал матрицу 1000х40, чтоб потянуть время.





Код:
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <omp.h>
using namespace std;
 
int main()
{
srand(time(NULL));
int heilth= 1000;
int width = 40;
double start_time,end_time,time;
int a[1000][40];
int i,j;
 
start_time = omp_get_wtime();
#pragma omp parallel for private(i,j)\
    shared (a)
 
for ( i = 0; i<heilth;++i)
{
    for( j=0; j<width; j++)
    {
        a[i][j] = 0+rand()%10 ;
        cout<<a[i][j]<<" ";
    }
    cout<<endl<<endl;
}
cout<<endl<<endl;
int sum =0;
int collNum = 0;
cout<<endl<<endl;
cout<<"--------Matrix  "<<heilth<<" x "<<width<<"--------"<<endl<<endl;
 
 
collNum = 0+rand()%width - 1;
 
for (int i = 1; i<heilth;i=i+2)
 
sum+= a[i][collNum];
 
 
cout<<endl<<"Sum of even numbers on the placement of elements "<<collNum<<" coll = "<<sum<<endl;
 
end_time = omp_get_wtime();
 
cout<<endl<<endl;
time=end_time-start_time;
 
cout <<"Time= "<<time;
 
getch();
 
 
    return 0;
}
vitik вне форума Ответить с цитированием
Старый 12.10.2012, 06:49   #2
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

1. в общее время, помимо основного параллельного цикла, входят еще и др. не параллельные вычисление.
2. матрицей 40*1000 время не тянут. 100к на 100к еще туда сюда.
3. в параллельную часть входит вывод на экран, а на сколько я знаю, он выполняется только в однопоточном режиме ибо это объект. (тут не уверен)
4. в настройках студии нужно установить "использовать OpenMP". иначе у вас все будет идти в однопоточном режиме.
5. в каком режиме запускается программа? release или debug?
6. ну и сколько ядер физических у машины?
Kukurudza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
openmp hunter03 Общие вопросы C/C++ 0 02.10.2012 17:54
Распараллеливание кусочка кода на Си (MPI && openMP) Quew Общие вопросы C/C++ 0 02.02.2012 19:38
Визуализация с ипользованием bass.dll Ahmund Мультимедиа в Delphi 3 20.10.2011 08:13
Можно ли перехватывать сообщения MessageBoxA от определенного приложения с ипользованием хуков? Человек_Борща Win Api 2 03.06.2011 12:37
1.Массив с ипользованием указателя2.Матрица Seferus Общие вопросы C/C++ 6 21.10.2010 10:17