Форум программистов CodeGuru
16 Октябрь 2018, 15:48:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Распараллеленная программа работает медленнее однопоточной  (Прочитано 18558 раз)
0 Пользователей и 1 Гость смотрят эту тему.
enickus
Новичок
*
Офлайн Офлайн

Сообщений: 1


Просмотр профиля
« : 29 Октябрь 2012, 01:26:07 »

Здравствуйте! Помогите разобраться с проблемой: считаю интеграл методом трапеции. Расчет в 1 поток выполняется быстрее, чем распараллеленный на соотв. количество pthread. Вот код:

#include <cmath>
#include <iostream>
#include <cstdlib>
#include <pthread.h>
#
using namespace std;
inline double calc(double x)
{
   return -3*x*x+2*x+9;
}
typedef struct  {double a;double b;double n;double* temp;int num;} datastruct;
void* intcalc(void* D)
{
   datastruct* d=(datastruct*)D;
   d->temp[d->num]=0;
   double dx=(d->b-d->a)/d->n;
   int i;
   
   for(i=1;i<=d->n;i++)
   {
      d->temp[d->num]+=calc(d->a+dx*i);
      //cout<<d->num<<":"<<d->a+dx*i<<"-->"<<d->temp[d->num]<<endl;
   }
   return 0;
}

int main()
{
   datastruct ds;
   double a,b;
   int n,i;
   double h;
   int numCPU = sysconf(_SC_NPROCESSORS_ONLN);// определим количество процессоров
   pthread_t* tid=new pthread_t[numCPU];
   double* temp=new double[numCPU];
   
    //cout<<"Enter a,b and n:\n";
    //cin>>a>>b>>n;
    a=-2;
    b=1;
    n=100000;
    h=(b-a)/n;//длина одного промежутка
   
   for (i=0;i<numCPU;i++)
        {
         
         ds.a=a+i*(b-a)/numCPU;
         ds.b=b-(b-a)/n;
         if (i!=numCPU-1)
           ds.b=a+(i+1)*(b-a)/numCPU;
         ds.n=n*(ds.b-ds.a)/(b-a);
         ds.num=i;
         ds.temp=temp;
         
         pthread_create(&tid,NULL,intcalc, (void**)&ds);
         pthread_join(tid,NULL);
      }
      double res=0;
      for (i=0;i<numCPU;i++)
          {
            res+=temp;
         }
      
   //   cout<<(res+(calc(b)+calc(a))/2)*h<<endl;
      
      
      return 0;
}
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #1 : 10 Ноябрь 2012, 17:32:07 »

Возможно, на запуск потоков больше времени уходит, чем на расчеты ?
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!