From: Tobias Burnus Date: Tue, 11 Jul 2023 14:11:35 +0000 (+0200) Subject: libgomp: Update OpenMP memory allocation doc, fix omp_high_bw_mem_space X-Git-Tag: basepoints/gcc-15~7705 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8c2fc744a25ec423ab1a317bf4e7d24315c40024;p=thirdparty%2Fgcc.git libgomp: Update OpenMP memory allocation doc, fix omp_high_bw_mem_space libgomp/ * allocator.c (omp_init_allocator): Use malloc for omp_high_bw_mem_space when the memkind lib is unavailable instead of returning omp_null_allocator. * libgomp.texi (OpenMP 5.0): Fix typo. (Memory allocation with libmemkind): Document implementation in more detail. --- diff --git a/libgomp/allocator.c b/libgomp/allocator.c index c49931cbad46..25c0f1503024 100644 --- a/libgomp/allocator.c +++ b/libgomp/allocator.c @@ -301,7 +301,7 @@ omp_init_allocator (omp_memspace_handle_t memspace, int ntraits, break; } #endif - return omp_null_allocator; + break; case omp_large_cap_mem_space: #ifdef LIBGOMP_USE_MEMKIND memkind_data = gomp_get_memkind (); diff --git a/libgomp/libgomp.texi b/libgomp/libgomp.texi index 7d27cc50df50..d1a5e67329a5 100644 --- a/libgomp/libgomp.texi +++ b/libgomp/libgomp.texi @@ -192,7 +192,7 @@ The OpenMP 4.5 specification is fully supported. env variable @tab Y @tab @item Nested-parallel changes to @var{max-active-levels-var} ICV @tab Y @tab @item @code{requires} directive @tab P - @tab complete but no non-host devices provides @code{unified_shared_memory} + @tab complete but no non-host device provides @code{unified_shared_memory} @item @code{teams} construct outside an enclosing target region @tab Y @tab @item Non-rectangular loop nests @tab P @tab Full support for C/C++, partial for Fortran @item @code{!=} as relational-op in canonical loop form for C/C++ @tab Y @tab @@ -4634,6 +4634,17 @@ smaller number. On non-host devices, the value of the @node Memory allocation with libmemkind @section Memory allocation with libmemkind +For the memory spaces, the following applies: +@itemize +@item @code{omp_default_mem_space} is supported +@item @code{omp_const_mem_space} maps to @code{omp_default_mem_space} +@item @code{omp_low_lat_mem_space} maps to @code{omp_default_mem_space} +@item @code{omp_large_cap_mem_space} maps to @code{omp_default_mem_space}, + unless the memkind library is available +@item @code{omp_high_bw_mem_space} maps to @code{omp_default_mem_space}, + unless the memkind library is available +@end itemize + On Linux systems, where the @uref{https://github.com/memkind/memkind, memkind library} (@code{libmemkind.so.0}) is available at runtime, it is used when creating memory allocators requesting @@ -4641,9 +4652,24 @@ creating memory allocators requesting @itemize @item the memory space @code{omp_high_bw_mem_space} @item the memory space @code{omp_large_cap_mem_space} -@item the partition trait @code{omp_atv_interleaved} +@item the partition trait @code{omp_atv_interleaved}; note that for + @code{omp_large_cap_mem_space} the allocation will not be interleaved @end itemize +Additional notes: +@itemize +@item The @code{pinned} trait is unsupported. +@item For the @code{partition} trait, the partition part size will be the same + as the requested size (i.e. @code{interleaved} or @code{blocked} has no + effect), except for @code{interleaved} when the memkind library is + available. Furthermore, for @code{nearest} the memory might not be + on the same NUMA node as thread that allocated the memory; on Linux, + this is in particular the case when the memory placement policy is + set to preferred. +@item The @code{access} trait has no effect such that memory is always + accessible by all threads. +@item The @code{sync_hint} trait has no effect. +@end itemize @c --------------------------------------------------------------------- @c Offload-Target Specifics