Skip to content
Snippets Groups Projects
  • Andrew Stubbs's avatar
    30486fab
    libgomp, nvptx: low-latency memory allocator · 30486fab
    Andrew Stubbs authored
    
    This patch adds support for allocating low-latency ".shared" memory on
    NVPTX GPU device, via the omp_low_lat_mem_space and omp_alloc.  The memory
    can be allocated, reallocated, and freed using a basic but fast algorithm,
    is thread safe and the size of the low-latency heap can be configured using
    the GOMP_NVPTX_LOWLAT_POOL environment variable.
    
    The use of the PTX dynamic_smem_size feature means that low-latency allocator
    will not work with the PTX 3.1 multilib.
    
    For now, the omp_low_lat_mem_alloc allocator also works, but that will change
    when I implement the access traits.
    
    libgomp/ChangeLog:
    
    	* allocator.c (MEMSPACE_ALLOC): New macro.
    	(MEMSPACE_CALLOC): New macro.
    	(MEMSPACE_REALLOC): New macro.
    	(MEMSPACE_FREE): New macro.
    	(predefined_alloc_mapping): New array.  Add _Static_assert to match.
    	(ARRAY_SIZE): New macro.
    	(omp_aligned_alloc): Use MEMSPACE_ALLOC.
    	Implement fall-backs for predefined allocators.  Simplify existing
    	fall-backs.
    	(omp_free): Use MEMSPACE_FREE.
    	(omp_calloc): Use MEMSPACE_CALLOC. Implement fall-backs for
    	predefined allocators.  Simplify existing fall-backs.
    	(omp_realloc): Use MEMSPACE_REALLOC, MEMSPACE_ALLOC, and MEMSPACE_FREE.
    	Implement fall-backs for predefined allocators.  Simplify existing
    	fall-backs.
    	* config/nvptx/team.c (__nvptx_lowlat_pool): New asm variable.
    	(__nvptx_lowlat_init): New prototype.
    	(gomp_nvptx_main): Call __nvptx_lowlat_init.
    	* libgomp.texi: Update memory space table.
    	* plugin/plugin-nvptx.c (lowlat_pool_size): New variable.
    	(GOMP_OFFLOAD_init_device): Read the GOMP_NVPTX_LOWLAT_POOL envvar.
    	(GOMP_OFFLOAD_run): Apply lowlat_pool_size.
    	* basic-allocator.c: New file.
    	* config/nvptx/allocator.c: New file.
    	* testsuite/libgomp.c/omp_alloc-1.c: New test.
    	* testsuite/libgomp.c/omp_alloc-2.c: New test.
    	* testsuite/libgomp.c/omp_alloc-3.c: New test.
    	* testsuite/libgomp.c/omp_alloc-4.c: New test.
    	* testsuite/libgomp.c/omp_alloc-5.c: New test.
    	* testsuite/libgomp.c/omp_alloc-6.c: New test.
    
    Co-authored-by: default avatarKwok Cheung Yeung <kcy@codesourcery.com>
    Co-Authored-By: default avatarThomas Schwinge <thomas@codesourcery.com>
    30486fab
    History
    libgomp, nvptx: low-latency memory allocator
    Andrew Stubbs authored
    
    This patch adds support for allocating low-latency ".shared" memory on
    NVPTX GPU device, via the omp_low_lat_mem_space and omp_alloc.  The memory
    can be allocated, reallocated, and freed using a basic but fast algorithm,
    is thread safe and the size of the low-latency heap can be configured using
    the GOMP_NVPTX_LOWLAT_POOL environment variable.
    
    The use of the PTX dynamic_smem_size feature means that low-latency allocator
    will not work with the PTX 3.1 multilib.
    
    For now, the omp_low_lat_mem_alloc allocator also works, but that will change
    when I implement the access traits.
    
    libgomp/ChangeLog:
    
    	* allocator.c (MEMSPACE_ALLOC): New macro.
    	(MEMSPACE_CALLOC): New macro.
    	(MEMSPACE_REALLOC): New macro.
    	(MEMSPACE_FREE): New macro.
    	(predefined_alloc_mapping): New array.  Add _Static_assert to match.
    	(ARRAY_SIZE): New macro.
    	(omp_aligned_alloc): Use MEMSPACE_ALLOC.
    	Implement fall-backs for predefined allocators.  Simplify existing
    	fall-backs.
    	(omp_free): Use MEMSPACE_FREE.
    	(omp_calloc): Use MEMSPACE_CALLOC. Implement fall-backs for
    	predefined allocators.  Simplify existing fall-backs.
    	(omp_realloc): Use MEMSPACE_REALLOC, MEMSPACE_ALLOC, and MEMSPACE_FREE.
    	Implement fall-backs for predefined allocators.  Simplify existing
    	fall-backs.
    	* config/nvptx/team.c (__nvptx_lowlat_pool): New asm variable.
    	(__nvptx_lowlat_init): New prototype.
    	(gomp_nvptx_main): Call __nvptx_lowlat_init.
    	* libgomp.texi: Update memory space table.
    	* plugin/plugin-nvptx.c (lowlat_pool_size): New variable.
    	(GOMP_OFFLOAD_init_device): Read the GOMP_NVPTX_LOWLAT_POOL envvar.
    	(GOMP_OFFLOAD_run): Apply lowlat_pool_size.
    	* basic-allocator.c: New file.
    	* config/nvptx/allocator.c: New file.
    	* testsuite/libgomp.c/omp_alloc-1.c: New test.
    	* testsuite/libgomp.c/omp_alloc-2.c: New test.
    	* testsuite/libgomp.c/omp_alloc-3.c: New test.
    	* testsuite/libgomp.c/omp_alloc-4.c: New test.
    	* testsuite/libgomp.c/omp_alloc-5.c: New test.
    	* testsuite/libgomp.c/omp_alloc-6.c: New test.
    
    Co-authored-by: default avatarKwok Cheung Yeung <kcy@codesourcery.com>
    Co-Authored-By: default avatarThomas Schwinge <thomas@codesourcery.com>