回 帖 发 新 帖 刷新版面

主题:求救!OpenMP的并行数只能为1

在我的服务器环境中,OpenMP的线程并行数总是1,很奇怪。
    我的服务器是 8 cpu 16核的IBM服务器。装的是intel的编译器 10.1.1.018版本,mpi用的是mpich2-1.3
    我测试用的程序如下:
    !$  call omp_set_num_threads(8)
    !$ threads = omp_get_num_threads()
    print *,threads
    !$OMP PARALLEL DO
    do i=1,10
      myTest = i*i*i-i*i
    end do
    !$OMP END PARALLEL DO

    即使我强制openmp使用8个线程,最后打印出来的threads还是1,尝试过设置环境变量OMP_NUMBER_THREADS,也没有效果。
    这是什么原因?

回复列表 (共6个回复)

沙发

!$  call omp_set_num_threads(8)

    !$OMP PARALLEL DEFAULT(PRIVATE)
    threads = omp_get_num_threads()
    print *,threads
    !$OMP DO
    do i=1,10
      myTest = i*i*i-i*i
    end do
    !$OMP END DO
    !$OMP END PARALLEL

这样看看.

板凳


    !$  call omp_set_num_threads(8)
把!$去掉。

    call omp_set_num_threads(8)

3 楼

对了,还有:
    !$OMP PARALLEL DO
    do i=1,10
      myTest = i*i*i-i*i
    end do
    !$OMP END PARALLEL DO
改为:
    !$OMP PARALLEL DO PRIVATE(myTest)
    do i=1,10
      myTest = i*i*i-i*i
    end do
    !$OMP END PARALLEL DO

4 楼

谢谢yeg001,这样打印出来的是8,的确分为8个线程了。看来 call omp_set_num_threads(8) 方法只对并行区内起作用,并行完毕立刻就变回1了

5 楼

那个设置线程数目相当于是修改了环境参数. 一旦并行就开8个,就这样而已.

6 楼

[quote]!$  call omp_set_num_threads(8)

    !$OMP PARALLEL DEFAULT(PRIVATE)
    threads = omp_get_num_threads()
    print *,threads
    !$OMP DO
    do i=1,10
      myTest = i*i*i-i*i
    end do
    !$OMP END DO
    !$OMP END PARALLEL

这样看看.[/quote]

我来回复

您尚未登录,请登录后再回复。点此登录或注册