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