xref: /petsc/src/sys/memory/hip/mhiphost.hip.cxx (revision daba9d70159ea2f6905738fcbec7404635487b2b)
1*d52a580bSJunchao Zhang #include <petscsys.h>        /*I   "petscsys.h"   I*/
2*d52a580bSJunchao Zhang #include <petscdevice_hip.h> /* Needed to provide PetscCallHIP() */
3*d52a580bSJunchao Zhang 
PetscHIPHostMalloc(size_t a,PetscBool clear,int lineno,const char function[],const char filename[],void ** result)4*d52a580bSJunchao Zhang PETSC_EXTERN PetscErrorCode PetscHIPHostMalloc(size_t a, PetscBool clear, int lineno, const char function[], const char filename[], void **result)
5*d52a580bSJunchao Zhang {
6*d52a580bSJunchao Zhang   PetscCallHIP(hipHostMalloc(result, a));
7*d52a580bSJunchao Zhang   return PETSC_SUCCESS;
8*d52a580bSJunchao Zhang }
9*d52a580bSJunchao Zhang 
PetscHIPHostFree(void * aa,int lineno,const char function[],const char filename[])10*d52a580bSJunchao Zhang PETSC_EXTERN PetscErrorCode PetscHIPHostFree(void *aa, int lineno, const char function[], const char filename[])
11*d52a580bSJunchao Zhang {
12*d52a580bSJunchao Zhang   PetscCallHIP(hipHostFree(aa));
13*d52a580bSJunchao Zhang   return PETSC_SUCCESS;
14*d52a580bSJunchao Zhang }
15*d52a580bSJunchao Zhang 
PetscHIPHostRealloc(size_t a,int lineno,const char function[],const char filename[],void ** result)16*d52a580bSJunchao Zhang PETSC_EXTERN PetscErrorCode PetscHIPHostRealloc(size_t a, int lineno, const char function[], const char filename[], void **result)
17*d52a580bSJunchao Zhang {
18*d52a580bSJunchao Zhang   SETERRQ(PETSC_COMM_SELF, PETSC_ERR_MEM, "HIP has no Realloc()");
19*d52a580bSJunchao Zhang }
20*d52a580bSJunchao Zhang 
21*d52a580bSJunchao Zhang static PetscErrorCode (*PetscMallocOld)(size_t, PetscBool, int, const char[], const char[], void **);
22*d52a580bSJunchao Zhang static PetscErrorCode (*PetscReallocOld)(size_t, int, const char[], const char[], void **);
23*d52a580bSJunchao Zhang static PetscErrorCode (*PetscFreeOld)(void *, int, const char[], const char[]);
24*d52a580bSJunchao Zhang 
25*d52a580bSJunchao Zhang /*@
26*d52a580bSJunchao Zhang   PetscMallocSetHIPHost - Set `PetscMalloc()` to use `HIPHostMalloc()`
27*d52a580bSJunchao Zhang   Switch the current malloc and free routines to the HIP malloc and free routines
28*d52a580bSJunchao Zhang 
29*d52a580bSJunchao Zhang   Not Collective
30*d52a580bSJunchao Zhang 
31*d52a580bSJunchao Zhang   Level: developer
32*d52a580bSJunchao Zhang 
33*d52a580bSJunchao Zhang   Note:
34*d52a580bSJunchao Zhang   This provides a way to use the HIP malloc and free routines temporarily. One
35*d52a580bSJunchao Zhang   can switch back to the previous choice by calling `PetscMallocResetHIPHost()`.
36*d52a580bSJunchao Zhang 
37*d52a580bSJunchao Zhang .seealso: `PetscMallocSetCUDAHost()`, `PetscMallocResetHIPHost()`
38*d52a580bSJunchao Zhang @*/
PetscMallocSetHIPHost(void)39*d52a580bSJunchao Zhang PETSC_EXTERN PetscErrorCode PetscMallocSetHIPHost(void)
40*d52a580bSJunchao Zhang {
41*d52a580bSJunchao Zhang   PetscFunctionBegin;
42*d52a580bSJunchao Zhang   /* Save the previous choice */
43*d52a580bSJunchao Zhang   PetscMallocOld  = PetscTrMalloc;
44*d52a580bSJunchao Zhang   PetscReallocOld = PetscTrRealloc;
45*d52a580bSJunchao Zhang   PetscFreeOld    = PetscTrFree;
46*d52a580bSJunchao Zhang   PetscTrMalloc   = PetscHIPHostMalloc;
47*d52a580bSJunchao Zhang   PetscTrRealloc  = PetscHIPHostRealloc;
48*d52a580bSJunchao Zhang   PetscTrFree     = PetscHIPHostFree;
49*d52a580bSJunchao Zhang   PetscFunctionReturn(PETSC_SUCCESS);
50*d52a580bSJunchao Zhang }
51*d52a580bSJunchao Zhang 
52*d52a580bSJunchao Zhang /*@
53*d52a580bSJunchao Zhang   PetscMallocResetHIPHost - Reset the changes made by `PetscMallocSetHIPHost()`
54*d52a580bSJunchao Zhang 
55*d52a580bSJunchao Zhang   Not Collective
56*d52a580bSJunchao Zhang 
57*d52a580bSJunchao Zhang   Level: developer
58*d52a580bSJunchao Zhang 
59*d52a580bSJunchao Zhang .seealso: `PetscMallocSetHIPHost()`
60*d52a580bSJunchao Zhang @*/
PetscMallocResetHIPHost(void)61*d52a580bSJunchao Zhang PETSC_EXTERN PetscErrorCode PetscMallocResetHIPHost(void)
62*d52a580bSJunchao Zhang {
63*d52a580bSJunchao Zhang   PetscFunctionBegin;
64*d52a580bSJunchao Zhang   PetscTrMalloc  = PetscMallocOld;
65*d52a580bSJunchao Zhang   PetscTrRealloc = PetscReallocOld;
66*d52a580bSJunchao Zhang   PetscTrFree    = PetscFreeOld;
67*d52a580bSJunchao Zhang   PetscFunctionReturn(PETSC_SUCCESS);
68*d52a580bSJunchao Zhang }
69