主题:求救!OpenMP的并行数只能为1
yesshi06
[专家分:0] 发布于 2011-06-17 16:36:00
在我的服务器环境中,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个回复)
沙发
yeg001 [专家分:14390] 发布于 2011-06-17 17:14:00
!$ 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
这样看看.
板凳
cgl_lgs [专家分:21040] 发布于 2011-06-17 17:33:00
!$ call omp_set_num_threads(8)
把!$去掉。
call omp_set_num_threads(8)
3 楼
cgl_lgs [专家分:21040] 发布于 2011-06-17 17:37:00
对了,还有:
!$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 楼
yesshi06 [专家分:0] 发布于 2011-06-19 10:32:00
谢谢yeg001,这样打印出来的是8,的确分为8个线程了。看来 call omp_set_num_threads(8) 方法只对并行区内起作用,并行完毕立刻就变回1了
5 楼
yeg001 [专家分:14390] 发布于 2011-06-19 20:43:00
那个设置线程数目相当于是修改了环境参数. 一旦并行就开8个,就这样而已.
6 楼
724661326 [专家分:200] 发布于 2011-06-23 11:02:00
[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]
我来回复