brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 94a269e Raw
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