我被OpenMP时里这时间搞晕了

 准备着手学点并行计算方面的东西,找了半天,发现openMP比较容易下手,于是到网上找了点代码看。起来弄了个例子,如下:

int main(int argc, char * argv[])
{
     clock_t t1 = clock();
#pragma omp parallel for
     for ( int j = 0; j < 4; j++ ){
         test();
     }
     clock_t t2 = clock();
     printf("Total time = %d/n" , t2-t1);
 
     test();
     return 0;
}
然后在 在VC8.0中项目的属性对话框中,左边框里的“配置属性”下的“C/C++”下的“语言”页里,将OpenMP支持改为“是/(OpenMP)”就OK了,运行一下,结果很是爽。
可是后来拿到我的ubuntu下一跑就出了问题,单个运行约300多ms,并行部分每个却用了1000多ms,感觉做了四次(我的是四核机器),看了老半天,实在不知道怎么回事,后来,科学院崔涛博士来我们这里讲课,他让我把时间用下面这种方式计算 :
#include <omp.h>
#include <stdio.h>
#include <sys/time.h>

void test()
{
    int a = 0;
    long i;
     struct timeval st, et;

     gettimeofday( &st, NULL );

    for (i = 0; i <100000000 ; i++)
    {
        a = i+1;
        //printf("%ld ",i);
    }
     gettimeofday( &et, NULL );

if( et.tv_usec < st.tv_usec )
    {
        et.tv_sec = et.tv_sec - st.tv_sec - 1;
        et.tv_usec = et.tv_usec + (1000000 - st.tv_usec);
    }
    else
    {
        et.tv_sec -= st.tv_sec;
        et.tv_usec -= st.tv_usec;
    }

    printf("thread_num=%d,  Time =  %i.%06i sec/n", omp_get_thread_num(),et.tv_sec, et.tv_usec);
}

int main(int argc, char* argv[])
{
    int j=0;
     struct timeval st, et;

     gettimeofday( &st, NULL );
    #pragma omp parallel for    
    for (j = 0; j < 16; j++ )
    {
        test();
    }

     gettimeofday( &et, NULL );

if( et.tv_usec < st.tv_usec )
    {
        et.tv_sec = et.tv_sec - st.tv_sec - 1;
        et.tv_usec = et.tv_usec + (1000000 - st.tv_usec);
    }
    else
    {
        et.tv_sec -= st.tv_sec;
        et.tv_usec -= st.tv_usec;
    }

    printf("Time =  %i.%06i sec/n", et.tv_sec, et.tv_usec);
    return 0;
}
结果很成功,不过很是郁闷,-被一个这样的问题搞了这么久,而且还不知道原因。崔博士说可是在linux里clock()函数可能会有些问题。
不管了,问题解决就好,真的很谢谢崔博士。他给我们讲了几天MPI编程,很清晰,也让我很佩服,他是科学院数学所的,计算机能到如此地步实在让我羞愧,不过他也激励了我更好地学习,我也明白了与牛人交流会多有用。去年有幸跟北大的李若教授交流过,他的计算机和编程功底也是让一般的计算机老师都自叹不如的,他跟崔一样,也是计算数学的牛人。  在曙光装并行机期间,我也有幸碰到了他们的首席技术工程师何牧君,科学院过过程所的牛人,好像原来是研究化学的,我桌上有本书就是他读书时他们那个研究组出的。他的计算机那个精啊,我都不知道怎么表达,反正我在边上看他弄机器里,那手速不亚于我们咱上那些魔兽高手。期间我装一个结点上的一些包用了三四十分钟,他用几个命令十分钟左右就装了四个结点,我那一个佩服啊。总结下这三位牛人,都很年轻而且都是用Linux系统的,搞和我现在都不想用windows了。不知道我再过几年能不能除了外表和年龄外,在知识和能力上能有些许相似。不写了,加油吧!~~~~
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值