! Common source for CUF parse tree and unparsing tests. !@cuf subroutine atcuf; end #ifdef _CUDA subroutine cudadefd; end #endif module m real, allocatable, pinned ::pa(:) contains attributes(device) subroutine devicesub; end attributes(device) real function devicefunc(); devicefunc = 1.; end attributes(global) subroutine globalsub; end attributes(grid_global) subroutine gridglobalsub; end attributes(host) subroutine hostsub; end attributes(global) launch_bounds(1, 2) subroutine lbsub; end attributes(global) cluster_dims(1, 2, 3) subroutine cdsub; end attributes(device) subroutine attrs attributes(device) :: devx1 real, device :: devx2 end subroutine subroutine test logical isPinned real, device :: a(10) real :: x, y, z !$cuf kernel do(1) <<<*, *, stream = 1>>> do j = 1, 10 end do !$cuf kernel do <<<1, (2, 3), stream = 1>>> do j = 1, 10 end do !$cuf kernel do do j = 1, 10 end do !$cuf kernel do <<<*, *>>> reduce(+:x,y) reduce(*:z) do j = 1, 10 x = x + a(j) y = y + a(j) z = z * a(j) end do call globalsub<<<1, 2>>> call globalsub<<<1, 2, 3>>> call globalsub<<<1, 2, 3, 4>>> call globalsub<<<1, 2, 0.9*10, 4>>> call globalsub<<<*,5>>> allocate(pa(32), pinned = isPinned) end subroutine end module