[J3] Custom Memory Allocator

Steidel, Jon L jon.l.steidel at intel.com
Fri Nov 15 17:18:10 EST 2019

OpenMP 5.0 has the ALLOCATE directive, with the ALLOCATOR clause.  I don't know if you have access to an OpenMP 5.0 compiler (or if there is yet one available), or if this would work for you if you can find such a compiler.


-----Original Message-----
From: J3 <j3-bounces at mailman.j3-fortran.org> On Behalf Of Reuben D. Budiardja via J3
Sent: Friday, November 15, 2019 2:30 PM
To: j3 at mailman.j3-fortran.org
Cc: Reuben D. Budiardja <reubendb at ornl.gov>
Subject: [J3] Custom Memory Allocator


I am wondering if there is a standard-conformance way to allocate allocatable array with a custom memory allocator, e.g. via third-party provided C-library.

At first I looked into passing the allocatable into a bind(c) subroutine and use the C descriptor from the C side. But sec 18.6 and 18.7 prevent using any custom allocator other than using CFI_allocate().

Real-world use case examples: we need to use CUDA memory allocator
cudaMallocManaged() to use CUDA Unified Memory, and cudaHostAlloc() to use page-locked memory on the system.

I suppose the hack-ish way is to swap the base_address member of C descriptor to the address given cudaMallocManaged() (and free-up the original address from CFI_allocate()).

I wondered if for further enhancement on C interoperability we may consider allowing custom allocator into the standard.

I'd be interested in any feedback.


More information about the J3 mailing list