multithreading - Is it legal that the index for !$omp atomic different from its host's loop index variable? -


i came across question when learning how avoid data conflict multiple threads potential reading , writing using openmp directive !$atomic.

shown in text below code snippet made question. wondering if legal in fortran use different index (here j) !$atomic loop index variable i, 1 following directive !$omp parallel private(a,b) ? thanks.

    program main     ...     integer :: i,j     integer, dimension(10000) :: vx,vy,va,vb     ...     va=0 !$omp parallel private(j)     i=1,10000         j=merge(vx(i),vy(i),mod(i,2)==1) !$omp atomic update         va(j)=va(j)+vb(j)        end !$omp end parallel     ...     end program 

furthermore, ok loop on atomic directive?

    program main     ...     integer :: i,j     integer, dimension(10000) :: vx,vy     integer, dimension(12,10000) :: va,vb     ...     va=0 !$omp parallel private(j,k)     i=1,10000         j=merge(vx(i),vy(i),mod(i,2)==1)         k=1,12 !$omp atomic update         va(k,j)=va(k,j)+vb(k,j)          enddo     end !$omp end parallel     ...     end program 

yes, why not? update of memory address, there no difference. there wouldn't sense in using atomic in case, different threads have different values of i.

but, aware of race condition j writing more thread, should private.

your second example adds nothing new, same situation, still legal.


Comments

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -