Actual source code: mhiphost.hip.cpp

  1: #include <petscsys.h>
  2: #include <petscdevice.h>

  4: PETSC_EXTERN PetscErrorCode PetscHIPHostMalloc(size_t a,PetscBool clear,int lineno,const char function[],const char filename[],void **result)
  5: {
  6:   hipHostMalloc(result,a);
  7:   return 0;
  8: }

 10: PETSC_EXTERN PetscErrorCode PetscHIPHostFree(void *aa,int lineno,const char function[],const char filename[])
 11: {
 12:   hipHostFree(aa);
 13:   return 0;
 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:    Notes:
 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: PetscMallocResetHIPHost()
 38: @*/
 39: PETSC_EXTERN PetscErrorCode PetscMallocSetHIPHost(void)
 40: {
 41:   /* Save the previous choice */
 42:   PetscMallocOld  = PetscTrMalloc;
 43:   PetscReallocOld = PetscTrRealloc;
 44:   PetscFreeOld    = PetscTrFree;
 45:   PetscTrMalloc   = PetscHIPHostMalloc;
 46:   PetscTrRealloc  = PetscHIPHostRealloc;
 47:   PetscTrFree     = PetscHIPHostFree;
 48:   return 0;
 49: }

 51: /*@C
 52:    PetscMallocResetHIPHost - Reset the changes made by PetscMallocSetHIPHost

 54:    Not Collective

 56:    Level: developer

 58: .seealso: PetscMallocSetHIPHost()
 59: @*/
 60: PETSC_EXTERN PetscErrorCode PetscMallocResetHIPHost(void)
 61: {
 62:   PetscTrMalloc  = PetscMallocOld;
 63:   PetscTrRealloc = PetscReallocOld;
 64:   PetscTrFree    = PetscFreeOld;
 65:   return 0;
 66: }