主题:求救!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]
							 
									
			
我来回复