brintos

brintos / llvm-project-archived public Read only

0
0
Text · 69.2 KiB · 2709719 Raw
2243 lines · plain
1!===-- module/cudedevice.f90 -----------------------------------------------===!2!3! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4! See https://llvm.org/LICENSE.txt for license information.5! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6!7!===------------------------------------------------------------------------===!8 9! CUDA Fortran procedures available in device subprogram10 11module cudadevice12  use __cuda_device13  use, intrinsic :: __fortran_builtins, only: dim3 => __builtin_dim314  use, intrinsic :: __fortran_builtins, only: c_devptr => __builtin_c_devptr15  use, intrinsic :: __fortran_builtins, only: c_devloc => __builtin_c_devloc16implicit none17 18  ! Synchronization Functions19 20  interface syncthreads21    procedure :: syncthreads22  end interface23 24  interface syncthreads_and25    attributes(device) integer function syncthreads_and_i4(value)26      integer(4), value :: value27    end function28    attributes(device) integer function syncthreads_and_l4(value)29      logical(4), value :: value30    end function31  end interface syncthreads_and32 33  interface syncthreads_count34    attributes(device) integer function syncthreads_count_i4(value)35      integer(4), value :: value36    end function37    attributes(device) integer function syncthreads_count_l4(value)38      logical(4), value :: value39    end function40  end interface syncthreads_count41 42  interface syncthreads_or43    attributes(device) integer function syncthreads_or_i4(value)44      integer(4), value :: value45    end function46    attributes(device) integer function syncthreads_or_l4(value)47      logical(4), value :: value48    end function49  end interface syncthreads_or50 51  interface52    attributes(device) subroutine syncwarp(mask)53      integer, value :: mask54    end subroutine55  end interface56 57  ! Memory Fences58 59  interface60    attributes(device) subroutine threadfence()61    end subroutine62  end interface63 64  interface65    attributes(device) subroutine threadfence_block()66    end subroutine67  end interface68 69  interface70    attributes(device) subroutine threadfence_system()71    end subroutine72  end interface73 74  ! Math API75 76  interface __fadd_rn77   attributes(device) real function __fadd_rn(a,b) bind(c, name='__nv_fadd_rn')78  !dir$ ignore_tkr (d) a, (d) b79    real, value :: a, b80   end function81  end interface82  83  interface __fadd_rz84   attributes(device) real function __fadd_rz(a,b) bind(c, name='__nv_fadd_rz')85  !dir$ ignore_tkr (d) a, (d) b86    real, value :: a, b87   end function88  end interface89 90  interface91    attributes(device) function __fadd_rd(x, y) bind(c, name='__nv_fadd_rd')92      real, intent(in), value :: x, y93      real :: __fadd_rd94    end function95  end interface96 97  interface98    attributes(device) function __fadd_ru(x, y) bind(c, name='__nv_fadd_ru')99      real, intent(in), value :: x, y100      real :: __fadd_ru101    end function102  end interface103 104  interface __fmul_rn105   attributes(device) real function __fmul_rn(a,b) bind(c, name='__nv_fmul_rn')106  !dir$ ignore_tkr (d) a, (d) b107    real, value :: a, b108   end function109  end interface110 111  interface __fmul_rz112   attributes(device) real function __fmul_rz(a,b) bind(c, name='__nv_fmul_rz')113  !dir$ ignore_tkr (d) a, (d) b114    real, value :: a, b115   end function116  end interface117 118  interface __fmul_ru119   attributes(device) real function __fmul_ru(a,b) bind(c, name='__nv_fmul_ru')120  !dir$ ignore_tkr (d) a, (d) b121    real, value :: a, b122   end function123  end interface124 125  interface __fmul_rd126   attributes(device) real function __fmul_rd(a,b) bind(c, name='__nv_fmul_rd')127  !dir$ ignore_tkr (d) a, (d) b128    real, value :: a, b129   end function130  end interface131 132  interface __fmaf_rn133   attributes(device) real function __fmaf_rn(a,b,c) bind(c, name='__nv_fmaf_rn')134  !dir$ ignore_tkr (d) a, (d) b, (d) c135    real, value :: a, b, c136   end function137  end interface138 139  interface __fmaf_rz140   attributes(device) real function __fmaf_rz(a,b,c) bind(c, name='__nv_fmaf_rz')141  !dir$ ignore_tkr (d) a, (d) b, (d) c142    real, value :: a, b, c143   end function144  end interface145  146  interface __fmaf_ru147   attributes(device) real function __fmaf_ru(a,b,c) bind(c, name='__nv_fmaf_ru')148  !dir$ ignore_tkr (d) a, (d) b, (d) c149    real, value :: a, b, c150   end function151  end interface152  153  interface __fmaf_rd154   attributes(device) real function __fmaf_rd(a,b,c) bind(c, name='__nv_fmaf_rd')155  !dir$ ignore_tkr (d) a, (d) b, (d) c156    real, value :: a, b, c157   end function158  end interface159 160  interface __frcp_rn161   attributes(device) real function __frcp_rn(a) bind(c, name='__nv_frcp_rn')162  !dir$ ignore_tkr (d) a163    real, value :: a164   end function165  end interface166 167  interface __frcp_rz168   attributes(device) real function __frcp_rz(a) bind(c, name='__nv_frcp_rz')169  !dir$ ignore_tkr (d) a170    real, value :: a171   end function172  end interface173 174  interface __frcp_ru175   attributes(device) real function __frcp_ru(a) bind(c, name='__nv_frcp_ru')176  !dir$ ignore_tkr (d) a177    real, value :: a178   end function179  end interface180 181  interface __frcp_rd182   attributes(device) real function __frcp_rd(a) bind(c, name='__nv_frcp_rd')183  !dir$ ignore_tkr (d) a184    real, value :: a185   end function186  end interface187 188  interface __fsqrt_rn189   attributes(device) real function __fsqrt_rn(a) bind(c, name='__nv_fsqrt_rn')190  !dir$ ignore_tkr (d) a191    real, value :: a192   end function193  end interface194 195  interface __fsqrt_rz196   attributes(device) real function __fsqrt_rz(a) bind(c, name='__nv_fsqrt_rz')197  !dir$ ignore_tkr (d) a198    real, value :: a199   end function200  end interface201 202  interface __fsqrt_ru203   attributes(device) real function __fsqrt_ru(a) bind(c, name='__nv_fsqrt_ru')204  !dir$ ignore_tkr (d) a205    real, value :: a206   end function207  end interface208 209  interface __fsqrt_rd210   attributes(device) real function __fsqrt_rd(a) bind(c, name='__nv_fsqrt_rd')211  !dir$ ignore_tkr (d) a212    real, value :: a213   end function214  end interface215 216  interface __fdiv_rn217   attributes(device) real function __fdiv_rn(a,b) bind(c, name='__nv_fdiv_rn')218  !dir$ ignore_tkr (d) a, (d) b219    real, value :: a, b220   end function221  end interface222 223  interface __fdiv_rz224   attributes(device) real function __fdiv_rz(a,b) bind(c, name='__nv_fdiv_rz')225  !dir$ ignore_tkr (d) a, (d) b226    real, value :: a, b227   end function228  end interface229 230  interface __fdiv_ru231   attributes(device) real function __fdiv_ru(a,b) bind(c, name='__nv_fdiv_ru')232  !dir$ ignore_tkr (d) a, (d) b233    real, value :: a, b234   end function235  end interface236 237  interface __fdiv_rd238   attributes(device) real function __fdiv_rd(a,b) bind(c, name='__nv_fdiv_rd')239  !dir$ ignore_tkr (d) a, (d) b240    real, value :: a, b241   end function242  end interface243 244  interface __dadd_rn245   attributes(device) real(8) function __dadd_rn(a,b) bind(c, name='__nv_dadd_rn')246  !dir$ ignore_tkr (d) a, (d) b247    real(8), value :: a, b248   end function249  end interface250 251  interface __dadd_rz252   attributes(device) real(8) function __dadd_rz(a,b) bind(c, name='__nv_dadd_rz')253  !dir$ ignore_tkr (d) a, (d) b254    real(8), value :: a, b255   end function256  end interface257 258  interface __dadd_ru259   attributes(device) real(8) function __dadd_ru(a,b) bind(c, name='__nv_dadd_ru')260  !dir$ ignore_tkr (d) a, (d) b261    real(8), value :: a, b262   end function263  end interface264 265  interface __dadd_rd266   attributes(device) real(8) function __dadd_rd(a,b) bind(c, name='__nv_dadd_rd')267  !dir$ ignore_tkr (d) a, (d) b268    real(8), value :: a, b269   end function270  end interface271 272  interface __dmul_rn273   attributes(device) real(8) function __dmul_rn(a,b) bind(c, name='__nv_dmul_rn')274  !dir$ ignore_tkr (d) a, (d) b275    real(8), value :: a, b276   end function277  end interface278 279  interface __dmul_rz280   attributes(device) real(8) function __dmul_rz(a,b) bind(c, name='__nv_dmul_rz')281  !dir$ ignore_tkr (d) a, (d) b282    real(8), value :: a, b283   end function284  end interface285 286  interface __dmul_ru287   attributes(device) real(8) function __dmul_ru(a,b) bind(c, name='__nv_dmul_ru')288  !dir$ ignore_tkr (d) a, (d) b289    real(8), value :: a, b290   end function291  end interface292 293  interface __dmul_rd294   attributes(device) real(8) function __dmul_rd(a,b) bind(c, name='__nv_dmul_rd')295  !dir$ ignore_tkr (d) a, (d) b296    real(8), value :: a, b297   end function298  end interface299 300  interface __fma_rn301   attributes(device) real(8) function __fma_rn(a,b,c) bind(c, name='__nv_fma_rn')302  !dir$ ignore_tkr (d) a, (d) b303    real(8), value :: a, b, c304   end function305  end interface306 307  interface __fma_rz308   attributes(device) real(8) function __fma_rz(a,b,c) bind(c, name='__nv_fma_rz')309  !dir$ ignore_tkr (d) a, (d) b310    real(8), value :: a, b, c311   end function312  end interface313 314  interface __fma_ru315   attributes(device) real(8) function __fma_ru(a,b,c) bind(c, name='__nv_fma_ru')316  !dir$ ignore_tkr (d) a, (d) b317    real(8), value :: a, b, c318   end function319  end interface320 321  interface __fma_rd322   attributes(device) real(8) function __fma_rd(a,b,c) bind(c, name='__nv_fma_rd')323  !dir$ ignore_tkr (d) a, (d) b324    real(8), value :: a, b, c325   end function326  end interface327 328  interface rsqrt329    attributes(device) real(4) function rsqrtf(x) bind(c,name='__nv_rsqrtf')330      real(4), value :: x331    end function332    attributes(device) real(8) function rsqrt(x) bind(c,name='__nv_rsqrt')333      real(8), value :: x334    end function335  end interface336 337  interface saturate338    attributes(device) real function __saturatef(r) bind(c, name='__nv_saturatef')339      !dir$ ignore_tkr (d) r340      real, value :: r341    end function342  end interface343 344  interface __sad345    attributes(device) integer function __sad(i,j,k) bind(c, name='__nv_sad')346      !dir$ ignore_tkr (d) i, (d) j, (d) k347      integer, value :: i,j,k348    end function349  end interface350 351  interface __usad352    attributes(device) integer function __usad(i,j,k) bind(c, name='__nv_usad')353      !dir$ ignore_tkr (d) i, (d) j, (d) k354      integer, value :: i,j,k355    end function356  end interface357  358  interface signbit359    attributes(device) integer(4) function signbitf(x) bind(c,name='__nv_signbitf')360      real(4), value :: x361    end function362    attributes(device) integer(4) function signbit(x) bind(c,name='__nv_signbitd')363      real(8), value :: x364    end function365  end interface366 367  interface368    attributes(device) subroutine sincosf(x, y, z) bind(c,name='__nv_sincosf')369      real(4), value :: x370      real(4), device :: y371      real(4), device :: z372    end subroutine373  end interface374  interface375    attributes(device) subroutine sincos(x, y, z) bind(c,name='__nv_sincos')376      real(8), value :: x377      real(8), device :: y378      real(8), device :: z379    end subroutine380  end interface381  interface sincos382    procedure :: sincosf383    procedure :: sincos384  end interface385 386  interface387    attributes(device) subroutine sincospif(x, y, z) bind(c,name='__nv_sincospif')388      real(4), value :: x389      real(4), device :: y390      real(4), device :: z391    end subroutine392  end interface393  interface394    attributes(device) subroutine sincospi(x, y, z) bind(c,name='__nv_sincospi')395      real(8), value :: x396      real(8), device :: y397      real(8), device :: z398    end subroutine399  end interface400  interface sincospi401    procedure :: sincospif402    procedure :: sincospi403  end interface404 405  interface406    attributes(device) real(4) function __cosf(x) bind(c, name='__nv_fast_cosf')407      real(4), value :: x408    end function409  end interface410 411  interface __exp10f412    attributes(device) real function __exp10f(r) bind(c, name='__nv_fast_exp10f')413      !dir$ ignore_tkr (d) r414      real, value :: r415    end function416  end interface417 418  interface __expf419    attributes(device) real function __expf(r) bind(c, name='__nv_fast_expf')420      !dir$ ignore_tkr (d) r421      real, value :: r422    end function423  end interface424  425  interface __fdividef426    attributes(device) real function __fdividef(r,d) bind(c, name='__nv_fast_fdividef')427      !dir$ ignore_tkr (d) r, (d) d428      real, value :: r,d429    end function430  end interface431 432  interface __log10f433    attributes(device) real function __log10f(r) bind(c, name='__nv_fast_log10f')434      !dir$ ignore_tkr (d) r435      real, value :: r436    end function437  end interface438 439  interface __log2f440    attributes(device) real function __log2f(r) bind(c, name='__nv_fast_log2f')441      !dir$ ignore_tkr (d) r442      real, value :: r443    end function444  end interface445 446  interface __logf447    attributes(device) real function __logf(r) bind(c, name='__nv_fast_logf')448      !dir$ ignore_tkr (d) r449      real, value :: r450    end function451  end interface452 453  interface454    attributes(device) real(4) function __powf(x,y) bind(c, name='__nv_fast_powf')455      !dir$ ignore_tkr (d) x, y456      real(4), value :: x, y457    end function458  end interface459 460  interface __sincosf461    attributes(device) subroutine __sincosf(r, s, c) bind(c, name='__nv_fast_sincosf')462      !dir$ ignore_tkr (d) r, (d) s, (d) c463      real, value :: r464      real :: s, c465    end subroutine466  end interface467 468  interface __sinf469    attributes(device) real function __sinf(r) bind(c, name='__nv_fast_sinf')470      !dir$ ignore_tkr (d) r471      real, value :: r472    end function473  end interface474 475  interface __tanf476    attributes(device) real function __tanf(r) bind(c, name='__nv_fast_tanf')477      !dir$ ignore_tkr (d) r478      real, value :: r479    end function480  end interface481 482  interface483    attributes(device) real(4) function cospif(x) bind(c,name='__nv_cospif')484      real(4), value :: x485    end function486  end interface487  interface488    attributes(device) real(8) function cospi(x) bind(c,name='__nv_cospi')489      real(8), value :: x490    end function491  end interface492  interface cospi493    procedure :: cospif494    procedure :: cospi495  end interface496 497  interface  498    attributes(device) real(4) function sinpif(x) bind(c,name='__nv_sinpif')499      real(4), value :: x500    end function501  end interface502  interface503    attributes(device) real(8) function sinpi(x) bind(c,name='__nv_sinpi')504      real(8), value :: x505    end function506  end interface507  interface sinpi508    procedure :: sinpif509    procedure :: sinpi510  end interface511  512  interface mulhi513   attributes(device) integer function __mulhi(i,j) bind(c,name='__nv_mulhi')514  !dir$ ignore_tkr (d) i, (d) j515    integer, value :: i,j516   end function517  end interface518 519  interface umulhi520   attributes(device) integer function __umulhi(i,j) bind(c,name='__nv_umulhi')521  !dir$ ignore_tkr (d) i, (d) j522    integer, value :: i,j523   end function524  end interface525  526  interface mul64hi527   attributes(device) integer(8) function __mul64hi(i,j) bind(c,name='__nv_mul64hi')528  !dir$ ignore_tkr (d) i, (d) j529    integer(8), value :: i,j530   end function531  end interface532  533  interface umul64hi534   attributes(device) integer(8) function __umul64hi(i,j) bind(c,name='__nv_umul64hi')535  !dir$ ignore_tkr (d) i, (d) j536    integer(8), value :: i,j537   end function538  end interface539 540  interface int_as_float541    attributes(device) real function __int_as_float(i) bind(c, name='__nv_int_as_float')542      !dir$ ignore_tkr (d) i543      integer, value :: i544    end function545  end interface546 547  interface float_as_int548    attributes(device) integer function __float_as_int(i) bind(c, name='__nv_float_as_int')549      !dir$ ignore_tkr (d) i550      real, value :: i551    end function552  end interface553 554  interface __float2half_rn555    attributes(device) real(2) function __float2half_rn(r) bind(c, name='__nv_float2half_rn')556      !dir$ ignore_tkr (d) r557      real, value :: r558    end function559  end interface560 561  interface __float2int_rd562    attributes(device) integer function __float2int_rd(r) bind(c, name='__nv_float2int_rd')563      !dir$ ignore_tkr (d) r564      real, value :: r565    end function566  end interface567 568  interface __float2int_rn569    attributes(device) integer function __float2int_rn(r) bind(c, name='__nv_float2int_rn')570      !dir$ ignore_tkr (d) r571      real, value :: r572    end function573  end interface574 575  interface __float2int_ru576    attributes(device) integer function __float2int_ru(r) bind(c, name='__nv_float2int_ru')577      !dir$ ignore_tkr (d) r578      real, value :: r579    end function580  end interface581 582  interface __float2int_rz583    attributes(device) integer function __float2int_rz(r) bind(c, name='__nv_float2int_rz')584      !dir$ ignore_tkr (d) r585      real, value :: r586    end function587  end interface588 589  interface __float2uint_rd590    attributes(device) integer function __float2uint_rd(r) bind(c, name='__nv_float2uint_rd')591      !dir$ ignore_tkr (d) r592      real, value :: r593    end function594  end interface595 596  interface __float2uint_rn597    attributes(device) integer function __float2uint_rn(r) bind(c, name='__nv_float2uint_rn')598      !dir$ ignore_tkr (d) r599      real, value :: r600    end function601  end interface602 603  interface __float2uint_ru604    attributes(device) integer function __float2uint_ru(r) bind(c, name='__nv_float2uint_ru')605      !dir$ ignore_tkr (d) r606      real, value :: r607    end function608  end interface609 610  interface __float2uint_rz611    attributes(device) integer function __float2uint_rz(r) bind(c, name='__nv_float2uint_rz')612      !dir$ ignore_tkr (d) r613      real, value :: r614    end function615  end interface616 617  interface __float2ll_rd618    attributes(device) integer(8) function __float2ll_rd(r) bind(c, name='__nv_float2ll_rd')619      !dir$ ignore_tkr (d) r620      real, value :: r621    end function622  end interface623 624  interface __float2ll_rn625    attributes(device) integer(8) function __float2ll_rn(r) bind(c, name='__nv_float2ll_rn')626      !dir$ ignore_tkr (d) r627      real, value :: r628    end function629  end interface630 631  interface __float2ll_ru632    attributes(device) integer(8) function __float2ll_ru(r) bind(c, name='__nv_float2ll_ru')633      !dir$ ignore_tkr (d) r634      real, value :: r635    end function636  end interface637 638  interface __float2ll_rz639    attributes(device) integer(8) function __float2ll_rz(r) bind(c, name='__nv_float2ll_rz')640      !dir$ ignore_tkr (d) r641      real, value :: r642    end function643  end interface644 645  interface __half2float646    attributes(device) real function __half2float(i) bind(c, name='__nv_half2float')647      !dir$ ignore_tkr (d) i648      real(2), value :: i649    end function650  end interface651 652  interface double_as_longlong653    attributes(device) integer(8) function __double_as_longlong(i) bind(c, name='__nv_double_as_longlong')654      !dir$ ignore_tkr (d) i655      real(8), value :: i656    end function657  end interface658 659  interface longlong_as_double660    attributes(device) real(8) function __longlong_as_double(i) bind(c, name='__nv_longlong_as_double')661      !dir$ ignore_tkr (d) i662      integer(8), value :: i663    end function664  end interface665 666  interface __double2int_rd667    attributes(device) integer function __double2int_rd(r) bind(c, name='__nv_double2int_rd')668      !dir$ ignore_tkr (d) r669      double precision, value :: r670    end function671  end interface672 673  interface __double2int_rn674    attributes(device) integer function __double2int_rn(r) bind(c, name='__nv_double2int_rn')675      !dir$ ignore_tkr (d) r676      double precision, value :: r677    end function678  end interface679 680  interface __double2int_ru681    attributes(device) integer function __double2int_ru(r) bind(c, name='__nv_double2int_ru')682      !dir$ ignore_tkr (d) r683      double precision, value :: r684    end function685  end interface686 687  interface __double2int_rz688    attributes(device) integer function __double2int_rz(r) bind(c, name='__nv_double2int_rz')689      !dir$ ignore_tkr (d) r690      double precision, value :: r691    end function692  end interface693 694  interface __double2uint_rd695    attributes(device) integer function __double2uint_rd(r) bind(c, name='__nv_double2uint_rd')696      !dir$ ignore_tkr (d) r697      double precision, value :: r698    end function699  end interface700 701  interface __double2uint_rn702    attributes(device) integer function __double2uint_rn(r) bind(c, name='__nv_double2uint_rn')703      !dir$ ignore_tkr (d) r704      double precision, value :: r705    end function706  end interface707 708  interface __double2uint_ru709    attributes(device) integer function __double2uint_ru(r) bind(c, name='__nv_double2uint_ru')710      !dir$ ignore_tkr (d) r711      double precision, value :: r712    end function713  end interface714 715  interface __double2uint_rz716    attributes(device) integer function __double2uint_rz(r) bind(c, name='__nv_double2uint_rz')717      !dir$ ignore_tkr (d) r718      double precision, value :: r719    end function720  end interface721 722  interface __double2float_rn723    attributes(device) real function __double2float_rn(r) bind(c, name='__nv_double2float_rn')724      !dir$ ignore_tkr (d) r725      double precision, value :: r726    end function727  end interface728 729  interface __double2float_rz730    attributes(device) real function __double2float_rz(r) bind(c, name='__nv_double2float_rz')731      !dir$ ignore_tkr (d) r732      double precision, value :: r733    end function734  end interface735 736  interface __double2float_ru737    attributes(device) real function __double2float_ru(r) bind(c, name='__nv_double2float_ru')738      !dir$ ignore_tkr (d) r739      double precision, value :: r740    end function741  end interface742 743  interface __double2float_rd744    attributes(device) real function __double2float_rd(r) bind(c, name='__nv_double2float_rd')745      !dir$ ignore_tkr (d) r746      double precision, value :: r747    end function748  end interface749 750  interface __double2loint751    attributes(device) integer function __double2loint(r) bind(c, name='__nv_double2loint')752      !dir$ ignore_tkr (d) r753      double precision, value :: r754    end function755  end interface756 757  interface __double2hiint758    attributes(device) integer function __double2hiint(r) bind(c, name='__nv_double2hiint')759      !dir$ ignore_tkr (d) r760      double precision, value :: r761    end function762  end interface763 764  interface __hiloint2double765    attributes(device) double precision function __hiloint2double(i, j) bind(c, name='__nv_hiloint2double')766      !dir$ ignore_tkr (d) i, (d) j767      integer, value :: i, j768    end function769  end interface770 771  interface __int2float_rd772    attributes(device) real function __int2float_rd(i) bind(c, name='__nv_int2float_rd')773      !dir$ ignore_tkr (d) i774      integer, value :: i775    end function776  end interface777 778  interface __int2float_rn779    attributes(device) real function __int2float_rn(i) bind(c, name='__nv_int2float_rn')780      !dir$ ignore_tkr (d) i781      integer, value :: i782    end function783  end interface784 785  interface __int2float_ru786    attributes(device) real function __int2float_ru(i) bind(c, name='__nv_int2float_ru')787      !dir$ ignore_tkr (d) i788      integer, value :: i789    end function790  end interface791 792  interface __int2float_rz793    attributes(device) real function __int2float_rz(i) bind(c, name='__nv_int2float_rz')794      !dir$ ignore_tkr (d) i795      integer, value :: i796    end function797  end interface798 799  interface __int2double_rn800    attributes(device) double precision function __int2double_rn(i) bind(c, name='__nv_int2double_rn')801      !dir$ ignore_tkr (d) i802      integer, value :: i803    end function804  end interface805 806  interface __uint2float_rd807    attributes(device) real function __uint2float_rd(i) bind(c, name='__nv_uint2float_rd')808      !dir$ ignore_tkr (d) i809      integer, value :: i810    end function811  end interface812 813  interface __uint2float_rn814    attributes(device) real function __uint2float_rn(i) bind(c, name='__nv_uint2float_rn')815      !dir$ ignore_tkr (d) i816      integer, value :: i817    end function818  end interface819 820  interface __uint2float_ru821    attributes(device) real function __uint2float_ru(i) bind(c, name='__nv_uint2float_ru')822      !dir$ ignore_tkr (d) i823      integer, value :: i824    end function825  end interface826 827  interface __uint2float_rz828    attributes(device) real function __uint2float_rz(i) bind(c, name='__nv_uint2float_rz')829      !dir$ ignore_tkr (d) i830      integer, value :: i831    end function832  end interface833 834  interface __uint2double_rn835    attributes(device) double precision function __uint2double_rn(i) bind(c, name='__nv_uint2double_rn')836      !dir$ ignore_tkr (d) i837      integer, value :: i838    end function839  end interface840 841  interface __double2ll_rd842    attributes(device) integer(8) function __double2ll_rd(r) bind(c, name='__nv_double2ll_rd')843      !dir$ ignore_tkr (d) r844      double precision, value :: r845    end function846  end interface847 848  interface __double2ll_rn849    attributes(device) integer(8) function __double2ll_rn(r) bind(c, name='__nv_double2ll_rn')850      !dir$ ignore_tkr (d) r851      double precision, value :: r852    end function853  end interface854 855  interface __double2ll_ru856    attributes(device) integer(8) function __double2ll_ru(r) bind(c, name='__nv_double2ll_ru')857      !dir$ ignore_tkr (d) r858      double precision, value :: r859    end function860  end interface861 862  interface __double2ll_rz863    attributes(device) integer(8) function __double2ll_rz(r) bind(c, name='__nv_double2ll_rz')864      !dir$ ignore_tkr (d) r865      double precision, value :: r866    end function867  end interface868 869  interface __double2ull_rd870    attributes(device) integer(8) function __double2ull_rd(r) bind(c, name='__nv_double2ull_rd')871      !dir$ ignore_tkr (d) r872      double precision, value :: r873    end function874  end interface875 876  interface __double2ull_rn877    attributes(device) integer(8) function __double2ull_rn(r) bind(c, name='__nv_double2ull_rn')878      !dir$ ignore_tkr (d) r879      double precision, value :: r880    end function881  end interface882 883  interface __double2ull_ru884    attributes(device) integer(8) function __double2ull_ru(r) bind(c, name='__nv_double2ull_ru')885      !dir$ ignore_tkr (d) r886      double precision, value :: r887    end function888  end interface889 890  interface __double2ull_rz891    attributes(device) integer(8) function __double2ull_rz(r) bind(c, name='__nv_double2ull_rz')892      !dir$ ignore_tkr (d) r893      double precision, value :: r894    end function895  end interface896 897  interface __ll2float_rd898    attributes(device) real function __ll2float_rd(i) bind(c, name='__nv_ll2float_rd')899      !dir$ ignore_tkr (d) i900      integer(8), value :: i901    end function902  end interface903 904  interface __ll2float_rn905    attributes(device) real function __ll2float_rn(i) bind(c, name='__nv_ll2float_rn')906      !dir$ ignore_tkr (d) i907      integer(8), value :: i908    end function909    end interface910 911  interface __ll2float_ru912    attributes(device) real function __ll2float_ru(i) bind(c, name='__nv_ll2float_ru')913      !dir$ ignore_tkr (d) i914      integer(8), value :: i915    end function916  end interface917 918  interface __ll2float_rz919    attributes(device) real function __ll2float_rz(i) bind(c, name='__nv_ll2float_rz')920      !dir$ ignore_tkr (d) i921      integer(8), value :: i922    end function923  end interface924 925  interface __ll2double_rd926    attributes(device) double precision function __ll2double_rd(i) bind(c, name='__nv_ll2double_rd')927      !dir$ ignore_tkr (d) i928      integer(8), value :: i929    end function930  end interface931 932  interface __ll2double_rn933    attributes(device) double precision function __ll2double_rn(i) bind(c, name='__nv_ll2double_rn')934      !dir$ ignore_tkr (d) i935      integer(8), value :: i936    end function937  end interface938 939  interface __ll2double_ru940    attributes(device) double precision function __ll2double_ru(i) bind(c, name='__nv_ll2double_ru')941      !dir$ ignore_tkr (d) i942      integer(8), value :: i943    end function944  end interface945 946  interface __ll2double_rz947    attributes(device) double precision function __ll2double_rz(i) bind(c, name='__nv_ll2double_rz')948      !dir$ ignore_tkr (d) i949      integer(8), value :: i950    end function951  end interface952 953  interface __ull2double_rd954    attributes(device) double precision function __ull2double_rd(i) bind(c, name='__nv_ull2double_rd')955      !dir$ ignore_tkr (d) i956      integer(8), value :: i957    end function958  end interface959 960  interface __ull2double_rn961    attributes(device) double precision function __ull2double_rn(i) bind(c, name='__nv_ull2double_rn')962      !dir$ ignore_tkr (d) i963      integer(8), value :: i964    end function965  end interface966 967  interface __ull2double_ru968    attributes(device) double precision function __ull2double_ru(i) bind(c, name='__nv_ull2double_ru')969      !dir$ ignore_tkr (d) i970      integer(8), value :: i971    end function972  end interface973 974  interface __ull2double_rz975    attributes(device) double precision function __ull2double_rz(i) bind(c, name='__nv_ull2double_rz')976      !dir$ ignore_tkr (d) i977      integer(8), value :: i978    end function979  end interface980 981  interface __ull2float_rd982    attributes(device) real function __ull2float_rd(i) bind(c, name='__nv_ull2float_rd')983      !dir$ ignore_tkr (d) i984      integer(8), value :: i985    end function986  end interface987 988  interface __ull2float_rn989    attributes(device) real function __ull2float_rn(i) bind(c, name='__nv_ull2float_rn')990      !dir$ ignore_tkr (d) i991      integer(8), value :: i992    end function993  end interface994 995  interface __ull2float_ru996    attributes(device) real function __ull2float_ru(i) bind(c, name='__nv_ull2float_ru')997      !dir$ ignore_tkr (d) i998      integer(8), value :: i999    end function1000  end interface1001 1002  interface __ull2float_rz1003    attributes(device) real function __ull2float_rz(i) bind(c, name='__nv_ull2float_rz')1004      !dir$ ignore_tkr (d) i1005      integer(8), value :: i1006    end function1007  end interface1008 1009  interface __mul241010    attributes(device) integer function __mul24(i,j) bind(c, name='__nv_mul24')1011      !dir$ ignore_tkr (d) i, (d) j1012      integer, value :: i,j1013    end function1014  end interface1015 1016  interface __umul241017    attributes(device) integer function __umul24(i,j) bind(c, name='__nv_umul24')1018      !dir$ ignore_tkr (d) i, (d) j1019      integer, value :: i,j1020    end function1021  end interface1022 1023  interface __drcp_rd1024    attributes(device) double precision function __drcp_rd(x) bind(c, name='__nv_drcp_rd')1025      !dir$ ignore_tkr (d) x1026      double precision, value :: x1027    end function1028  end interface1029 1030  interface __drcp_rn1031    attributes(device) double precision function __drcp_rn(x) bind(c, name='__nv_drcp_rn')1032      !dir$ ignore_tkr (d) x1033      double precision, value :: x1034    end function1035  end interface1036 1037  interface __drcp_ru1038    attributes(device) double precision function __drcp_ru(x) bind(c, name='__nv_drcp_ru')1039      !dir$ ignore_tkr (d) x1040      double precision, value :: x1041    end function1042  end interface1043 1044  interface __drcp_rz1045    attributes(device) double precision function __drcp_rz(x) bind(c, name='__nv_drcp_rz')1046      !dir$ ignore_tkr (d) x1047      double precision, value :: x1048    end function1049  end interface1050 1051  interface __dsqrt_rd1052    attributes(device) double precision function __dsqrt_rd(x) bind(c, name='__nv_dsqrt_rd')1053      !dir$ ignore_tkr (d) x1054      double precision, value :: x1055    end function1056  end interface1057 1058  interface __dsqrt_rn1059    attributes(device) double precision function __dsqrt_rn(x) bind(c, name='__nv_dsqrt_rn')1060      !dir$ ignore_tkr (d) x1061      double precision, value :: x1062    end function1063  end interface1064 1065  interface __dsqrt_ru1066    attributes(device) double precision function __dsqrt_ru(x) bind(c, name='__nv_dsqrt_ru')1067      !dir$ ignore_tkr (d) x1068      double precision, value :: x1069    end function1070  end interface1071 1072  interface __dsqrt_rz1073    attributes(device) double precision function __dsqrt_rz(x) bind(c, name='__nv_dsqrt_rz')1074      !dir$ ignore_tkr (d) x1075      double precision, value :: x1076    end function1077  end interface1078 1079  interface __ddiv_rn1080    attributes(device) double precision function __ddiv_rn(x,y) bind(c, name='__nv_ddiv_rn')1081      !dir$ ignore_tkr (d) x, (d) y1082      double precision, value :: x, y1083    end function1084  end interface1085 1086  interface __ddiv_rz1087    attributes(device) double precision function __ddiv_rz(x,y) bind(c, name='__nv_ddiv_rz')1088      !dir$ ignore_tkr (d) x, (d) y1089      double precision, value :: x, y1090    end function1091  end interface1092 1093  interface __ddiv_ru1094    attributes(device) double precision function __ddiv_ru(x,y) bind(c, name='__nv_ddiv_ru')1095      !dir$ ignore_tkr (d) x, (d) y1096      double precision, value :: x, y1097    end function1098  end interface1099 1100  interface __ddiv_rd1101    attributes(device) double precision function __ddiv_rd(x,y) bind(c, name='__nv_ddiv_rd')1102      !dir$ ignore_tkr (d) x, (d) y1103      double precision, value :: x, y1104    end function1105  end interface1106 1107  interface __clz1108    attributes(device) integer function __clz(i) bind(c, name='__nv_clz')1109      !dir$ ignore_tkr (d) i1110      integer, value :: i1111    end function1112    attributes(device) integer function __clzll(i) bind(c, name='__nv_clzll')1113      !dir$ ignore_tkr (d) i1114      integer(8), value :: i1115    end function1116  end interface1117 1118  interface __ffs1119    attributes(device) integer function __ffs(i) bind(c, name='__nv_ffs')1120      !dir$ ignore_tkr (d) i1121      integer, value :: i1122    end function1123    attributes(device) integer function __ffsll(i) bind(c, name='__nv_ffsll')1124      !dir$ ignore_tkr (d) i1125      integer(8), value :: i1126    end function1127  end interface1128 1129  interface __popc1130    attributes(device) integer function __popc(i) bind(c, name='__nv_popc')1131      !dir$ ignore_tkr (d) i1132      integer, value :: i1133    end function1134    attributes(device) integer function __popcll(i) bind(c, name='__nv_popcll')1135      !dir$ ignore_tkr (d) i1136      integer(8), value :: i1137    end function1138  end interface1139 1140  interface __brev1141    attributes(device) integer function __brev(i) bind(c, name='__nv_brev')1142      !dir$ ignore_tkr (d) i1143      integer, value :: i1144    end function1145    attributes(device) integer(8) function __brevll(i) bind(c, name ='__nv_brevll')1146      !dir$ ignore_tkr (d) i1147      integer(8), value :: i1148    end function1149  end interface1150 1151  ! Atomic Operations1152 1153  interface atomicadd1154    attributes(device) pure integer function atomicaddi(address, val)1155  !dir$ ignore_tkr (d) address, (d) val1156    integer, intent(inout) :: address1157    integer, value :: val1158    end function1159    attributes(device) pure real function atomicaddf(address, val)1160  !dir$ ignore_tkr (d) address, (d) val1161    real, intent(inout) :: address1162    real, value :: val1163    end function1164    attributes(device) pure real(8) function atomicaddd(address, val)1165  !dir$ ignore_tkr (d) address, (d) val1166    real(8), intent(inout) :: address1167    real(8), value :: val1168    end function1169    attributes(device) pure integer(8) function atomicaddl(address, val)1170  !dir$ ignore_tkr (d) address, (d) val1171    integer(8), intent(inout) :: address1172    integer(8), value :: val1173    end function1174    attributes(device) pure integer(4) function atomicaddr2(address, val)1175      !dir$ ignore_tkr (rd) address, (d) val1176      real(2), dimension(2), intent(inout) :: address1177      real(2), dimension(2), intent(in) :: val1178    end function1179  end interface1180 1181  interface atomicaddvector1182    attributes(device) pure function atomicaddvector_r2x2(address, val) result(z)1183      !dir$ ignore_tkr (rd) address, (d) val1184      real(2), dimension(2), intent(inout) :: address1185      real(2), dimension(2), intent(in) :: val1186      real(2), dimension(2) :: z1187    end function1188 1189    attributes(device) pure function atomicaddvector_r4x2(address, val) result(z)1190      !dir$ ignore_tkr (rd) address, (d) val1191      real(4), dimension(2), intent(inout) :: address1192      real(4), dimension(2), intent(in) :: val1193      real(4), dimension(2) :: z1194    end function1195  end interface1196 1197  interface atomicaddreal4x21198    attributes(device) pure function atomicadd_r4x2(address, val) result(z)1199      !dir$ ignore_tkr (rd) address, (d) val1200      real(4), dimension(2), intent(inout) :: address1201      real(4), dimension(2), intent(in) :: val1202      real(4), dimension(2) :: z1203    end function1204  end interface1205 1206  interface atomicaddreal4x41207    attributes(device) pure function atomicadd_r4x4(address, val) result(z)1208      !dir$ ignore_tkr (rd) address, (d) val1209      real(4), dimension(4), intent(inout) :: address1210      real(4), dimension(4), intent(in) :: val1211      real(4), dimension(4) :: z1212    end function1213  end interface1214 1215  interface atomicsub1216    attributes(device) pure integer function atomicsubi(address, val)1217  !dir$ ignore_tkr (d) address, (d) val1218    integer, intent(inout) :: address1219    integer, value :: val1220    end function1221    attributes(device) pure real function atomicsubf(address, val)1222  !dir$ ignore_tkr (d) address, (d) val1223    real, intent(inout) :: address1224    real, value :: val1225    end function1226    attributes(device) pure real(8) function atomicsubd(address, val)1227  !dir$ ignore_tkr (d) address, (d) val1228    real(8), intent(inout) :: address1229    real(8), value :: val1230    end function1231    attributes(device) pure integer(8) function atomicsubl(address, val)1232  !dir$ ignore_tkr (d) address, (dk) val1233    integer(8), intent(inout) :: address1234    integer(8), value :: val1235    end function1236  end interface1237  1238  interface atomicmax1239    attributes(device) pure integer function atomicmaxi(address, val)1240  !dir$ ignore_tkr (d) address, (d) val1241    integer, intent(inout) :: address1242    integer, value :: val1243    end function1244    attributes(device) pure real function atomicmaxf(address, val)1245  !dir$ ignore_tkr (d) address, (d) val1246    real, intent(inout) :: address1247    real, value :: val1248    end function1249    attributes(device) pure real(8) function atomicmaxd(address, val)1250  !dir$ ignore_tkr (d) address, (d) val1251    real(8), intent(inout) :: address1252    real(8), value :: val1253    end function1254    attributes(device) pure integer(8) function atomicmaxl(address, val)1255  !dir$ ignore_tkr (d) address, (dk) val1256    integer(8), intent(inout) :: address1257    integer(8), value :: val1258    end function1259  end interface1260  1261  interface atomicmin1262    attributes(device) pure integer function atomicmini(address, val)1263  !dir$ ignore_tkr (d) address, (d) val1264    integer, intent(inout) :: address1265    integer, value :: val1266    end function1267    attributes(device) pure real function atomicminf(address, val)1268  !dir$ ignore_tkr (d) address, (d) val1269    real, intent(inout) :: address1270    real, value :: val1271    end function1272    attributes(device) pure real(8) function atomicmind(address, val)1273  !dir$ ignore_tkr (d) address, (d) val1274    real(8), intent(inout) :: address1275    real(8), value :: val1276    end function1277    attributes(device) pure integer(8) function atomicminl(address, val)1278  !dir$ ignore_tkr (d) address, (dk) val1279    integer(8), intent(inout) :: address1280    integer(8), value :: val1281    end function1282  end interface1283  1284  interface atomicand1285    attributes(device) pure integer function atomicandi(address, val)1286  !dir$ ignore_tkr (d) address, (d) val1287    integer, intent(inout) :: address1288    integer, value :: val1289    end function1290  end interface1291  1292  interface atomicor1293    attributes(device) pure integer function atomicori(address, val)1294  !dir$ ignore_tkr (d) address, (d) val1295    integer, intent(inout) :: address1296    integer, value :: val1297    end function1298  end interface1299 1300  interface atomicinc1301    attributes(device) pure integer function atomicinci(address, val)1302  !dir$ ignore_tkr (d) address, (d) val1303    integer, intent(inout) :: address1304    integer, value :: val1305    end function1306  end interface1307  1308  interface atomicdec1309    attributes(device) pure integer function atomicdeci(address, val)1310  !dir$ ignore_tkr (d) address, (d) val1311    integer, intent(inout) :: address1312    integer, value :: val1313    end function1314  end interface1315 1316  interface atomiccas1317    attributes(device) pure integer function atomiccasi(address, val, val2)1318  !dir$ ignore_tkr (rd) address, (d) val, (d) val21319    integer, intent(inout) :: address1320    integer, value :: val, val21321    end function1322    attributes(device) pure integer(8) function atomiccasul(address, val, val2)1323  !dir$ ignore_tkr (rd) address, (dk) val, (dk) val21324    integer(8), intent(inout) :: address1325    integer(8), value :: val, val21326    end function1327    attributes(device) pure real function atomiccasf(address, val, val2)1328  !dir$ ignore_tkr (rd) address, (d) val, (d) val21329    real, intent(inout) :: address1330    real, value :: val, val21331    end function1332    attributes(device) pure double precision function atomiccasd(address, val, val2)1333  !dir$ ignore_tkr (rd) address, (d) val, (d) val21334    double precision, intent(inout) :: address1335    double precision, value :: val, val21336    end function1337  end interface1338 1339  interface atomicexch1340    attributes(device) pure integer function atomicexchi(address, val)1341  !dir$ ignore_tkr (rd) address, (d) val1342    integer, intent(inout) :: address1343    integer, value :: val1344    end function1345    attributes(device) pure integer(8) function atomicexchul(address, val)1346  !dir$ ignore_tkr (rd) address, (dk) val1347    integer(8), intent(inout) :: address1348    integer(8), value :: val1349    end function1350    attributes(device) pure real function atomicexchf(address, val)1351  !dir$ ignore_tkr (rd) address, (d) val1352    real, intent(inout) :: address1353    real, value :: val1354    end function1355    attributes(device) pure double precision function atomicexchd(address, val)1356  !dir$ ignore_tkr (rd) address, (d) val1357    double precision, intent(inout) :: address1358    double precision, value :: val1359    end function1360  end interface1361 1362  interface atomicxor1363    attributes(device) pure integer function atomicxori(address, val)1364  !dir$ ignore_tkr (rd) address, (d) val1365    integer, intent(inout) :: address1366    integer, value :: val1367    end function1368  end interface1369 1370  ! Time function1371 1372  interface1373    attributes(device) integer function clock()1374    end function1375  end interface1376 1377  interface1378    attributes(device) integer(8) function clock64()1379    end function1380  end interface1381 1382  interface1383    attributes(device) integer(8) function globalTimer()1384    end function1385  end interface1386 1387  ! Warp Match Functions1388 1389  interface match_all_sync1390    attributes(device) integer function match_all_syncjj(mask, val, pred)1391  !dir$ ignore_tkr(d) mask, (d) val, (d) pred1392    integer(4), value :: mask1393    integer(4), value :: val1394    integer(4)        :: pred1395    end function1396    attributes(device) integer function match_all_syncjx(mask, val, pred)1397  !dir$ ignore_tkr(d) mask, (d) val, (d) pred1398    integer(4), value :: mask1399    integer(8), value :: val1400    integer(4)        :: pred1401    end function1402    attributes(device) integer function match_all_syncjf(mask, val, pred)1403  !dir$ ignore_tkr(d) mask, (d) val, (d) pred1404    integer(4), value :: mask1405    real(4), value    :: val1406    integer(4)        :: pred1407    end function1408    attributes(device) integer function match_all_syncjd(mask, val, pred)1409  !dir$ ignore_tkr(d) mask, (d) val, (d) pred1410    integer(4), value :: mask1411    real(8), value    :: val1412    integer(4)        :: pred1413    end function1414  end interface1415 1416  interface match_any_sync1417    attributes(device) integer function match_any_syncjj(mask, val)1418  !dir$ ignore_tkr(d) mask, (d) val1419    integer(4), value :: mask1420    integer(4), value :: val1421    end function1422    attributes(device) integer function match_any_syncjx(mask, val)1423  !dir$ ignore_tkr(d) mask, (d) val1424    integer(4), value :: mask1425    integer(8), value :: val1426    end function1427    attributes(device) integer function match_any_syncjf(mask, val)1428  !dir$ ignore_tkr(d) mask, (d) val1429    integer(4), value :: mask1430    real(4), value    :: val1431    end function1432    attributes(device) integer function match_any_syncjd(mask, val)1433  !dir$ ignore_tkr(d) mask, (d) val1434    integer(4), value :: mask1435    real(8), value    :: val1436    end function1437  end interface1438 1439  interface all_sync1440    attributes(device) integer function all_sync(mask, pred)1441      !dir$ ignore_tkr(d) mask, (td) pred1442      integer, value :: mask, pred1443    end function1444  end interface1445 1446  interface any_sync1447    attributes(device) integer function any_sync(mask, pred)1448      !dir$ ignore_tkr(d) mask, (td) pred1449      integer, value :: mask, pred1450    end function1451  end interface1452 1453  interface ballot_sync1454    attributes(device) integer function ballot_sync(mask, pred)1455      !dir$ ignore_tkr(d) mask, (td) pred1456      integer, value :: mask, pred1457    end function1458  end interface1459 1460  ! LDCG1461  interface __ldcg1462    attributes(device) pure integer(4) function __ldcg_i4(x) bind(c)1463      !dir$ ignore_tkr (d) x1464      integer(4), intent(in) :: x1465    end function1466    attributes(device) pure integer(8) function __ldcg_i8(x) bind(c)1467      !dir$ ignore_tkr (d) x1468      integer(8), intent(in) :: x1469    end function1470    attributes(device) pure function __ldcg_cd(x) bind(c) result(y)1471      import c_devptr1472      !dir$ ignore_tkr (d) x1473      type(c_devptr), intent(in) :: x1474      type(c_devptr) :: y1475    end function1476    attributes(device) pure real(2) function __ldcg_r2(x) bind(c)1477      !dir$ ignore_tkr (d) x1478      real(2), intent(in) :: x1479    end function1480    attributes(device) pure real(4) function __ldcg_r4(x) bind(c)1481      !dir$ ignore_tkr (d) x1482      real(4), intent(in) :: x1483    end function1484    attributes(device) pure real(8) function __ldcg_r8(x) bind(c)1485      !dir$ ignore_tkr (d) x1486      real(8), intent(in) :: x1487    end function1488    attributes(device) pure complex(4) function __ldcg_c4(x) &1489        bind(c,name='__ldcg_c4x')1490      !dir$ ignore_tkr (d) x1491      complex(4), intent(in) :: x1492    end function1493    attributes(device) pure complex(8) function __ldcg_c8(x) &1494        bind(c,name='__ldcg_c8x')1495      !dir$ ignore_tkr (d) x1496      complex(8), intent(in) :: x1497    end function1498    attributes(device) pure function __ldcg_i4x4(x) result(y)1499      !dir$ ignore_tkr (d) x1500      integer(4), dimension(4), intent(in) :: x1501      integer(4), dimension(4) :: y1502    end function1503    attributes(device) pure function __ldcg_i8x2(x) result(y)1504      !dir$ ignore_tkr (d) x1505      integer(8), dimension(2), intent(in) :: x1506      integer(8), dimension(2) :: y1507    end function1508    attributes(device) pure function __ldcg_r2x2(x) result(y)1509      !dir$ ignore_tkr (d) x1510      real(2), dimension(2), intent(in) :: x1511      real(2), dimension(2) :: y1512    end function1513    attributes(device) pure function __ldcg_r4x4(x) result(y)1514      !dir$ ignore_tkr (d) x1515      real(4), dimension(4), intent(in) :: x1516      real(4), dimension(4) :: y1517    end function1518    attributes(device) pure function __ldcg_r8x2(x) result(y)1519      !dir$ ignore_tkr (d) x1520      real(8), dimension(2), intent(in) :: x1521      real(8), dimension(2) :: y1522    end function1523  end interface1524 1525  ! LDCA1526  interface __ldca1527    attributes(device) pure integer(4) function __ldca_i4(x) bind(c)1528      !dir$ ignore_tkr (d) x1529      integer(4), intent(in) :: x1530    end function1531    attributes(device) pure integer(8) function __ldca_i8(x) bind(c)1532      !dir$ ignore_tkr (d) x1533      integer(8), intent(in) :: x1534    end function1535    attributes(device) pure function __ldca_cd(x) bind(c) result(y)1536      !dir$ ignore_tkr (d) x1537      import c_devptr1538      type(c_devptr), intent(in) :: x1539      type(c_devptr) :: y1540    end function1541    attributes(device) pure real(2) function __ldca_r2(x) bind(c)1542      !dir$ ignore_tkr (d) x1543      real(2), intent(in) :: x1544    end function1545    attributes(device) pure real(4) function __ldca_r4(x) bind(c)1546      !dir$ ignore_tkr (d) x1547      real(4), intent(in) :: x1548      end function1549    attributes(device) pure real(8) function __ldca_r8(x) bind(c)1550      !dir$ ignore_tkr (d) x1551      real(8), intent(in) :: x1552    end function1553    attributes(device) pure complex(4) function __ldca_c4(x) &1554        bind(c,name='__ldca_c4x')1555      !dir$ ignore_tkr (d) x1556      complex(4), intent(in) :: x1557    end function1558    attributes(device) pure complex(8) function __ldca_c8(x) &1559        bind(c,name='__ldca_c8x')1560      !dir$ ignore_tkr (d) x1561      complex(8), intent(in) :: x1562    end function1563    attributes(device) pure function __ldca_i4x4(x) result(y)1564      !dir$ ignore_tkr (d) x1565      integer(4), dimension(4), intent(in) :: x1566      integer(4), dimension(4) :: y1567    end function1568    attributes(device) pure function __ldca_i8x2(x) result(y)1569      !dir$ ignore_tkr (d) x1570      integer(8), dimension(2), intent(in) :: x1571      integer(8), dimension(2) :: y1572    end function1573    attributes(device) pure function __ldca_r2x2(x) result(y)1574      !dir$ ignore_tkr (d) x1575      real(2), dimension(2), intent(in) :: x1576      real(2), dimension(2) :: y1577    end function1578    attributes(device) pure function __ldca_r4x4(x) result(y)1579      !dir$ ignore_tkr (d) x1580      real(4), dimension(4), intent(in) :: x1581      real(4), dimension(4) :: y1582    end function1583    attributes(device) pure function __ldca_r8x2(x) result(y)1584      !dir$ ignore_tkr (d) x1585      real(8), dimension(2), intent(in) :: x1586      real(8), dimension(2) :: y1587    end function1588  end interface1589 1590  ! LDCS1591  interface __ldcs1592    attributes(device) pure integer(4) function __ldcs_i4(x) bind(c)1593      !dir$ ignore_tkr (d) x1594      integer(4), intent(in) :: x1595    end function1596    attributes(device) pure integer(8) function __ldcs_i8(x) bind(c)1597      !dir$ ignore_tkr (d) x1598      integer(8), intent(in) :: x1599    end function1600    attributes(device) pure function __ldcs_cd(x) bind(c) result(y)1601      import c_devptr1602      !dir$ ignore_tkr (d) x1603      type(c_devptr), intent(in) :: x1604      type(c_devptr) :: y1605    end function1606    attributes(device) pure real(2) function __ldcs_r2(x) bind(c)1607      !dir$ ignore_tkr (d) x1608      real(2), intent(in) :: x1609    end function1610    attributes(device) pure real(4) function __ldcs_r4(x) bind(c)1611      !dir$ ignore_tkr (d) x1612      real(4), intent(in) :: x1613    end function1614    attributes(device) pure real(8) function __ldcs_r8(x) bind(c)1615      !dir$ ignore_tkr (d) x1616      real(8), intent(in) :: x1617    end function1618    attributes(device) pure complex(4) function __ldcs_c4(x) &1619        bind(c,name='__ldcs_c4x')1620      !dir$ ignore_tkr (d) x1621      complex(4), intent(in) :: x1622    end function1623    attributes(device) pure complex(8) function __ldcs_c8(x) &1624        bind(c,name='__ldcs_c8x')1625      !dir$ ignore_tkr (d) x1626      complex(8), intent(in) :: x1627    end function1628    attributes(device) pure function __ldcs_i4x4(x) result(y)1629      !dir$ ignore_tkr (d) x1630      integer(4), dimension(4), intent(in) :: x1631      integer(4), dimension(4) :: y1632    end function1633    attributes(device) pure function __ldcs_i8x2(x) result(y)1634      !dir$ ignore_tkr (d) x1635      integer(8), dimension(2), intent(in) :: x1636      integer(8), dimension(2) :: y1637    end function1638    attributes(device) pure function __ldcs_r2x2(x) result(y)1639      !dir$ ignore_tkr (d) x1640      real(2), dimension(2), intent(in) :: x1641      real(2), dimension(2) :: y1642    end function1643    attributes(device) pure function __ldcs_r4x4(x) result(y)1644      !dir$ ignore_tkr (d) x1645      real(4), dimension(4), intent(in) :: x1646      real(4), dimension(4) :: y1647    end function1648    attributes(device) pure function __ldcs_r8x2(x) result(y)1649      !dir$ ignore_tkr (d) x1650      real(8), dimension(2), intent(in) :: x1651      real(8), dimension(2) :: y1652    end function1653  end interface1654 1655  ! LDLU1656  interface __ldlu1657    attributes(device) pure integer(4) function __ldlu_i4(x) bind(c)1658      !dir$ ignore_tkr (d) x1659      integer(4), intent(in) :: x1660    end function1661    attributes(device) pure integer(8) function __ldlu_i8(x) bind(c)1662      !dir$ ignore_tkr (d) x1663      integer(8), intent(in) :: x1664    end function1665    attributes(device) pure function __ldlu_cd(x) bind(c) result(y)1666      import c_devptr1667      !dir$ ignore_tkr (d) x1668      type(c_devptr), intent(in) :: x1669      type(c_devptr) :: y1670    end function1671    attributes(device) pure real(2) function __ldlu_r2(x) bind(c)1672      !dir$ ignore_tkr (d) x1673      real(2), intent(in) :: x1674    end function1675    attributes(device) pure real(4) function __ldlu_r4(x) bind(c)1676      !dir$ ignore_tkr (d) x1677      real(4), intent(in) :: x1678    end function1679    attributes(device) pure real(8) function __ldlu_r8(x) bind(c)1680      !dir$ ignore_tkr (d) x1681      real(8), intent(in) :: x1682    end function1683    attributes(device) pure complex(4) function __ldlu_c4(x) &1684        bind(c,name='__ldlu_c4x')1685      !dir$ ignore_tkr (d) x1686      complex(4), intent(in) :: x1687    end function1688    attributes(device) pure complex(8) function __ldlu_c8(x) &1689        bind(c,name='__ldlu_c8x')1690      !dir$ ignore_tkr (d) x1691      complex(8), intent(in) :: x1692    end function1693    attributes(device) pure function __ldlu_i4x4(x) result(y)1694      !dir$ ignore_tkr (d) x1695      integer(4), dimension(4), intent(in) :: x1696      integer(4), dimension(4) :: y1697    end function1698    attributes(device) pure function __ldlu_i8x2(x) result(y)1699      !dir$ ignore_tkr (d) x1700      integer(8), dimension(2), intent(in) :: x1701      integer(8), dimension(2) :: y1702    end function1703    attributes(device) pure function __ldlu_r2x2(x) result(y)1704      !dir$ ignore_tkr (d) x1705      real(2), dimension(2), intent(in) :: x1706      real(2), dimension(2) :: y1707    end function1708    attributes(device) pure function __ldlu_r4x4(x) result(y)1709      !dir$ ignore_tkr (d) x1710      real(4), dimension(4), intent(in) :: x1711      real(4), dimension(4) :: y1712    end function1713    attributes(device) pure function __ldlu_r8x2(x) result(y)1714      !dir$ ignore_tkr (d) x1715      real(8), dimension(2), intent(in) :: x1716      real(8), dimension(2) :: y1717    end function1718  end interface1719 1720  ! LDCV1721  interface __ldcv1722    attributes(device) pure integer(4) function __ldcv_i4(x) bind(c)1723      !dir$ ignore_tkr (d) x1724      integer(4), intent(in) :: x1725    end function1726    attributes(device) pure integer(8) function __ldcv_i8(x) bind(c)1727      !dir$ ignore_tkr (d) x1728      integer(8), intent(in) :: x1729    end function1730    attributes(device) pure function __ldcv_cd(x) bind(c) result(y)1731      import c_devptr1732      !dir$ ignore_tkr (d) x1733      type(c_devptr), intent(in) :: x1734      type(c_devptr) :: y1735    end function1736    attributes(device) pure real(2) function __ldcv_r2(x) bind(c)1737      !dir$ ignore_tkr (d) x1738      real(2), intent(in) :: x1739    end function1740    attributes(device) pure real(4) function __ldcv_r4(x) bind(c)1741      !dir$ ignore_tkr (d) x1742      real(4), intent(in) :: x1743    end function1744    attributes(device) pure real(8) function __ldcv_r8(x) bind(c)1745      !dir$ ignore_tkr (d) x1746      real(8), intent(in) :: x1747    end function1748    attributes(device) pure complex(4) function __ldcv_c4(x) &1749        bind(c,name='__ldcv_c4x')1750      !dir$ ignore_tkr (d) x1751      complex(4), intent(in) :: x1752    end function1753    attributes(device) pure complex(8) function __ldcv_c8(x) &1754        bind(c,name='__ldcv_c8x')1755      !dir$ ignore_tkr (d) x1756      complex(8), intent(in) :: x1757    end function1758    attributes(device) pure function __ldcv_i4x4(x) result(y)1759      !dir$ ignore_tkr (d) x1760      integer(4), dimension(4), intent(in) :: x1761      integer(4), dimension(4) :: y1762      end function1763    attributes(device) pure function __ldcv_i8x2(x) result(y)1764      !dir$ ignore_tkr (d) x1765      integer(8), dimension(2), intent(in) :: x1766      integer(8), dimension(2) :: y1767    end function1768    attributes(device) pure function __ldcv_r2x2(x) result(y)1769      !dir$ ignore_tkr (d) x1770      real(2), dimension(2), intent(in) :: x1771      real(2), dimension(2) :: y1772    end function1773    attributes(device) pure function __ldcv_r4x4(x) result(y)1774      !dir$ ignore_tkr (d) x1775      real(4), dimension(4), intent(in) :: x1776      real(4), dimension(4) :: y1777    end function1778    attributes(device) pure function __ldcv_r8x2(x) result(y)1779      !dir$ ignore_tkr (d) x1780      real(8), dimension(2), intent(in) :: x1781      real(8), dimension(2) :: y1782    end function1783  end interface1784 1785  ! STWB1786  interface __stwb1787    attributes(device) pure subroutine __stwb_i4(y, x) bind(c)1788      !dir$ ignore_tkr (d) y, (d) x1789      integer(4), value  :: x1790      integer(4), device, intent(in) :: y1791    end subroutine1792    attributes(device) pure subroutine __stwb_i8(y, x) bind(c)1793      !dir$ ignore_tkr (d) y, (d) x1794      integer(8), value  :: x1795      integer(8), device, intent(in) :: y1796    end subroutine1797    attributes(device) pure subroutine __stwb_cd(y, x) bind(c)1798      import c_devptr1799      !dir$ ignore_tkr (d) y, (d) x1800      type(c_devptr), device, intent(in) :: y, x1801    end subroutine1802    attributes(device) pure subroutine __stwb_r2(y, x) bind(c)1803      !dir$ ignore_tkr (d) y, (d) x1804      real(2), value :: x1805      real(2), device, intent(in) :: y1806    end subroutine1807    attributes(device) pure subroutine __stwb_r4(y, x) bind(c)1808      !dir$ ignore_tkr (d) y, (d) x1809      real(4), value :: x1810      real(4), device, intent(in) :: y1811    end subroutine1812    attributes(device) pure subroutine __stwb_r8(y, x) bind(c)1813      !dir$ ignore_tkr (d) y, (d) x1814      real(8), value :: x1815      real(8), device, intent(in) :: y1816    end subroutine1817    attributes(device) pure subroutine __stwb_c4(y, x) bind(c)1818      !dir$ ignore_tkr (d) y, (rd) x1819      complex(4), device, intent(in) :: y, x1820    end subroutine1821    attributes(device) pure subroutine __stwb_c8(y, x) bind(c)1822      !dir$ ignore_tkr (d) y, (d) x1823      complex(8), device, intent(in) :: y, x1824    end subroutine1825    attributes(device) pure subroutine __stwb_i4x4(y, x) bind(c)1826      !dir$ ignore_tkr (d) y, (d) x1827      integer(4), dimension(4), device, intent(in) :: y, x1828    end subroutine1829    attributes(device) pure subroutine __stwb_i8x2(y, x) bind(c)1830      !dir$ ignore_tkr (d) y, (d) x1831      integer(8), dimension(2), device, intent(in) :: y, x1832    end subroutine1833    attributes(device) pure subroutine __stwb_r2x2(y, x) bind(c)1834      !dir$ ignore_tkr (d) y, (d) x1835      real(2), dimension(2), device, intent(in) :: y, x1836    end subroutine1837    attributes(device) pure subroutine __stwb_r4x4(y, x) bind(c)1838      !dir$ ignore_tkr (d) y, (d) x1839      real(4), dimension(4), device, intent(in) :: y, x1840    end subroutine1841    attributes(device) pure subroutine __stwb_r8x2(y, x) bind(c)1842      !dir$ ignore_tkr (d) y, (d) x1843      real(8), dimension(2), device, intent(in) :: y, x1844    end subroutine1845  end interface1846 1847  ! STCG1848  interface __stcg1849    attributes(device) pure subroutine __stcg_i4(y, x) bind(c)1850      !dir$ ignore_tkr (d) y, (d) x1851      integer(4), value  :: x1852      integer(4), device, intent(in) :: y1853    end subroutine1854    attributes(device) pure subroutine __stcg_i8(y, x) bind(c)1855      !dir$ ignore_tkr (d) y, (d) x1856      integer(8), value  :: x1857      integer(8), device, intent(in) :: y1858    end subroutine1859    attributes(device) pure subroutine __stcg_cd(y, x) bind(c)1860      import c_devptr1861      !dir$ ignore_tkr (d) y, (d) x1862      type(c_devptr), device, intent(in) :: y, x1863    end subroutine1864    attributes(device) pure subroutine __stcg_r2(y, x) bind(c)1865      !dir$ ignore_tkr (d) y, (d) x1866      real(2), value :: x1867      real(2), device, intent(in) :: y1868    end subroutine1869    attributes(device) pure subroutine __stcg_r4(y, x) bind(c)1870      !dir$ ignore_tkr (d) y, (d) x1871      real(4), value :: x1872      real(4), device, intent(in) :: y1873    end subroutine1874    attributes(device) pure subroutine __stcg_r8(y, x) bind(c)1875      !dir$ ignore_tkr (d) y, (d) x1876      real(8), value :: x1877      real(8), device, intent(in) :: y1878    end subroutine1879    attributes(device) pure subroutine __stcg_c4(y, x) bind(c)1880      !dir$ ignore_tkr (d) y, (rd) x1881      complex(4), device, intent(in) :: y, x1882    end subroutine1883    attributes(device) pure subroutine __stcg_c8(y, x) bind(c)1884      !dir$ ignore_tkr (d) y, (d) x1885      complex(8), device, intent(in) :: y, x1886    end subroutine1887    attributes(device) pure subroutine __stcg_i4x4(y, x) bind(c)1888      !dir$ ignore_tkr (d) y, (d) x1889      integer(4), dimension(4), device, intent(in) :: y, x1890    end subroutine1891    attributes(device) pure subroutine __stcg_i8x2(y, x) bind(c)1892      !dir$ ignore_tkr (d) y, (d) x1893      integer(8), dimension(2), device, intent(in) :: y, x1894    end subroutine1895    attributes(device) pure subroutine __stcg_r2x2(y, x) bind(c)1896      !dir$ ignore_tkr (d) y, (d) x1897      real(2), dimension(2), device, intent(in) :: y, x1898    end subroutine1899    attributes(device) pure subroutine __stcg_r4x4(y, x) bind(c)1900      !dir$ ignore_tkr (d) y, (d) x1901      real(4), dimension(4), device, intent(in) :: y, x1902    end subroutine1903    attributes(device) pure subroutine __stcg_r8x2(y, x) bind(c)1904      !dir$ ignore_tkr (d) y, (d) x1905      real(8), dimension(2), device, intent(in) :: y, x1906    end subroutine1907  end interface1908 1909  ! STCS1910  interface __stcs1911    attributes(device) pure subroutine __stcs_i4(y, x) bind(c)1912      !dir$ ignore_tkr (d) y, (d) x1913      integer(4), value  :: x1914      integer(4), device, intent(in) :: y1915    end subroutine1916    attributes(device) pure subroutine __stcs_i8(y, x) bind(c)1917      !dir$ ignore_tkr (d) y, (d) x1918      integer(8), value  :: x1919      integer(8), device, intent(in) :: y1920    end subroutine1921    attributes(device) pure subroutine __stcs_cd(y, x) bind(c)1922      import c_devptr1923      !dir$ ignore_tkr (d) y, (d) x1924      type(c_devptr), device, intent(in) :: y, x1925    end subroutine1926    attributes(device) pure subroutine __stcs_r2(y, x) bind(c)1927      !dir$ ignore_tkr (d) y, (d) x1928      real(2), value :: x1929      real(2), device, intent(in) :: y1930    end subroutine1931    attributes(device) pure subroutine __stcs_r4(y, x) bind(c)1932      !dir$ ignore_tkr (d) y, (d) x1933      real(4), value :: x1934      real(4), device, intent(in) :: y1935    end subroutine1936    attributes(device) pure subroutine __stcs_r8(y, x) bind(c)1937      !dir$ ignore_tkr (d) y, (d) x1938      real(8), value :: x1939      real(8), device, intent(in) :: y1940    end subroutine1941    attributes(device) pure subroutine __stcs_c4(y, x) bind(c)1942      !dir$ ignore_tkr (d) y, (rd) x1943      complex(4), device, intent(in) :: y, x1944    end subroutine1945    attributes(device) pure subroutine __stcs_c8(y, x) bind(c)1946      !dir$ ignore_tkr (d) y, (d) x1947      complex(8), device, intent(in) :: y, x1948    end subroutine1949    attributes(device) pure subroutine __stcs_i4x4(y, x) bind(c)1950      !dir$ ignore_tkr (d) y, (d) x1951      integer(4), dimension(4), device, intent(in) :: y, x1952    end subroutine1953    attributes(device) pure subroutine __stcs_i8x2(y, x) bind(c)1954      !dir$ ignore_tkr (d) y, (d) x1955      integer(8), dimension(2), device, intent(in) :: y, x1956    end subroutine1957    attributes(device) pure subroutine __stcs_r2x2(y, x) bind(c)1958      !dir$ ignore_tkr (d) y, (d) x1959      real(2), dimension(2), device, intent(in) :: y, x1960    end subroutine1961    attributes(device) pure subroutine __stcs_r4x4(y, x) bind(c)1962      !dir$ ignore_tkr (d) y, (d) x1963      real(4), dimension(4), device, intent(in) :: y, x1964    end subroutine1965    attributes(device) pure subroutine __stcs_r8x2(y, x) bind(c)1966      !dir$ ignore_tkr (d) y, (d) x1967      real(8), dimension(2), device, intent(in) :: y, x1968    end subroutine1969  end interface1970 1971  ! STWT1972  interface __stwt1973    attributes(device) pure subroutine __stwt_i4(y, x) bind(c)1974      !dir$ ignore_tkr (d) y, (d) x1975      integer(4), value  :: x1976      integer(4), device, intent(in) :: y1977    end subroutine1978    attributes(device) pure subroutine __stwt_i8(y, x) bind(c)1979      !dir$ ignore_tkr (d) y, (d) x1980      integer(8), value  :: x1981      integer(8), device, intent(in) :: y1982    end subroutine1983    attributes(device) pure subroutine __stwt_cd(y, x) bind(c)1984      import c_devptr1985      !dir$ ignore_tkr (d) y, (d) x1986      type(c_devptr), device, intent(in) :: y, x1987    end subroutine1988    attributes(device) pure subroutine __stwt_r2(y, x) bind(c)1989      !dir$ ignore_tkr (d) y, (d) x1990      real(2), value :: x1991      real(2), device, intent(in) :: y1992    end subroutine1993    attributes(device) pure subroutine __stwt_r4(y, x) bind(c)1994      !dir$ ignore_tkr (d) y, (d) x1995      real(4), value :: x1996      real(4), device, intent(in) :: y1997    end subroutine1998    attributes(device) pure subroutine __stwt_r8(y, x) bind(c)1999      !dir$ ignore_tkr (d) y, (d) x2000      real(8), value :: x2001      real(8), device, intent(in) :: y2002    end subroutine2003    attributes(device) pure subroutine __stwt_c4(y, x) bind(c)2004      !dir$ ignore_tkr (d) y, (rd) x2005      complex(4), device, intent(in) :: y, x2006    end subroutine2007    attributes(device) pure subroutine __stwt_c8(y, x) bind(c)2008      !dir$ ignore_tkr (d) y, (d) x2009      complex(8), device, intent(in) :: y, x2010    end subroutine2011    attributes(device) pure subroutine __stwt_i4x4(y, x) bind(c)2012      !dir$ ignore_tkr (d) y, (d) x2013      integer(4), dimension(4), device, intent(in) :: y, x2014    end subroutine2015    attributes(device) pure subroutine __stwt_i8x2(y, x) bind(c)2016      !dir$ ignore_tkr (d) y, (d) x2017      integer(8), dimension(2), device, intent(in) :: y, x2018    end subroutine2019    attributes(device) pure subroutine __stwt_r2x2(y, x) bind(c)2020      !dir$ ignore_tkr (d) y, (d) x2021      real(2), dimension(2), device, intent(in) :: y, x2022    end subroutine2023    attributes(device) pure subroutine __stwt_r4x4(y, x) bind(c)2024      !dir$ ignore_tkr (d) y, (d) x2025      real(4), dimension(4), device, intent(in) :: y, x2026    end subroutine2027    attributes(device) pure subroutine __stwt_r8x2(y, x) bind(c)2028      !dir$ ignore_tkr (d) y, (d) x2029      real(8), dimension(2), device, intent(in) :: y, x2030    end subroutine2031  end interface2032 2033  interface2034    attributes(device,host) logical function on_device() bind(c)2035    end function2036  end interface2037 2038  ! TMA Operations2039 2040  interface barrier_arrive2041    attributes(device) function barrier_arrive(barrier) result(token)2042      integer(8), shared :: barrier2043      integer(8) :: token2044    end function2045    attributes(device) function barrier_arrive_cnt(barrier, count) result(token)2046      integer(8), shared :: barrier2047      integer(4), value :: count2048      integer(8) :: token2049    end function2050  end interface2051 2052  interface 2053    attributes(device) subroutine barrier_init(barrier, count)2054      integer(8), shared :: barrier2055      integer(4), value :: count2056    end subroutine2057  end interface2058 2059  interface2060    attributes(device) integer function barrier_try_wait(barrier, token)2061      integer(8), shared :: barrier2062      integer(8), value  :: token2063    end function2064  end interface2065  2066  interface2067    attributes(device) integer function barrier_try_wait_sleep(barrier, token, ns)2068      integer(8), shared :: barrier2069      integer(8), value  :: token2070      integer(4), value  :: ns2071    end function2072  end interface2073 2074  interface2075    attributes(device) subroutine fence_proxy_async()2076    end subroutine2077  end interface2078 2079  interface2080    attributes(device) subroutine tma_bulk_commit_group()2081    end subroutine2082  end interface2083 2084  interface2085    attributes(device) subroutine tma_bulk_wait_group()2086    end subroutine2087  end interface2088 2089  ! --------------------2090  ! Bulk load functions2091  ! --------------------2092 2093  ! Generic load, count is in bytes2094  ! -------------------------------2095 2096  interface2097    attributes(device) subroutine tma_bulk_g2s(barrier, src, dst, nbytes)2098      !dir$ ignore_tkr src, dst2099      integer(8), shared :: barrier2100      integer(4), device :: src(*)2101      integer(4), shared :: dst(*)2102      integer(4), value  :: nbytes2103    end subroutine2104  end interface2105 2106  ! Load specific types, count is in elements2107  ! -----------------------------------------2108 2109  interface tma_bulk_load2110    attributes(device) subroutine tma_bulk_ldc4(barrier, src, dst, nelems)2111      !dir$ ignore_tkr (r) src, (r) dst2112      integer(8), shared :: barrier2113      complex(4), device :: src(*)2114      complex(4), shared :: dst(*)2115      integer(4), value :: nelems2116    end subroutine2117 2118    attributes(device) subroutine tma_bulk_ldc8(barrier, src, dst, nelems)2119      !dir$ ignore_tkr (r) src, (r) dst2120      integer(8), shared :: barrier2121      complex(8), device :: src(*)2122      complex(8), shared :: dst(*)2123      integer(4), value :: nelems2124    end subroutine2125  2126    attributes(device) subroutine tma_bulk_ldi4(barrier, src, dst, nelems)2127      !dir$ ignore_tkr (r) src, (r) dst2128      integer(8), shared :: barrier2129      integer(4), device :: src(*)2130      integer(4), shared :: dst(*)2131      integer(4), value :: nelems2132    end subroutine2133 2134    attributes(device) subroutine tma_bulk_ldi8(barrier, src, dst, nelems)2135      !dir$ ignore_tkr (r) src, (r) dst2136      integer(8), shared :: barrier2137      integer(8), device :: src(*)2138      integer(8), shared :: dst(*)2139      integer(4), value :: nelems2140    end subroutine2141 2142    attributes(device) subroutine tma_bulk_ldr2(barrier, src, dst, nelems)2143      !dir$ ignore_tkr (r) src, (r) dst2144      integer(8), shared :: barrier2145      real(2), device :: src(*)2146      real(2), shared :: dst(*)2147      integer(4), value :: nelems2148    end subroutine2149 2150    attributes(device) subroutine tma_bulk_ldr4(barrier, src, dst, nelems)2151      !dir$ ignore_tkr (r) src, (r) dst2152      integer(8), shared :: barrier2153      real(4), device :: src(*)2154      real(4), shared :: dst(*)2155      integer(4), value :: nelems2156    end subroutine2157 2158    attributes(device) subroutine tma_bulk_ldr8(barrier, src, dst, nelems)2159      !dir$ ignore_tkr (r) src, (r) dst2160      integer(8), shared :: barrier2161      real(8), device :: src(*)2162      real(8), shared :: dst(*)2163      integer(4), value :: nelems2164    end subroutine2165  end interface2166 2167  ! --------------------2168  ! Bulk Store functions2169  ! --------------------2170 2171  ! Generic store, count is in bytes2172  ! --------------------------------2173 2174  interface2175    attributes(device) subroutine tma_bulk_s2g(src, dst, nbytes)2176      !dir$ ignore_tkr src, dst2177      integer(4), shared  :: src(*)2178      integer(4), device  :: dst(*)2179      integer(4), value   :: nbytes2180    end subroutine2181  end interface2182 2183  ! Load specific types, count is in elements2184  ! -----------------------------------------2185 2186  interface tma_bulk_store2187    attributes(device) subroutine tma_bulk_store_c4(src, dst, nelems)2188      !dir$ ignore_tkr (r) src, (r) dst2189      complex(4), shared :: src(*)2190      complex(4), device :: dst(*)2191      integer(4), value :: nelems2192    end subroutine2193 2194    attributes(device) subroutine tma_bulk_store_c8(src, dst, nelems)2195      !dir$ ignore_tkr (r) src, (r) dst2196      complex(8), shared :: src(*)2197      complex(8), device :: dst(*)2198      integer(4), value :: nelems2199    end subroutine2200 2201    attributes(device) subroutine tma_bulk_store_i4(src, dst, nelems)2202      !dir$ ignore_tkr (r) src, (r) dst2203      integer(4), shared :: src(*)2204      integer(4), device :: dst(*)2205      integer(4), value :: nelems2206    end subroutine2207 2208    attributes(device) subroutine tma_bulk_store_i8(src, dst, nelems)2209      !dir$ ignore_tkr (r) src, (r) dst2210      integer(8), shared :: src(*)2211      integer(8), device :: dst(*)2212      integer(4), value :: nelems2213    end subroutine2214 2215    attributes(device) subroutine tma_bulk_store_r2(src, dst, nelems)2216      !dir$ ignore_tkr (r) src, (r) dst2217      real(2), shared :: src(*)2218      real(2), device :: dst(*)2219      integer(4), value :: nelems2220    end subroutine2221 2222    attributes(device) subroutine tma_bulk_store_r4(src, dst, nelems)2223      !dir$ ignore_tkr (r) src, (r) dst2224      real(4), shared :: src(*)2225      real(4), device :: dst(*)2226      integer(4), value :: nelems2227    end subroutine2228 2229    attributes(device) subroutine tma_bulk_store_r8(src, dst, nelems)2230      !dir$ ignore_tkr (r) src, (r) dst2231      real(8), shared :: src(*)2232      real(8), device :: dst(*)2233      integer(4), value :: nelems2234    end subroutine2235  end interface2236 2237contains2238 2239  attributes(device) subroutine syncthreads()2240  end subroutine2241 2242end module2243