18910140161

并行计算中的单线程和串行执行时间信息

顺晟科技

2021-06-28 19:46:36

304

最近在做并行计算的实验,在做并行计算圆周率π时,利用积分法写了一个串行程序,如下:
#include <stdio.h>

static double num_steps=10000000;
double step,Pi;

int main(){

int i;
double temp,sum=0;
step=1/num_steps;
for(int i=0;i<num_steps;i++){
    temp=(i+0.5)*step;
    sum=sum+4/(1+temp*temp);
}
Pi=step*sum;
printf("Pi= %f\n",Pi);

}

和一个单线程的代码:
#include <pthread.h>

include <stdio.h>

double n=10000000;
int t=1;
double private_sum[1];
int len_per_thread=n/t;

void sum_thread(void arg){

int id=*(int*)arg;
int start=id*len_per_thread;
for(int i=start;i<start+len_per_thread;i++){
    double temp=(i+0.5)/n;
    temp*=temp;
    private_sum[id]+=4/(1+temp);
}
private_sum[id]/=n;
printf("Thread %d returns value %f\n",id,private_sum[id]);
return NULL;

}

int main()
{

pthread_t threadID[1];
int arg[1];
double sum=0,pi=0;
int i;
for(i=0;i<t;i++){
    arg[i]=i;
    pthread_create(&threadID[i],NULL,sum_thread,&arg[i]);
}
for(i=0;i<t;i++){
    pthread_join(threadID[i],NULL);
    sum+=private_sum[i];
}
pi=sum/n;
printf("%f\n",sum);
return 0;

}

理论上讲,单线程会有额外创建线程时间,应比串行计算速度慢,可是运行结果显示:
串行计算用时0.29s,单线程0.126s
求解是什么原因

我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航