38 lines · plain
1! Test CUDA Fortran kernel do reduction2! RUN: bbc -emit-fir -fcuda -o - %s | FileCheck %s3 4module mod15contains6 subroutine host_sub()7 integer, parameter :: asize = 48 integer, device :: adev(asize) 9 integer :: ahost(asize)10 integer :: q11 integer, device :: add_reduce_var12 integer, device :: mul_reduce_var13 ! CHECK: %[[VAL_0:.*]] = fir.declare %{{.*}} {data_attr = #cuf.cuda<device>, uniq_name = "_QMmod1Fhost_subEadd_reduce_var"} : (!fir.ref<i32>) -> !fir.ref<i32>14 ! CHECK: %[[VAL_1:.*]] = fir.declare %{{.*}} {data_attr = #cuf.cuda<device>, uniq_name = "_QMmod1Fhost_subEmul_reduce_var"} : (!fir.ref<i32>) -> !fir.ref<i32>15 do i = 1, asize16 ahost(i) = i17 enddo18 adev = ahost 19 add_reduce_var = 0.020 mul_reduce_var = 1.021 ! CHECK: {{.*}} reduce(%[[VAL_0:.*]], %[[VAL_1:.*]] : !fir.ref<i32>, !fir.ref<i32> : [#fir.reduce_attr<add>, #fir.reduce_attr<multiply>]) {{.*}}22 !$cuf kernel do <<< *, * >>> reduce(+:add_reduce_var) reduce(*:mul_reduce_var)23 do i = 1, asize24 add_reduce_var = add_reduce_var + adev(i)25 mul_reduce_var = mul_reduce_var * adev(i)26 end do27 q = rsum28 ahost = adev 29 print *, q30 end31end32 33program test34 use mod135 implicit none36 call host_sub()37end program test38