[J3] Custom Memory Allocator

Steve Lionel steve at stevelionel.com
Fri Nov 15 15:37:53 EST 2019


No, there is no way to do this and if you try playing games with the
descriptor you may be in for big trouble later when the Fortran run-time
wants to deallocate the memory, as it isn't using the C descriptor for that.

My advice is that if you want to use a custom allocator, use POINTER and
CFI_establish (or C_F_POINTER on the Fortran side.) Admittedly you will be
giving up some of the advantages of allocatables.

Steve

On Fri, Nov 15, 2019 at 2:30 PM Reuben D. Budiardja via J3 <
j3 at mailman.j3-fortran.org> wrote:

> Hello,
>
> 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.
>
> Best,
> Reuben
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.j3-fortran.org/pipermail/j3/attachments/20191115/e8e79f9d/attachment.html>


More information about the J3 mailing list