libgomp: plugin-gcn - support 'unified_address'

Effectively, for GCN (as for nvptx) there is a common address space between
host and device, whether being accessible or not. Thus, this commit
permits to use 'omp requires unified_address' with GCN devices.
(nvptx accepts this requirement since r13-3460-g131d18e928a3ea.)

libgomp/

	* plugin/plugin-gcn.c (GOMP_OFFLOAD_get_num_devices): Regard
	unified_address requirement as supported.
	* libgomp.texi (OpenMP 5.0, AMD Radeon, nvptx): Remove
	'unified_address' from the not-supported requirements.
This commit is contained in:
Tobias Burnus 2023-06-06 18:06:14 +02:00
parent 192665feef
commit f1af7d65ff
2 changed files with 7 additions and 6 deletions

View file

@ -192,8 +192,7 @@ The OpenMP 4.5 specification is fully supported.
env variable @tab Y @tab env variable @tab Y @tab
@item Nested-parallel changes to @emph{max-active-levels-var} ICV @tab Y @tab @item Nested-parallel changes to @emph{max-active-levels-var} ICV @tab Y @tab
@item @code{requires} directive @tab P @item @code{requires} directive @tab P
@tab complete but no non-host devices provides @code{unified_address} or @tab complete but no non-host devices provides @code{unified_shared_memory}
@code{unified_shared_memory}
@item @code{teams} construct outside an enclosing target region @tab Y @tab @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 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 @item @code{!=} as relational-op in canonical loop form for C/C++ @tab Y @tab
@ -4460,7 +4459,7 @@ The implementation remark:
@code{device(ancestor:1)}) are processed serially per @code{target} region @code{device(ancestor:1)}) are processed serially per @code{target} region
such that the next reverse offload region is only executed after the previous such that the next reverse offload region is only executed after the previous
one returned. one returned.
@item OpenMP code that has a requires directive with @code{unified_address} or @item OpenMP code that has a @code{requires} directive with
@code{unified_shared_memory} will remove any GCN device from the list of @code{unified_shared_memory} will remove any GCN device from the list of
available devices (``host fallback''). available devices (``host fallback'').
@item The available stack size can be changed using the @code{GCN_STACK_SIZE} @item The available stack size can be changed using the @code{GCN_STACK_SIZE}
@ -4522,8 +4521,8 @@ The implementation remark:
Per device, reverse offload regions are processed serially such that Per device, reverse offload regions are processed serially such that
the next reverse offload region is only executed after the previous the next reverse offload region is only executed after the previous
one returned. one returned.
@item OpenMP code that has a requires directive with @code{unified_address} @item OpenMP code that has a @code{requires} directive with
or @code{unified_shared_memory} will remove any nvptx device from the @code{unified_shared_memory} will remove any nvptx device from the
list of available devices (``host fallback''). list of available devices (``host fallback'').
@end itemize @end itemize

View file

@ -3231,7 +3231,9 @@ GOMP_OFFLOAD_get_num_devices (unsigned int omp_requires_mask)
/* Return -1 if no omp_requires_mask cannot be fulfilled but /* Return -1 if no omp_requires_mask cannot be fulfilled but
devices were present. */ devices were present. */
if (hsa_context.agent_count > 0 if (hsa_context.agent_count > 0
&& (omp_requires_mask & ~GOMP_REQUIRES_REVERSE_OFFLOAD) != 0) && ((omp_requires_mask
& ~(GOMP_REQUIRES_UNIFIED_ADDRESS
| GOMP_REQUIRES_REVERSE_OFFLOAD)) != 0))
return -1; return -1;
return hsa_context.agent_count; return hsa_context.agent_count;
} }