!===-- module/cudedevice.f90 -----------------------------------------------===! ! ! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. ! See https://llvm.org/LICENSE.txt for license information. ! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception ! !===------------------------------------------------------------------------===! ! CUDA Fortran procedures available in device subprogram module cudadevice implicit none ! Set PRIVATE by default to explicitly only export what is meant ! to be exported by this MODULE. private ! Synchronization Functions interface attributes(device) subroutine syncthreads() bind(c, name='__syncthreads') end subroutine end interface public :: syncthreads interface attributes(device) integer function syncthreads_and(value) bind(c, name='__syncthreads_and') integer :: value end function end interface public :: syncthreads_and interface attributes(device) integer function syncthreads_count(value) bind(c, name='__syncthreads_count') integer :: value end function end interface public :: syncthreads_count interface attributes(device) integer function syncthreads_or(value) bind(c, name='__syncthreads_or') integer :: value end function end interface public :: syncthreads_or interface attributes(device) subroutine syncwarp(mask) bind(c, name='__syncwarp') integer :: mask end subroutine end interface public :: syncwarp ! Memory Fences interface attributes(device) subroutine threadfence() bind(c, name='__threadfence') end subroutine end interface public :: threadfence interface attributes(device) subroutine threadfence_block() bind(c, name='__threadfence_block') end subroutine end interface public :: threadfence_block interface attributes(device) subroutine threadfence_system() bind(c, name='__threadfence_system') end subroutine end interface public :: threadfence_system end module