diff --git a/.github/actions/shroud/entrypoint.sh b/.github/actions/shroud/entrypoint.sh index 7fd949634..37ae2a6d1 100755 --- a/.github/actions/shroud/entrypoint.sh +++ b/.github/actions/shroud/entrypoint.sh @@ -1,5 +1,7 @@ #!/bin/bash +set -euo pipefail + git config --global --add safe.directory /github/workspace git config --global --add safe.directory /github/workspace/.radiuss-ci git config --global --add safe.directory /github/workspace/blt @@ -13,4 +15,3 @@ git submodule update --init --recursive mkdir build && cd build cmake -DCMAKE_CXX_COMPILER=clang++ -DSHROUD_EXECUTABLE=/usr/local/bin/shroud .. make -j 3 generate_umpire_shroud - diff --git a/.github/workflows/generate-shroud.yml b/.github/workflows/generate-shroud.yml index 5bd94aa6a..db0c45868 100644 --- a/.github/workflows/generate-shroud.yml +++ b/.github/workflows/generate-shroud.yml @@ -1,8 +1,10 @@ -on: +on: + workflow_dispatch: pull_request: paths: - '**umpire_shroud.yaml' - '**genfumpiresplicer.f' + - '**gencumpiresplicer.inc' name: Generate C/FORTRAN Interface jobs: diff --git a/docs/sphinx/tutorial/fortran/allocators.rst b/docs/sphinx/tutorial/fortran/allocators.rst index c358ce63e..34264e3b1 100644 --- a/docs/sphinx/tutorial/fortran/allocators.rst +++ b/docs/sphinx/tutorial/fortran/allocators.rst @@ -3,14 +3,14 @@ ======================= FORTRAN API: Allocators ======================= - + The fundamental concept for accessing memory through Umpire is an :class:`umpire:Allocator`. In FORTRAN, this means using the type ``UmpireAllocator``. This type provides an ``allocate_pointer`` function to allocate raw memory, and a generic ``allocate`` procedure that takes an array pointer and an array of dimensions and will allocate the correct amount of memory. - + As with the native C++ interface, all allocators are accessed via the :class:`umpire::ResourceManager`. In the FORTRAN API, there is a corresponding ``UmpireResourceManager`` type. To get an ``UmpireAllocator``: @@ -31,3 +31,7 @@ deallocate memory: In this case, we allocate a one-dimensional array using the generic ``allocate`` function. + +.. note:: + + Umpire's FORTRAN interface is generated with the help of `Shroud `_. diff --git a/src/umpire/interface/c_fortran/gencumpiresplicer.inc b/src/umpire/interface/c_fortran/gencumpiresplicer.inc new file mode 100644 index 000000000..ef07512ca --- /dev/null +++ b/src/umpire/interface/c_fortran/gencumpiresplicer.inc @@ -0,0 +1,101 @@ +////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2016-26, Lawrence Livermore National Security, LLC and Umpire +// project contributors. See the COPYRIGHT file for details. +// +// SPDX-License-Identifier: (MIT) +////////////////////////////////////////////////////////////////////////////// +// +// Shroud splicer overrides for C wrappers. +// +// These bufferify wrappers correspond to explicit non-type template +// instantiations such as makeAllocator(...). Shroud emits +// invalid member calls for these overloads in the generated bufferify helpers, +// so provide the exact wrapper bodies here. + +// splicer begin class.ResourceManager.method.make_allocator_list_pool_untracked_bufferify +const std::string SHCXX_name(name, Lname); +umpire::Allocator * SHCXX_allocator = + static_cast(allocator.addr); +umpire::Allocator * SHCXX_rv = new umpire::Allocator; +*SHCXX_rv = SH_this->makeAllocator( + SHCXX_name, *SHCXX_allocator, initial_size, block); +SHC_rv->addr = SHCXX_rv; +SHC_rv->idtor = 1; +return SHC_rv; +// splicer end class.ResourceManager.method.make_allocator_list_pool_untracked_bufferify + +// splicer begin class.ResourceManager.method.make_allocator_quick_pool_untracked_bufferify +const std::string SHCXX_name(name, Lname); +umpire::Allocator * SHCXX_allocator = + static_cast(allocator.addr); +umpire::Allocator * SHCXX_rv = new umpire::Allocator; +*SHCXX_rv = SH_this->makeAllocator( + SHCXX_name, *SHCXX_allocator, initial_size, block); +SHC_rv->addr = SHCXX_rv; +SHC_rv->idtor = 1; +return SHC_rv; +// splicer end class.ResourceManager.method.make_allocator_quick_pool_untracked_bufferify + +// splicer begin class.ResourceManager.method.make_allocator_resource_aware_pool_untracked_bufferify +const std::string SHCXX_name(name, Lname); +umpire::Allocator * SHCXX_allocator = + static_cast(allocator.addr); +umpire::Allocator * SHCXX_rv = new umpire::Allocator; +*SHCXX_rv = SH_this->makeAllocator( + SHCXX_name, *SHCXX_allocator, initial_size, block); +SHC_rv->addr = SHCXX_rv; +SHC_rv->idtor = 1; +return SHC_rv; +// splicer end class.ResourceManager.method.make_allocator_resource_aware_pool_untracked_bufferify + +// splicer begin class.ResourceManager.method.make_allocator_fixed_pool_untracked_bufferify +const std::string SHCXX_name(name, Lname); +umpire::Allocator * SHCXX_allocator = + static_cast(allocator.addr); +umpire::Allocator * SHCXX_rv = new umpire::Allocator; +*SHCXX_rv = SH_this->makeAllocator( + SHCXX_name, *SHCXX_allocator, object_size); +SHC_rv->addr = SHCXX_rv; +SHC_rv->idtor = 1; +return SHC_rv; +// splicer end class.ResourceManager.method.make_allocator_fixed_pool_untracked_bufferify + +// splicer begin class.ResourceManager.method.make_allocator_monotonic_untracked_bufferify +const std::string SHCXX_name(name, Lname); +umpire::Allocator * SHCXX_allocator = + static_cast(allocator.addr); +umpire::Allocator * SHCXX_rv = new umpire::Allocator; +*SHCXX_rv = + SH_this->makeAllocator( + SHCXX_name, *SHCXX_allocator, object_size); +SHC_rv->addr = SHCXX_rv; +SHC_rv->idtor = 1; +return SHC_rv; +// splicer end class.ResourceManager.method.make_allocator_monotonic_untracked_bufferify + +// splicer begin class.ResourceManager.method.make_allocator_slot_pool_untracked_bufferify +const std::string SHCXX_name(name, Lname); +umpire::Allocator * SHCXX_allocator = + static_cast(allocator.addr); +umpire::Allocator * SHCXX_rv = new umpire::Allocator; +*SHCXX_rv = SH_this->makeAllocator( + SHCXX_name, *SHCXX_allocator, object_size); +SHC_rv->addr = SHCXX_rv; +SHC_rv->idtor = 1; +return SHC_rv; +// splicer end class.ResourceManager.method.make_allocator_slot_pool_untracked_bufferify + +// splicer begin class.ResourceManager.method.make_allocator_mixed_pool_untracked_bufferify +const std::string SHCXX_name(name, Lname); +umpire::Allocator * SHCXX_allocator = + static_cast(allocator.addr); +umpire::Allocator * SHCXX_rv = new umpire::Allocator; +*SHCXX_rv = SH_this->makeAllocator( + SHCXX_name, *SHCXX_allocator, smallest_fixed_obj_size, + largest_fixed_obj_size, max_initial_fixed_pool_size, + fixed_size_multiplier, quick_pool_initial_alloc_size, + quick_pool_min_alloc_size, quick_pool_align_bytes); +SHC_rv->addr = SHCXX_rv; +SHC_rv->idtor = 1; +return SHC_rv; +// splicer end class.ResourceManager.method.make_allocator_mixed_pool_untracked_bufferify diff --git a/src/umpire/interface/c_fortran/wrapResourceManager.cpp b/src/umpire/interface/c_fortran/wrapResourceManager.cpp index 9b8f1254d..7ac5ef287 100644 --- a/src/umpire/interface/c_fortran/wrapResourceManager.cpp +++ b/src/umpire/interface/c_fortran/wrapResourceManager.cpp @@ -675,6 +675,299 @@ umpire_allocator * umpire_resourcemanager_make_allocator_bufferify_prefetcher( // splicer end class.ResourceManager.method.make_allocator_bufferify_prefetcher } +umpire_allocator * umpire_resourcemanager_make_allocator_list_pool_untracked( + umpire_resourcemanager * self, const char * name, + umpire_allocator allocator, size_t initial_size, size_t block, + umpire_allocator * SHC_rv) +{ + umpire::ResourceManager *SH_this = + static_cast(self->addr); + // splicer begin class.ResourceManager.method.make_allocator_list_pool_untracked + const std::string SHC_name_cxx(name); + umpire::Allocator *SHC_allocator_cxx = + static_cast(allocator.addr); + umpire::Allocator *SHC_rv_cxx = new umpire::Allocator; + *SHC_rv_cxx = SH_this->makeAllocator( + SHC_name_cxx, *SHC_allocator_cxx, initial_size, block); + SHC_rv->addr = SHC_rv_cxx; + SHC_rv->idtor = 1; + return SHC_rv; + // splicer end class.ResourceManager.method.make_allocator_list_pool_untracked +} + +umpire_allocator * umpire_resourcemanager_make_allocator_list_pool_untracked_bufferify( + umpire_resourcemanager * self, const char * name, int Lname, + umpire_allocator allocator, size_t initial_size, size_t block, + umpire_allocator * SHC_rv) +{ + umpire::ResourceManager *SH_this = + static_cast(self->addr); + // splicer begin class.ResourceManager.method.make_allocator_list_pool_untracked_bufferify + const std::string SHCXX_name(name, Lname); + umpire::Allocator * SHCXX_allocator = + static_cast(allocator.addr); + umpire::Allocator * SHCXX_rv = new umpire::Allocator; + *SHCXX_rv = SH_this->makeAllocator( + SHCXX_name, *SHCXX_allocator, initial_size, block); + SHC_rv->addr = SHCXX_rv; + SHC_rv->idtor = 1; + return SHC_rv; + // splicer end class.ResourceManager.method.make_allocator_list_pool_untracked_bufferify +} + +umpire_allocator * umpire_resourcemanager_make_allocator_quick_pool_untracked( + umpire_resourcemanager * self, const char * name, + umpire_allocator allocator, size_t initial_size, size_t block, + umpire_allocator * SHC_rv) +{ + umpire::ResourceManager *SH_this = + static_cast(self->addr); + // splicer begin class.ResourceManager.method.make_allocator_quick_pool_untracked + const std::string SHC_name_cxx(name); + umpire::Allocator *SHC_allocator_cxx = + static_cast(allocator.addr); + umpire::Allocator *SHC_rv_cxx = new umpire::Allocator; + *SHC_rv_cxx = SH_this->makeAllocator( + SHC_name_cxx, *SHC_allocator_cxx, initial_size, block); + SHC_rv->addr = SHC_rv_cxx; + SHC_rv->idtor = 1; + return SHC_rv; + // splicer end class.ResourceManager.method.make_allocator_quick_pool_untracked +} + +umpire_allocator * umpire_resourcemanager_make_allocator_quick_pool_untracked_bufferify( + umpire_resourcemanager * self, const char * name, int Lname, + umpire_allocator allocator, size_t initial_size, size_t block, + umpire_allocator * SHC_rv) +{ + umpire::ResourceManager *SH_this = + static_cast(self->addr); + // splicer begin class.ResourceManager.method.make_allocator_quick_pool_untracked_bufferify + const std::string SHCXX_name(name, Lname); + umpire::Allocator * SHCXX_allocator = + static_cast(allocator.addr); + umpire::Allocator * SHCXX_rv = new umpire::Allocator; + *SHCXX_rv = SH_this->makeAllocator( + SHCXX_name, *SHCXX_allocator, initial_size, block); + SHC_rv->addr = SHCXX_rv; + SHC_rv->idtor = 1; + return SHC_rv; + // splicer end class.ResourceManager.method.make_allocator_quick_pool_untracked_bufferify +} + +umpire_allocator * umpire_resourcemanager_make_allocator_resource_aware_pool_untracked( + umpire_resourcemanager * self, const char * name, + umpire_allocator allocator, size_t initial_size, size_t block, + umpire_allocator * SHC_rv) +{ + umpire::ResourceManager *SH_this = + static_cast(self->addr); + // splicer begin class.ResourceManager.method.make_allocator_resource_aware_pool_untracked + const std::string SHC_name_cxx(name); + umpire::Allocator *SHC_allocator_cxx = + static_cast(allocator.addr); + umpire::Allocator *SHC_rv_cxx = new umpire::Allocator; + *SHC_rv_cxx = SH_this->makeAllocator( + SHC_name_cxx, *SHC_allocator_cxx, initial_size, block); + SHC_rv->addr = SHC_rv_cxx; + SHC_rv->idtor = 1; + return SHC_rv; + // splicer end class.ResourceManager.method.make_allocator_resource_aware_pool_untracked +} + +umpire_allocator * umpire_resourcemanager_make_allocator_resource_aware_pool_untracked_bufferify( + umpire_resourcemanager * self, const char * name, int Lname, + umpire_allocator allocator, size_t initial_size, size_t block, + umpire_allocator * SHC_rv) +{ + umpire::ResourceManager *SH_this = + static_cast(self->addr); + // splicer begin class.ResourceManager.method.make_allocator_resource_aware_pool_untracked_bufferify + const std::string SHCXX_name(name, Lname); + umpire::Allocator * SHCXX_allocator = + static_cast(allocator.addr); + umpire::Allocator * SHCXX_rv = new umpire::Allocator; + *SHCXX_rv = SH_this->makeAllocator( + SHCXX_name, *SHCXX_allocator, initial_size, block); + SHC_rv->addr = SHCXX_rv; + SHC_rv->idtor = 1; + return SHC_rv; + // splicer end class.ResourceManager.method.make_allocator_resource_aware_pool_untracked_bufferify +} + +umpire_allocator * umpire_resourcemanager_make_allocator_fixed_pool_untracked( + umpire_resourcemanager * self, const char * name, + umpire_allocator allocator, size_t object_size, + umpire_allocator * SHC_rv) +{ + umpire::ResourceManager *SH_this = + static_cast(self->addr); + // splicer begin class.ResourceManager.method.make_allocator_fixed_pool_untracked + const std::string SHC_name_cxx(name); + umpire::Allocator *SHC_allocator_cxx = + static_cast(allocator.addr); + umpire::Allocator *SHC_rv_cxx = new umpire::Allocator; + *SHC_rv_cxx = SH_this->makeAllocator( + SHC_name_cxx, *SHC_allocator_cxx, object_size); + SHC_rv->addr = SHC_rv_cxx; + SHC_rv->idtor = 1; + return SHC_rv; + // splicer end class.ResourceManager.method.make_allocator_fixed_pool_untracked +} + +umpire_allocator * umpire_resourcemanager_make_allocator_fixed_pool_untracked_bufferify( + umpire_resourcemanager * self, const char * name, int Lname, + umpire_allocator allocator, size_t object_size, + umpire_allocator * SHC_rv) +{ + umpire::ResourceManager *SH_this = + static_cast(self->addr); + // splicer begin class.ResourceManager.method.make_allocator_fixed_pool_untracked_bufferify + const std::string SHCXX_name(name, Lname); + umpire::Allocator * SHCXX_allocator = + static_cast(allocator.addr); + umpire::Allocator * SHCXX_rv = new umpire::Allocator; + *SHCXX_rv = SH_this->makeAllocator( + SHCXX_name, *SHCXX_allocator, object_size); + SHC_rv->addr = SHCXX_rv; + SHC_rv->idtor = 1; + return SHC_rv; + // splicer end class.ResourceManager.method.make_allocator_fixed_pool_untracked_bufferify +} + +umpire_allocator * umpire_resourcemanager_make_allocator_monotonic_untracked( + umpire_resourcemanager * self, const char * name, + umpire_allocator allocator, size_t object_size, + umpire_allocator * SHC_rv) +{ + umpire::ResourceManager *SH_this = + static_cast(self->addr); + // splicer begin class.ResourceManager.method.make_allocator_monotonic_untracked + const std::string SHC_name_cxx(name); + umpire::Allocator *SHC_allocator_cxx = + static_cast(allocator.addr); + umpire::Allocator *SHC_rv_cxx = new umpire::Allocator; + *SHC_rv_cxx = SH_this->makeAllocator( + SHC_name_cxx, *SHC_allocator_cxx, object_size); + SHC_rv->addr = SHC_rv_cxx; + SHC_rv->idtor = 1; + return SHC_rv; + // splicer end class.ResourceManager.method.make_allocator_monotonic_untracked +} + +umpire_allocator * umpire_resourcemanager_make_allocator_monotonic_untracked_bufferify( + umpire_resourcemanager * self, const char * name, int Lname, + umpire_allocator allocator, size_t object_size, + umpire_allocator * SHC_rv) +{ + umpire::ResourceManager *SH_this = + static_cast(self->addr); + // splicer begin class.ResourceManager.method.make_allocator_monotonic_untracked_bufferify + const std::string SHCXX_name(name, Lname); + umpire::Allocator * SHCXX_allocator = + static_cast(allocator.addr); + umpire::Allocator * SHCXX_rv = new umpire::Allocator; + *SHCXX_rv = + SH_this->makeAllocator( + SHCXX_name, *SHCXX_allocator, object_size); + SHC_rv->addr = SHCXX_rv; + SHC_rv->idtor = 1; + return SHC_rv; + // splicer end class.ResourceManager.method.make_allocator_monotonic_untracked_bufferify +} + +umpire_allocator * umpire_resourcemanager_make_allocator_slot_pool_untracked( + umpire_resourcemanager * self, const char * name, + umpire_allocator allocator, size_t object_size, + umpire_allocator * SHC_rv) +{ + umpire::ResourceManager *SH_this = + static_cast(self->addr); + // splicer begin class.ResourceManager.method.make_allocator_slot_pool_untracked + const std::string SHC_name_cxx(name); + umpire::Allocator *SHC_allocator_cxx = + static_cast(allocator.addr); + umpire::Allocator *SHC_rv_cxx = new umpire::Allocator; + *SHC_rv_cxx = SH_this->makeAllocator( + SHC_name_cxx, *SHC_allocator_cxx, object_size); + SHC_rv->addr = SHC_rv_cxx; + SHC_rv->idtor = 1; + return SHC_rv; + // splicer end class.ResourceManager.method.make_allocator_slot_pool_untracked +} + +umpire_allocator * umpire_resourcemanager_make_allocator_slot_pool_untracked_bufferify( + umpire_resourcemanager * self, const char * name, int Lname, + umpire_allocator allocator, size_t object_size, + umpire_allocator * SHC_rv) +{ + umpire::ResourceManager *SH_this = + static_cast(self->addr); + // splicer begin class.ResourceManager.method.make_allocator_slot_pool_untracked_bufferify + const std::string SHCXX_name(name, Lname); + umpire::Allocator * SHCXX_allocator = + static_cast(allocator.addr); + umpire::Allocator * SHCXX_rv = new umpire::Allocator; + *SHCXX_rv = SH_this->makeAllocator( + SHCXX_name, *SHCXX_allocator, object_size); + SHC_rv->addr = SHCXX_rv; + SHC_rv->idtor = 1; + return SHC_rv; + // splicer end class.ResourceManager.method.make_allocator_slot_pool_untracked_bufferify +} + +umpire_allocator * umpire_resourcemanager_make_allocator_mixed_pool_untracked( + umpire_resourcemanager * self, const char * name, + umpire_allocator allocator, size_t smallest_fixed_obj_size, + size_t largest_fixed_obj_size, size_t max_initial_fixed_pool_size, + size_t fixed_size_multiplier, size_t quick_pool_initial_alloc_size, + size_t quick_pool_min_alloc_size, size_t quick_pool_align_bytes, + umpire_allocator * SHC_rv) +{ + umpire::ResourceManager *SH_this = + static_cast(self->addr); + // splicer begin class.ResourceManager.method.make_allocator_mixed_pool_untracked + const std::string SHC_name_cxx(name); + umpire::Allocator *SHC_allocator_cxx = + static_cast(allocator.addr); + umpire::Allocator *SHC_rv_cxx = new umpire::Allocator; + *SHC_rv_cxx = SH_this->makeAllocator( + SHC_name_cxx, *SHC_allocator_cxx, smallest_fixed_obj_size, + largest_fixed_obj_size, max_initial_fixed_pool_size, + fixed_size_multiplier, quick_pool_initial_alloc_size, + quick_pool_min_alloc_size, quick_pool_align_bytes); + SHC_rv->addr = SHC_rv_cxx; + SHC_rv->idtor = 1; + return SHC_rv; + // splicer end class.ResourceManager.method.make_allocator_mixed_pool_untracked +} + +umpire_allocator * umpire_resourcemanager_make_allocator_mixed_pool_untracked_bufferify( + umpire_resourcemanager * self, const char * name, int Lname, + umpire_allocator allocator, size_t smallest_fixed_obj_size, + size_t largest_fixed_obj_size, size_t max_initial_fixed_pool_size, + size_t fixed_size_multiplier, size_t quick_pool_initial_alloc_size, + size_t quick_pool_min_alloc_size, size_t quick_pool_align_bytes, + umpire_allocator * SHC_rv) +{ + umpire::ResourceManager *SH_this = + static_cast(self->addr); + // splicer begin class.ResourceManager.method.make_allocator_mixed_pool_untracked_bufferify + const std::string SHCXX_name(name, Lname); + umpire::Allocator * SHCXX_allocator = + static_cast(allocator.addr); + umpire::Allocator * SHCXX_rv = new umpire::Allocator; + *SHCXX_rv = SH_this->makeAllocator( + SHCXX_name, *SHCXX_allocator, smallest_fixed_obj_size, + largest_fixed_obj_size, max_initial_fixed_pool_size, + fixed_size_multiplier, quick_pool_initial_alloc_size, + quick_pool_min_alloc_size, quick_pool_align_bytes); + SHC_rv->addr = SHCXX_rv; + SHC_rv->idtor = 1; + return SHC_rv; + // splicer end class.ResourceManager.method.make_allocator_mixed_pool_untracked_bufferify +} + void umpire_resourcemanager_add_alias(umpire_resourcemanager * self, const char * name, umpire_allocator allocator) { diff --git a/src/umpire/interface/c_fortran/wrapResourceManager.h b/src/umpire/interface/c_fortran/wrapResourceManager.h index 8b2584ac5..b57996a73 100644 --- a/src/umpire/interface/c_fortran/wrapResourceManager.h +++ b/src/umpire/interface/c_fortran/wrapResourceManager.h @@ -186,6 +186,82 @@ umpire_allocator * umpire_resourcemanager_make_allocator_bufferify_prefetcher( umpire_allocator allocator, int device_id, umpire_allocator * SHC_rv); +umpire_allocator * umpire_resourcemanager_make_allocator_list_pool_untracked( + umpire_resourcemanager * self, const char * name, + umpire_allocator allocator, size_t initial_size, size_t block, + umpire_allocator * SHC_rv); + +umpire_allocator * umpire_resourcemanager_make_allocator_list_pool_untracked_bufferify( + umpire_resourcemanager * self, const char * name, int Lname, + umpire_allocator allocator, size_t initial_size, size_t block, + umpire_allocator * SHC_rv); + +umpire_allocator * umpire_resourcemanager_make_allocator_quick_pool_untracked( + umpire_resourcemanager * self, const char * name, + umpire_allocator allocator, size_t initial_size, size_t block, + umpire_allocator * SHC_rv); + +umpire_allocator * umpire_resourcemanager_make_allocator_quick_pool_untracked_bufferify( + umpire_resourcemanager * self, const char * name, int Lname, + umpire_allocator allocator, size_t initial_size, size_t block, + umpire_allocator * SHC_rv); + +umpire_allocator * umpire_resourcemanager_make_allocator_resource_aware_pool_untracked( + umpire_resourcemanager * self, const char * name, + umpire_allocator allocator, size_t initial_size, size_t block, + umpire_allocator * SHC_rv); + +umpire_allocator * umpire_resourcemanager_make_allocator_resource_aware_pool_untracked_bufferify( + umpire_resourcemanager * self, const char * name, int Lname, + umpire_allocator allocator, size_t initial_size, size_t block, + umpire_allocator * SHC_rv); + +umpire_allocator * umpire_resourcemanager_make_allocator_fixed_pool_untracked( + umpire_resourcemanager * self, const char * name, + umpire_allocator allocator, size_t object_size, + umpire_allocator * SHC_rv); + +umpire_allocator * umpire_resourcemanager_make_allocator_fixed_pool_untracked_bufferify( + umpire_resourcemanager * self, const char * name, int Lname, + umpire_allocator allocator, size_t object_size, + umpire_allocator * SHC_rv); + +umpire_allocator * umpire_resourcemanager_make_allocator_monotonic_untracked( + umpire_resourcemanager * self, const char * name, + umpire_allocator allocator, size_t object_size, + umpire_allocator * SHC_rv); + +umpire_allocator * umpire_resourcemanager_make_allocator_monotonic_untracked_bufferify( + umpire_resourcemanager * self, const char * name, int Lname, + umpire_allocator allocator, size_t object_size, + umpire_allocator * SHC_rv); + +umpire_allocator * umpire_resourcemanager_make_allocator_slot_pool_untracked( + umpire_resourcemanager * self, const char * name, + umpire_allocator allocator, size_t object_size, + umpire_allocator * SHC_rv); + +umpire_allocator * umpire_resourcemanager_make_allocator_slot_pool_untracked_bufferify( + umpire_resourcemanager * self, const char * name, int Lname, + umpire_allocator allocator, size_t object_size, + umpire_allocator * SHC_rv); + +umpire_allocator * umpire_resourcemanager_make_allocator_mixed_pool_untracked( + umpire_resourcemanager * self, const char * name, + umpire_allocator allocator, size_t smallest_fixed_obj_size, + size_t largest_fixed_obj_size, size_t max_initial_fixed_pool_size, + size_t fixed_size_multiplier, size_t quick_pool_initial_alloc_size, + size_t quick_pool_min_alloc_size, size_t quick_pool_align_bytes, + umpire_allocator * SHC_rv); + +umpire_allocator * umpire_resourcemanager_make_allocator_mixed_pool_untracked_bufferify( + umpire_resourcemanager * self, const char * name, int Lname, + umpire_allocator allocator, size_t smallest_fixed_obj_size, + size_t largest_fixed_obj_size, size_t max_initial_fixed_pool_size, + size_t fixed_size_multiplier, size_t quick_pool_initial_alloc_size, + size_t quick_pool_min_alloc_size, size_t quick_pool_align_bytes, + umpire_allocator * SHC_rv); + void umpire_resourcemanager_add_alias(umpire_resourcemanager * self, const char * name, umpire_allocator allocator); diff --git a/src/umpire/interface/c_fortran/wrapfumpire.f b/src/umpire/interface/c_fortran/wrapfumpire.f index 1646a604f..f43c8b1fb 100644 --- a/src/umpire/interface/c_fortran/wrapfumpire.f +++ b/src/umpire/interface/c_fortran/wrapfumpire.f @@ -242,6 +242,13 @@ module umpire_mod procedure :: make_allocator_naming_shim => resourcemanager_make_allocator_naming_shim procedure :: make_allocator_mixed_pool => resourcemanager_make_allocator_mixed_pool procedure :: make_allocator_prefetcher => resourcemanager_make_allocator_prefetcher + procedure :: make_allocator_list_pool_untracked => make_alloc_dynamic_p_list_u + procedure :: make_allocator_quick_pool_untracked => make_alloc_quick_p_u + procedure :: make_allocator_resource_aware_pool_untracked => make_alloc_res_aware_p_u + procedure :: make_allocator_fixed_pool_untracked => make_alloc_fixed_p_u + procedure :: make_allocator_monotonic_untracked => make_alloc_monotonic_u + procedure :: make_allocator_slot_pool_untracked => make_alloc_slot_p_u + procedure :: make_allocator_mixed_pool_untracked => make_alloc_mixed_p_u procedure :: add_alias => resourcemanager_add_alias procedure :: remove_alias => resourcemanager_remove_alias procedure :: destroy_allocator_by_name => resourcemanager_destroy_allocator_by_name @@ -917,6 +924,251 @@ function c_resourcemanager_make_allocator_bufferify_prefetcher( & type(C_PTR) SHT_rv end function c_resourcemanager_make_allocator_bufferify_prefetcher + function c_resourcemanager_make_alloc_dynamic_p_list_u(self, & + name, allocator, initial_size, block, SHT_crv) & + result(SHT_rv) & + bind(C, name="umpire_resourcemanager_make_allocator_list_pool_untracked") + use iso_c_binding, only : C_CHAR, C_PTR, C_SIZE_T + import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule + implicit none + type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self + character(kind=C_CHAR), intent(IN) :: name(*) + type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator + integer(C_SIZE_T), value, intent(IN) :: initial_size + integer(C_SIZE_T), value, intent(IN) :: block + type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv + type(C_PTR) SHT_rv + end function c_resourcemanager_make_alloc_dynamic_p_list_u + + function c_resourcemanager_make_alloc_dynamic_p_list_u_bufferify( & + self, name, Lname, allocator, initial_size, block, & + SHT_crv) & + result(SHT_rv) & + bind(C, name="umpire_resourcemanager_make_allocator_list_pool_untracked_bufferify") + use iso_c_binding, only : C_CHAR, C_INT, C_PTR, C_SIZE_T + import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule + implicit none + type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self + character(kind=C_CHAR), intent(IN) :: name(*) + integer(C_INT), value, intent(IN) :: Lname + type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator + integer(C_SIZE_T), value, intent(IN) :: initial_size + integer(C_SIZE_T), value, intent(IN) :: block + type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv + type(C_PTR) SHT_rv + end function c_resourcemanager_make_alloc_dynamic_p_list_u_bufferify + + function c_resourcemanager_make_alloc_quick_p_u(self, name, & + allocator, initial_size, block, SHT_crv) & + result(SHT_rv) & + bind(C, name="umpire_resourcemanager_make_allocator_quick_pool_untracked") + use iso_c_binding, only : C_CHAR, C_PTR, C_SIZE_T + import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule + implicit none + type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self + character(kind=C_CHAR), intent(IN) :: name(*) + type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator + integer(C_SIZE_T), value, intent(IN) :: initial_size + integer(C_SIZE_T), value, intent(IN) :: block + type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv + type(C_PTR) SHT_rv + end function c_resourcemanager_make_alloc_quick_p_u + + function c_resourcemanager_make_alloc_quick_p_u_bufferify(self, & + name, Lname, allocator, initial_size, block, SHT_crv) & + result(SHT_rv) & + bind(C, name="umpire_resourcemanager_make_allocator_quick_pool_untracked_bufferify") + use iso_c_binding, only : C_CHAR, C_INT, C_PTR, C_SIZE_T + import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule + implicit none + type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self + character(kind=C_CHAR), intent(IN) :: name(*) + integer(C_INT), value, intent(IN) :: Lname + type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator + integer(C_SIZE_T), value, intent(IN) :: initial_size + integer(C_SIZE_T), value, intent(IN) :: block + type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv + type(C_PTR) SHT_rv + end function c_resourcemanager_make_alloc_quick_p_u_bufferify + + function c_resourcemanager_make_alloc_res_aware_p_u(self, name, & + allocator, initial_size, block, SHT_crv) & + result(SHT_rv) & + bind(C, name="umpire_resourcemanager_make_allocator_resource_aware_pool_untracked") + use iso_c_binding, only : C_CHAR, C_PTR, C_SIZE_T + import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule + implicit none + type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self + character(kind=C_CHAR), intent(IN) :: name(*) + type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator + integer(C_SIZE_T), value, intent(IN) :: initial_size + integer(C_SIZE_T), value, intent(IN) :: block + type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv + type(C_PTR) SHT_rv + end function c_resourcemanager_make_alloc_res_aware_p_u + + function c_resourcemanager_make_alloc_res_aware_p_u_bufferify( & + self, name, Lname, allocator, initial_size, block, & + SHT_crv) & + result(SHT_rv) & + bind(C, name="umpire_resourcemanager_make_allocator_resource_aware_pool_untracked_bufferify") + use iso_c_binding, only : C_CHAR, C_INT, C_PTR, C_SIZE_T + import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule + implicit none + type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self + character(kind=C_CHAR), intent(IN) :: name(*) + integer(C_INT), value, intent(IN) :: Lname + type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator + integer(C_SIZE_T), value, intent(IN) :: initial_size + integer(C_SIZE_T), value, intent(IN) :: block + type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv + type(C_PTR) SHT_rv + end function c_resourcemanager_make_alloc_res_aware_p_u_bufferify + + function c_resourcemanager_make_alloc_fixed_p_u(self, name, & + allocator, object_size, SHT_crv) & + result(SHT_rv) & + bind(C, name="umpire_resourcemanager_make_allocator_fixed_pool_untracked") + use iso_c_binding, only : C_CHAR, C_PTR, C_SIZE_T + import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule + implicit none + type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self + character(kind=C_CHAR), intent(IN) :: name(*) + type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator + integer(C_SIZE_T), value, intent(IN) :: object_size + type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv + type(C_PTR) SHT_rv + end function c_resourcemanager_make_alloc_fixed_p_u + + function c_resourcemanager_make_alloc_fixed_p_u_bufferify(self, & + name, Lname, allocator, object_size, SHT_crv) & + result(SHT_rv) & + bind(C, name="umpire_resourcemanager_make_allocator_fixed_pool_untracked_bufferify") + use iso_c_binding, only : C_CHAR, C_INT, C_PTR, C_SIZE_T + import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule + implicit none + type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self + character(kind=C_CHAR), intent(IN) :: name(*) + integer(C_INT), value, intent(IN) :: Lname + type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator + integer(C_SIZE_T), value, intent(IN) :: object_size + type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv + type(C_PTR) SHT_rv + end function c_resourcemanager_make_alloc_fixed_p_u_bufferify + + function c_resourcemanager_make_alloc_monotonic_u(self, name, & + allocator, object_size, SHT_crv) & + result(SHT_rv) & + bind(C, name="umpire_resourcemanager_make_allocator_monotonic_untracked") + use iso_c_binding, only : C_CHAR, C_PTR, C_SIZE_T + import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule + implicit none + type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self + character(kind=C_CHAR), intent(IN) :: name(*) + type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator + integer(C_SIZE_T), value, intent(IN) :: object_size + type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv + type(C_PTR) SHT_rv + end function c_resourcemanager_make_alloc_monotonic_u + + function c_resourcemanager_make_alloc_monotonic_u_bufferify( & + self, name, Lname, allocator, object_size, SHT_crv) & + result(SHT_rv) & + bind(C, name="umpire_resourcemanager_make_allocator_monotonic_untracked_bufferify") + use iso_c_binding, only : C_CHAR, C_INT, C_PTR, C_SIZE_T + import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule + implicit none + type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self + character(kind=C_CHAR), intent(IN) :: name(*) + integer(C_INT), value, intent(IN) :: Lname + type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator + integer(C_SIZE_T), value, intent(IN) :: object_size + type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv + type(C_PTR) SHT_rv + end function c_resourcemanager_make_alloc_monotonic_u_bufferify + + function c_resourcemanager_make_alloc_slot_p_u(self, name, & + allocator, object_size, SHT_crv) & + result(SHT_rv) & + bind(C, name="umpire_resourcemanager_make_allocator_slot_pool_untracked") + use iso_c_binding, only : C_CHAR, C_PTR, C_SIZE_T + import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule + implicit none + type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self + character(kind=C_CHAR), intent(IN) :: name(*) + type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator + integer(C_SIZE_T), value, intent(IN) :: object_size + type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv + type(C_PTR) SHT_rv + end function c_resourcemanager_make_alloc_slot_p_u + + function c_resourcemanager_make_alloc_slot_p_u_bufferify(self, & + name, Lname, allocator, object_size, SHT_crv) & + result(SHT_rv) & + bind(C, name="umpire_resourcemanager_make_allocator_slot_pool_untracked_bufferify") + use iso_c_binding, only : C_CHAR, C_INT, C_PTR, C_SIZE_T + import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule + implicit none + type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self + character(kind=C_CHAR), intent(IN) :: name(*) + integer(C_INT), value, intent(IN) :: Lname + type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator + integer(C_SIZE_T), value, intent(IN) :: object_size + type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv + type(C_PTR) SHT_rv + end function c_resourcemanager_make_alloc_slot_p_u_bufferify + + function c_resourcemanager_make_alloc_mixed_p_u(self, name, & + allocator, smallest_fixed_obj_size, & + largest_fixed_obj_size, max_initial_fixed_pool_size, & + fixed_size_multiplier, quick_pool_initial_alloc_size, & + quick_pool_min_alloc_size, quick_pool_align_bytes, & + SHT_crv) & + result(SHT_rv) & + bind(C, name="umpire_resourcemanager_make_allocator_mixed_pool_untracked") + use iso_c_binding, only : C_CHAR, C_PTR, C_SIZE_T + import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule + implicit none + type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self + character(kind=C_CHAR), intent(IN) :: name(*) + type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator + integer(C_SIZE_T), value, intent(IN) :: smallest_fixed_obj_size + integer(C_SIZE_T), value, intent(IN) :: largest_fixed_obj_size + integer(C_SIZE_T), value, intent(IN) :: max_initial_fixed_pool_size + integer(C_SIZE_T), value, intent(IN) :: fixed_size_multiplier + integer(C_SIZE_T), value, intent(IN) :: quick_pool_initial_alloc_size + integer(C_SIZE_T), value, intent(IN) :: quick_pool_min_alloc_size + integer(C_SIZE_T), value, intent(IN) :: quick_pool_align_bytes + type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv + type(C_PTR) SHT_rv + end function c_resourcemanager_make_alloc_mixed_p_u + + function c_resourcemanager_make_alloc_mixed_p_u_bufferify(self, & + name, Lname, allocator, smallest_fixed_obj_size, & + largest_fixed_obj_size, max_initial_fixed_pool_size, & + fixed_size_multiplier, quick_pool_initial_alloc_size, & + quick_pool_min_alloc_size, quick_pool_align_bytes, & + SHT_crv) & + result(SHT_rv) & + bind(C, name="umpire_resourcemanager_make_allocator_mixed_pool_untracked_bufferify") + use iso_c_binding, only : C_CHAR, C_INT, C_PTR, C_SIZE_T + import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule + implicit none + type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self + character(kind=C_CHAR), intent(IN) :: name(*) + integer(C_INT), value, intent(IN) :: Lname + type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator + integer(C_SIZE_T), value, intent(IN) :: smallest_fixed_obj_size + integer(C_SIZE_T), value, intent(IN) :: largest_fixed_obj_size + integer(C_SIZE_T), value, intent(IN) :: max_initial_fixed_pool_size + integer(C_SIZE_T), value, intent(IN) :: fixed_size_multiplier + integer(C_SIZE_T), value, intent(IN) :: quick_pool_initial_alloc_size + integer(C_SIZE_T), value, intent(IN) :: quick_pool_min_alloc_size + integer(C_SIZE_T), value, intent(IN) :: quick_pool_align_bytes + type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv + type(C_PTR) SHT_rv + end function c_resourcemanager_make_alloc_mixed_p_u_bufferify + subroutine c_resourcemanager_add_alias(self, name, allocator) & bind(C, name="umpire_resourcemanager_add_alias") use iso_c_binding, only : C_CHAR @@ -3164,6 +3416,137 @@ function resourcemanager_make_allocator_prefetcher(obj, name, & ! splicer end class.ResourceManager.method.make_allocator_prefetcher end function resourcemanager_make_allocator_prefetcher + function make_alloc_dynamic_p_list_u(obj, name, allocator, & + initial_size, block) & + result(SHT_rv) + use iso_c_binding, only : C_INT, C_PTR, C_SIZE_T + class(UmpireResourceManager) :: obj + character(len=*), intent(IN) :: name + type(UmpireAllocator), value, intent(IN) :: allocator + integer(C_SIZE_T), value, intent(IN) :: initial_size + integer(C_SIZE_T), value, intent(IN) :: block + type(UmpireAllocator) :: SHT_rv + ! splicer begin class.ResourceManager.method.make_allocator_list_pool_untracked + type(C_PTR) :: SHT_prv + SHT_prv = c_resourcemanager_make_alloc_dynamic_p_list_u_bufferify(obj%cxxmem, & + name, len_trim(name, kind=C_INT), allocator%cxxmem, & + initial_size, block, SHT_rv%cxxmem) + ! splicer end class.ResourceManager.method.make_allocator_list_pool_untracked + end function make_alloc_dynamic_p_list_u + + function make_alloc_quick_p_u(obj, name, allocator, initial_size, & + block) & + result(SHT_rv) + use iso_c_binding, only : C_INT, C_PTR, C_SIZE_T + class(UmpireResourceManager) :: obj + character(len=*), intent(IN) :: name + type(UmpireAllocator), value, intent(IN) :: allocator + integer(C_SIZE_T), value, intent(IN) :: initial_size + integer(C_SIZE_T), value, intent(IN) :: block + type(UmpireAllocator) :: SHT_rv + ! splicer begin class.ResourceManager.method.make_allocator_quick_pool_untracked + type(C_PTR) :: SHT_prv + SHT_prv = c_resourcemanager_make_alloc_quick_p_u_bufferify(obj%cxxmem, & + name, len_trim(name, kind=C_INT), allocator%cxxmem, & + initial_size, block, SHT_rv%cxxmem) + ! splicer end class.ResourceManager.method.make_allocator_quick_pool_untracked + end function make_alloc_quick_p_u + + function make_alloc_res_aware_p_u(obj, name, allocator, & + initial_size, block) & + result(SHT_rv) + use iso_c_binding, only : C_INT, C_PTR, C_SIZE_T + class(UmpireResourceManager) :: obj + character(len=*), intent(IN) :: name + type(UmpireAllocator), value, intent(IN) :: allocator + integer(C_SIZE_T), value, intent(IN) :: initial_size + integer(C_SIZE_T), value, intent(IN) :: block + type(UmpireAllocator) :: SHT_rv + ! splicer begin class.ResourceManager.method.make_allocator_resource_aware_pool_untracked + type(C_PTR) :: SHT_prv + SHT_prv = c_resourcemanager_make_alloc_res_aware_p_u_bufferify(obj%cxxmem, & + name, len_trim(name, kind=C_INT), allocator%cxxmem, & + initial_size, block, SHT_rv%cxxmem) + ! splicer end class.ResourceManager.method.make_allocator_resource_aware_pool_untracked + end function make_alloc_res_aware_p_u + + function make_alloc_fixed_p_u(obj, name, allocator, object_size) & + result(SHT_rv) + use iso_c_binding, only : C_INT, C_PTR, C_SIZE_T + class(UmpireResourceManager) :: obj + character(len=*), intent(IN) :: name + type(UmpireAllocator), value, intent(IN) :: allocator + integer(C_SIZE_T), value, intent(IN) :: object_size + type(UmpireAllocator) :: SHT_rv + ! splicer begin class.ResourceManager.method.make_allocator_fixed_pool_untracked + type(C_PTR) :: SHT_prv + SHT_prv = c_resourcemanager_make_alloc_fixed_p_u_bufferify(obj%cxxmem, & + name, len_trim(name, kind=C_INT), allocator%cxxmem, & + object_size, SHT_rv%cxxmem) + ! splicer end class.ResourceManager.method.make_allocator_fixed_pool_untracked + end function make_alloc_fixed_p_u + + function make_alloc_monotonic_u(obj, name, allocator, object_size) & + result(SHT_rv) + use iso_c_binding, only : C_INT, C_PTR, C_SIZE_T + class(UmpireResourceManager) :: obj + character(len=*), intent(IN) :: name + type(UmpireAllocator), value, intent(IN) :: allocator + integer(C_SIZE_T), value, intent(IN) :: object_size + type(UmpireAllocator) :: SHT_rv + ! splicer begin class.ResourceManager.method.make_allocator_monotonic_untracked + type(C_PTR) :: SHT_prv + SHT_prv = c_resourcemanager_make_alloc_monotonic_u_bufferify(obj%cxxmem, & + name, len_trim(name, kind=C_INT), allocator%cxxmem, & + object_size, SHT_rv%cxxmem) + ! splicer end class.ResourceManager.method.make_allocator_monotonic_untracked + end function make_alloc_monotonic_u + + function make_alloc_slot_p_u(obj, name, allocator, object_size) & + result(SHT_rv) + use iso_c_binding, only : C_INT, C_PTR, C_SIZE_T + class(UmpireResourceManager) :: obj + character(len=*), intent(IN) :: name + type(UmpireAllocator), value, intent(IN) :: allocator + integer(C_SIZE_T), value, intent(IN) :: object_size + type(UmpireAllocator) :: SHT_rv + ! splicer begin class.ResourceManager.method.make_allocator_slot_pool_untracked + type(C_PTR) :: SHT_prv + SHT_prv = c_resourcemanager_make_alloc_slot_p_u_bufferify(obj%cxxmem, & + name, len_trim(name, kind=C_INT), allocator%cxxmem, & + object_size, SHT_rv%cxxmem) + ! splicer end class.ResourceManager.method.make_allocator_slot_pool_untracked + end function make_alloc_slot_p_u + + function make_alloc_mixed_p_u(obj, name, allocator, & + smallest_fixed_obj_size, largest_fixed_obj_size, & + max_initial_fixed_pool_size, fixed_size_multiplier, & + quick_pool_initial_alloc_size, quick_pool_min_alloc_size, & + quick_pool_align_bytes) & + result(SHT_rv) + use iso_c_binding, only : C_INT, C_PTR, C_SIZE_T + class(UmpireResourceManager) :: obj + character(len=*), intent(IN) :: name + type(UmpireAllocator), value, intent(IN) :: allocator + integer(C_SIZE_T), value, intent(IN) :: smallest_fixed_obj_size + integer(C_SIZE_T), value, intent(IN) :: largest_fixed_obj_size + integer(C_SIZE_T), value, intent(IN) :: max_initial_fixed_pool_size + integer(C_SIZE_T), value, intent(IN) :: fixed_size_multiplier + integer(C_SIZE_T), value, intent(IN) :: quick_pool_initial_alloc_size + integer(C_SIZE_T), value, intent(IN) :: quick_pool_min_alloc_size + integer(C_SIZE_T), value, intent(IN) :: quick_pool_align_bytes + type(UmpireAllocator) :: SHT_rv + ! splicer begin class.ResourceManager.method.make_allocator_mixed_pool_untracked + type(C_PTR) :: SHT_prv + SHT_prv = c_resourcemanager_make_alloc_mixed_p_u_bufferify(obj%cxxmem, & + name, len_trim(name, kind=C_INT), allocator%cxxmem, & + smallest_fixed_obj_size, largest_fixed_obj_size, & + max_initial_fixed_pool_size, fixed_size_multiplier, & + quick_pool_initial_alloc_size, quick_pool_min_alloc_size, & + quick_pool_align_bytes, SHT_rv%cxxmem) + ! splicer end class.ResourceManager.method.make_allocator_mixed_pool_untracked + end function make_alloc_mixed_p_u + subroutine resourcemanager_add_alias(obj, name, allocator) use iso_c_binding, only : C_INT class(UmpireResourceManager) :: obj diff --git a/src/umpire/interface/umpire_shroud.yaml b/src/umpire/interface/umpire_shroud.yaml index 602141467..d0b7d4b60 100644 --- a/src/umpire/interface/umpire_shroud.yaml +++ b/src/umpire/interface/umpire_shroud.yaml @@ -1,4 +1,4 @@ -############################################################################## +################################################################################## # Copyright (c) 2018-2022, Lawrence Livermore National Security, LLC. # Produced at the Lawrence Livermore National Laboratory # @@ -11,7 +11,7 @@ # # For details, see https://github.com/LLNL/Umpire # Please also see the LICENSE file for MIT license. -############################################################################## +################################################################################## copyright: - Copyright (c) 2016-26, Lawrence Livermore National Security, LLC and Umpire @@ -176,14 +176,17 @@ declarations: cxx_template: - instantiation: format: + F_name_impl_template: make_alloc_dynamic_p_list template_suffix: _list_pool function_suffix: "" - instantiation: format: + F_name_impl_template: make_alloc_quick_p template_suffix: _quick_pool function_suffix: "" - instantiation: format: + F_name_impl_template: make_alloc_res_aware_p template_suffix: _resource_aware_pool function_suffix: "" @@ -193,6 +196,7 @@ declarations: cxx_template: - instantiation: format: + F_name_impl_template: make_alloc_alloc_advisor template_suffix: _advisor function_suffix: "" @@ -202,10 +206,12 @@ declarations: cxx_template: - instantiation: format: + F_name_impl_template: make_alloc_named_alloc template_suffix: _named function_suffix: "" - instantiation: format: + F_name_impl_template: make_alloc_thread_safe template_suffix: _thread_safe function_suffix: "" @@ -215,22 +221,27 @@ declarations: cxx_template: - instantiation: format: + F_name_impl_template: make_alloc_fixed_p template_suffix: _fixed_pool function_suffix: "" - instantiation: format: + F_name_impl_template: make_alloc_aligned_alloc template_suffix: _aligned_allocator function_suffix: "" - instantiation: format: + F_name_impl_template: make_alloc_size_limit template_suffix: _size_limiter function_suffix: "" - instantiation: format: + F_name_impl_template: make_alloc_monotonic template_suffix: _monotonic function_suffix: "" - instantiation: format: + F_name_impl_template: make_alloc_slot_p template_suffix: _slot_pool function_suffix: "" @@ -240,6 +251,7 @@ declarations: cxx_template: - instantiation: format: + F_name_impl_template: make_alloc_naming_shim template_suffix: _naming_shim function_suffix: "" @@ -249,6 +261,7 @@ declarations: cxx_template: - instantiation: format: + F_name_impl_template: make_alloc_mixed_p template_suffix: _mixed_pool function_suffix: "" @@ -258,9 +271,136 @@ declarations: cxx_template: - instantiation: format: + F_name_impl_template: make_alloc_alloc_prefetch template_suffix: _prefetcher function_suffix: "" + # Untracked pool allocators need explicit names to keep the generated + # Fortran helper identifiers below compiler limits. The corresponding + # C bufferify wrappers are overridden by the C splicer include listed + # below, since Shroud emits invalid member calls for those helpers. + - decl: Allocator makeAllocator_list_pool_untracked(const std::string& name, Allocator allocator, size_t initial_size, size_t block) + options: + F_C_name_template: c_resourcemanager_make_alloc_dynamic_p_list_u{function_suffix}{template_suffix} + format: + F_name_impl: make_alloc_dynamic_p_list_u + splicer: + c: | + const std::string SHC_name_cxx(name); + umpire::Allocator *SHC_allocator_cxx = + static_cast(allocator.addr); + umpire::Allocator *SHC_rv_cxx = new umpire::Allocator; + *SHC_rv_cxx = SH_this->makeAllocator( + SHC_name_cxx, *SHC_allocator_cxx, initial_size, block); + SHC_rv->addr = SHC_rv_cxx; + SHC_rv->idtor = 1; + return SHC_rv; + + - decl: Allocator makeAllocator_quick_pool_untracked(const std::string& name, Allocator allocator, size_t initial_size, size_t block) + options: + F_C_name_template: c_resourcemanager_make_alloc_quick_p_u{function_suffix}{template_suffix} + format: + F_name_impl: make_alloc_quick_p_u + splicer: + c: | + const std::string SHC_name_cxx(name); + umpire::Allocator *SHC_allocator_cxx = + static_cast(allocator.addr); + umpire::Allocator *SHC_rv_cxx = new umpire::Allocator; + *SHC_rv_cxx = SH_this->makeAllocator( + SHC_name_cxx, *SHC_allocator_cxx, initial_size, block); + SHC_rv->addr = SHC_rv_cxx; + SHC_rv->idtor = 1; + return SHC_rv; + + - decl: Allocator makeAllocator_resource_aware_pool_untracked(const std::string& name, Allocator allocator, size_t initial_size, size_t block) + options: + F_C_name_template: c_resourcemanager_make_alloc_res_aware_p_u{function_suffix}{template_suffix} + format: + F_name_impl: make_alloc_res_aware_p_u + splicer: + c: | + const std::string SHC_name_cxx(name); + umpire::Allocator *SHC_allocator_cxx = + static_cast(allocator.addr); + umpire::Allocator *SHC_rv_cxx = new umpire::Allocator; + *SHC_rv_cxx = SH_this->makeAllocator( + SHC_name_cxx, *SHC_allocator_cxx, initial_size, block); + SHC_rv->addr = SHC_rv_cxx; + SHC_rv->idtor = 1; + return SHC_rv; + + - decl: Allocator makeAllocator_fixed_pool_untracked(const std::string& name, Allocator allocator, size_t object_size) + options: + F_C_name_template: c_resourcemanager_make_alloc_fixed_p_u{function_suffix}{template_suffix} + format: + F_name_impl: make_alloc_fixed_p_u + splicer: + c: | + const std::string SHC_name_cxx(name); + umpire::Allocator *SHC_allocator_cxx = + static_cast(allocator.addr); + umpire::Allocator *SHC_rv_cxx = new umpire::Allocator; + *SHC_rv_cxx = SH_this->makeAllocator( + SHC_name_cxx, *SHC_allocator_cxx, object_size); + SHC_rv->addr = SHC_rv_cxx; + SHC_rv->idtor = 1; + return SHC_rv; + + - decl: Allocator makeAllocator_monotonic_untracked(const std::string& name, Allocator allocator, size_t object_size) + options: + F_C_name_template: c_resourcemanager_make_alloc_monotonic_u{function_suffix}{template_suffix} + format: + F_name_impl: make_alloc_monotonic_u + splicer: + c: | + const std::string SHC_name_cxx(name); + umpire::Allocator *SHC_allocator_cxx = + static_cast(allocator.addr); + umpire::Allocator *SHC_rv_cxx = new umpire::Allocator; + *SHC_rv_cxx = SH_this->makeAllocator( + SHC_name_cxx, *SHC_allocator_cxx, object_size); + SHC_rv->addr = SHC_rv_cxx; + SHC_rv->idtor = 1; + return SHC_rv; + + - decl: Allocator makeAllocator_slot_pool_untracked(const std::string& name, Allocator allocator, size_t object_size) + options: + F_C_name_template: c_resourcemanager_make_alloc_slot_p_u{function_suffix}{template_suffix} + format: + F_name_impl: make_alloc_slot_p_u + splicer: + c: | + const std::string SHC_name_cxx(name); + umpire::Allocator *SHC_allocator_cxx = + static_cast(allocator.addr); + umpire::Allocator *SHC_rv_cxx = new umpire::Allocator; + *SHC_rv_cxx = SH_this->makeAllocator( + SHC_name_cxx, *SHC_allocator_cxx, object_size); + SHC_rv->addr = SHC_rv_cxx; + SHC_rv->idtor = 1; + return SHC_rv; + + - decl: Allocator makeAllocator_mixed_pool_untracked(const std::string& name, Allocator allocator, size_t smallest_fixed_obj_size, size_t largest_fixed_obj_size, size_t max_initial_fixed_pool_size, size_t fixed_size_multiplier, size_t quick_pool_initial_alloc_size, size_t quick_pool_min_alloc_size, size_t quick_pool_align_bytes) + options: + F_C_name_template: c_resourcemanager_make_alloc_mixed_p_u{function_suffix}{template_suffix} + format: + F_name_impl: make_alloc_mixed_p_u + splicer: + c: | + const std::string SHC_name_cxx(name); + umpire::Allocator *SHC_allocator_cxx = + static_cast(allocator.addr); + umpire::Allocator *SHC_rv_cxx = new umpire::Allocator; + *SHC_rv_cxx = SH_this->makeAllocator( + SHC_name_cxx, *SHC_allocator_cxx, smallest_fixed_obj_size, + largest_fixed_obj_size, max_initial_fixed_pool_size, + fixed_size_multiplier, quick_pool_initial_alloc_size, + quick_pool_min_alloc_size, quick_pool_align_bytes); + SHC_rv->addr = SHC_rv_cxx; + SHC_rv->idtor = 1; + return SHC_rv; + - decl: void addAlias(const std::string& name, Allocator allocator) - decl: void removeAlias(const std::string& name, Allocator allocator) @@ -326,5 +466,7 @@ declarations: - decl: void deregisterAllocation(void* ptr) splicer: + c: + - c_fortran/gencumpiresplicer.inc f: - c_fortran/genfumpiresplicer.f