Research Article
Using Coarrays to Parallelize Legacy Fortran Applications: Strategy and Case Study
Listing 8
Optimized collective sum routine.
| subroutine vector_co_sum_parallel(vector) | | real(rkind), intent(inout) :: vector(:)[*] | | real(rkind), allocatable :: temp(:) | | integer image, step | | allocate (temp, mold = vector) | | step = 2 | | do while (step/2 <= num_images()) | | sync all | | if (this_image() + step/2 <= num_images()) then | | temp = vector + vector[this_image() + step/2] | | else | | temp = vector | | end if | | sync all | | vector = temp | | step = step * 2 | | end do | | sync all | | if (this_image()/ = 1) vector = vector1 | | sync all | | end subroutine |
|