В OpenMP Fortran активируются только два потока - PullRequest
0 голосов
/ 06 декабря 2018

Это огромный цикл до, и я приватизировал много переменных, чтобы избежать условий гонки.Но значения не совпадают с последовательным кодом, и я попытался распечатать proc_num и заметил, что из 8 активируются только 2 потока (0,1). Я хочу вставить весь код, но этослишком длинный.

ВЫХОД: код выполняется, но я получаю только неправильные значения, и только 0 и 1 печатаются для значения proc_num.

   thread_num = 8

   !$ call omp_set_num_threads (thread_num)

   .
   .
   .
   .



 !$OMP parallel do private(A_inc,T_star_tr,temp33,B_alpha,C_alpha,C_alpha_vec,&
 !$OMP del_CRSS,iter_out,iter_in,del_T_star_tau,RSS_alpha,&
 !$OMP del_gam_tau,G_n,Schmid_dum,J_n, J_n_inv,correction,&
 !$OMP check,EXP_N,CRSS_c_tau,temp12,checkouter,flag,Fp_det,Fe_det)

do vk=1,npts3
  do vj=1,npts2
    do vi=1,npts1


A_inc = 0.d0

  do vii = 1,3
     do vjj = 1,3
        do vmm = 1,3
           do vpp = 1,3
              do voo = 1,3
                 A_inc(vii,vjj)= A_inc(vii,vjj) + Fp_inv_t(vmm,vii,vi,vj,vk)* &
     F_tau(vpp,vmm,vi,vj,vk)*F_tau(vpp,voo,vi,vj,vk)*Fp_inv_t(voo,vjj,vi,vj,vk)
              end do
           end do
        end do
     end do
  end do
 !$OMP critical 
 !$ proc_num = omp_get_thread_num()
 print *, proc_num, A_inc
!$OMP end critical

 T_star_tr = 0.d0

  do vii = 1,3
     do vjj = 1,3
        do vkk = 1,3
           do vll = 1,3
              T_star_tr(vii,vjj) = T_star_tr(vii,vjj) +&
         Stiff_sam(vii,vjj,vkk,vll,vi,vj,vk)*0.5*(A_inc(vkk,vll) - IDEN_2(vkk,vll))
           end do
        end do
     end do
  end do
   .
   .
   .
...