#pragma omp parallel for schedule(dynamic) private(i)

#include
#include
#include
int main()
{
    int i;
    #pragma omp parallel for schedule(dynamic) private(i)
    for(i=0;i<INT32_MAX-1;++i){
        if( ((i&(i-1)) + (i&(-i))) == i){
            continue;
        }
        printf("Not equal at i=%d/n",i);
    }
    return 0;
}
gcc lab.c –o lab –fopenmp -O3    //可以正常编译
gcc lab.c –o lab.s –O3
在Centos四核的机器上测试:
time ./lab
real    1m7.160s
user    4m27.885s
sys     0m0.004s

time ./lab.s
real    0m2.277s
user    0m2.268s
sys     0m0.000s

为什么多线程反而运行时间更长呢?不解。
#include
#include
#include
int main()
{
    int i;
    #pragma omp parallel for schedule(dynamic) private(i)
    for(i=0;i<INT32_MAX;++i){
        if( ((i&(i-1)) + (i&(-i))) == i){
            continue;
        }
        printf("Not equal at i=%d/n",i);
    }
    return 0;
}
gcc lab.c –o lab –fopenmp  -O3   //编译出错

#include
#include
#include
int main()
{
    int i;
    #pragma omp parallel for schedule(dynamic) private(i)
    for(i=1;i!=0;++i){
        if( ((i&(i-1)) + (i&(-i))) == i){
            continue;
        }
        printf("Not equal at i=%d/n",i);
    }
    return 0;
}
运行时间很长很长,是否是for(i=0;i!=0;++i)这种写法的问题呢?
是不是for(i=a;i 不解

你可能感兴趣的:(openmp,c/c++)