9#ifndef FORTRAN_RUNTIME_CUDA_ALLOCATOR_H_
10#define FORTRAN_RUNTIME_CUDA_ALLOCATOR_H_
13#include "flang/Runtime/descriptor-consts.h"
14#include "flang/Runtime/entry-names.h"
16#include "cuda_runtime.h"
18namespace Fortran::runtime {
22namespace Fortran::runtime::cuda {
25cudaStream_t RTDECL(CUFGetAssociatedStream)(
void *);
26int RTDECL(CUFSetAssociatedStream)(
void *, cudaStream_t);
27void RTDECL(CUFRegisterAllocator)();
30void CUFResetStream(cudaStream_t stream);
32extern Lock asyncDeviceAllocationTableLock;
34int findAsyncDeviceAllocation(
void *ptr);
35void insertAsyncDeviceAllocation(
36 void *ptr, std::size_t size, cudaStream_t stream);
37cudaStream_t getAsyncDeviceAllocationStream(
int pos);
38void eraseAsyncDeviceAllocation(
int pos);
40void *CUFAllocPinned(std::size_t, std::size_t, std::int64_t *);
41void CUFFreePinned(
void *);
43void *CUFAllocDevice(std::size_t, std::size_t, std::int64_t *);
44void CUFFreeDevice(
void *);
46void *CUFAllocManaged(std::size_t, std::size_t, std::int64_t *);
47void CUFFreeManaged(
void *);
49void *CUFAllocUnified(std::size_t, std::size_t, std::int64_t *);
50void CUFFreeUnified(
void *);