如何在具有多个节点的集群上运行openmp程序?

时间:2015-10-27 02:51:43

标签: cluster-computing openmp

我使用openmp来运行一个简单的程序。 我在集群上有节点。节点有16个线程。当我运行程序时如下:

#include <iostream>
#include <time.h>
#include <omp.h>
#include <math.h>
double test()
{
    double a = 0;
    double s=0;
    for (int i=0;i<100000;i++)
    {
        a=a+i;
        s=s+sqrt(a);
    }
    return s;
}
int main()
{
    double ss=0;
    double t1,t2;
    t1 = omp_get_wtime();   
#pragma omp parallel for
    for (int i=0;i<10000;i++)
    {
            ss=ss+test();
    }   
    t2 = omp_get_wtime();
    std::cout<<"time :"<<(t2-t1)<<std::endl;

}

在Red Had 4.1.2上使用g ++

的CMakeLists.txt:

PROJECT(VSHELLO)
SET(OpenMP_C_FLAGS "-O3 -fopenmp")
SET(OpenMP_CXX_FLAGS "-O3 -fopenmp")
SET(OpenMP_EXE_LINKER_FLAGS "-O3 -fopenmp")
MESSAGE("OpenMP_CXX_FLAGS: ${OpenMP_CXX_FLAGS}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
ADD_EXECUTABLE(vshello_OMP main.cpp)

当我设置OMP_NUM_THREADS = 1时,总时间为14秒 当我设置OMP_NUM_THREADS = 2时,总时间为7.2s

#OMP_NUM_THREADS=1 ./exe_omp
time : 14.3099
#OMP_NUM_THREADS=2 ./exe_omp
time : 7.20322
#OMP_NUM_THREADS=4 ./exe_omp
time : 3.64557
#OMP_NUM_THREADS=8 ./exe_omp
time : 1.92503
#OMP_NUM_THREADS=16 ./exe_omp
time : 1.206
#OMP_NUM_THREADS=32 ./exe_omp
time : 1.15374
..
#OMP_NUM_THREADS=128 ./exe_omp
time : 1.07625

为什么线程数超过16时总时间不能减少?

0 个答案:

没有答案