Mo_Cuishle_ 2017-03-11 02:20 采纳率: 20%
浏览 2236
已采纳

关于并行计算中单线程与串行运行时间

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

 #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
求解是什么原因

  • 写回答

2条回答 默认 最新

  • oyljerry 2017-03-11 04:14
    关注

    这个多开一个线程对于系统来说性能不会有那么明显影响。可以多跑几次。看时间消耗在什么计算地方

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退