On 26/01/2024 14:04, Richard Biener wrote:
On Fri, 26 Jan 2024, Andrew Stubbs wrote:
On 26/01/2024 12:06, Jakub Jelinek wrote:
On Fri, Jan 26, 2024 at 01:00:28PM +0100, Richard Biener wrote:
The following avoids registering unsupported GCN offload devices
when iterating over available ones. With a Zen4 desktop CPU
you will have an IGPU (unspported) which will otherwise be made
available. This causes testcases like
libgomp.c-c++-common/non-rect-loop-1.c which iterate over all
decives to FAIL.
I'll run a bootstrap with both pending changes and will do
another round of full libgomp testing with this.
OK if that succeeds?
Thanks,
Richard.
libgomp/
* plugin/plugin-gcn.c (suitable_hsa_agent_p): Filter out
agents with unsupported ISA.
---
libgomp/plugin/plugin-gcn.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c
index 588358bbbf9..88ed77ff049 100644
--- a/libgomp/plugin/plugin-gcn.c
+++ b/libgomp/plugin/plugin-gcn.c
@@ -1427,6 +1427,8 @@ init_hsa_runtime_functions (void)
#undef DLSYM_FN
}
+static gcn_isa isa_code(const char *isa);
Space before ( please.
+
/* Return true if the agent is a GPU and can accept of concurrent
submissions
from different threads. */
@@ -1443,6 +1445,13 @@ suitable_hsa_agent_p (hsa_agent_t agent)
switch (device_type)
{
case HSA_DEVICE_TYPE_GPU:
+ {
+ char name[64];
+ if ((hsa_fns.hsa_agent_get_info_fn (agent, HSA_AGENT_INFO_NAME, name)
+ != HSA_STATUS_SUCCESS)
+ || isa_code (name) == EF_AMDGPU_MACH_UNSUPPORTED)
+ return false;
+ }
break;
case HSA_DEVICE_TYPE_CPU:
if (!support_cpu_devices)
Otherwise it looks reasoanble to me, but let's see what Andrew thinks.
'n' before 'a', please. ;-)
?!
I think we need at least a GCN_DEBUG message when we ignore a GPU device.
Possibly gomp_debug also.
Like the following? This will do
GCN debug: HSA run-time initialized for GCN
GCN debug: HSA_SYSTEM_INFO_ENDIANNESS: LITTLE
GCN debug: HSA_SYSTEM_INFO_EXTENSIONS: IMAGES
GCN debug: Ignoring unsupported agent 'gfx1036'
GCN debug: There are 1 GCN GPU devices.
GCN debug: Ignoring unsupported agent 'gfx1036'
GCN debug: HSA_AGENT_INFO_NAME: AMD Ryzen 9 7900X 12-Core Processor
...
for debug it's probably not too imporant to say this twice.
That said, no idea how to do gomp_debug.
OK?
I'm fairly comfortable with the repeat in debug output.
I mentioned gomp_debug because the target-independent GOMP_DEBUG=1 is a
lot less noisy and actually documented where end-users might find it.
From the plugin you would call GOMP_PLUGIN_debug (there are examples in
plugin-nvptx.c). Probably the repeat is less welcome in that case
though, so perhaps good for a follow-up.
Thanks,
Richard.
From 7462a8ac70aeebc231c65456b9060d8cbf7d4c50 Mon Sep 17 00:00:00 2001
From: Richard Biener <[email protected]>
Date: Fri, 26 Jan 2024 12:57:10 +0100
Subject: [PATCH] Avoid registering unsupported OMP offload devices
To: [email protected]
The following avoids registering unsupported GCN offload devices
when iterating over available ones. With a Zen4 desktop CPU
you will have an IGPU (unspported) which will otherwise be made
available. This causes testcases like
libgomp.c-c++-common/non-rect-loop-1.c which iterate over all
decives to FAIL.
libgomp/
* plugin/plugin-gcn.c (suitable_hsa_agent_p): Filter out
agents with unsupported ISA.
---
libgomp/plugin/plugin-gcn.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c
index 588358bbbf9..2a17dc8accc 100644
--- a/libgomp/plugin/plugin-gcn.c
+++ b/libgomp/plugin/plugin-gcn.c
@@ -1427,6 +1427,8 @@ init_hsa_runtime_functions (void)
#undef DLSYM_FN
}
+static gcn_isa isa_code (const char *isa);
+
/* Return true if the agent is a GPU and can accept of concurrent submissions
from different threads. */
@@ -1443,6 +1445,16 @@ suitable_hsa_agent_p (hsa_agent_t agent)
switch (device_type)
{
case HSA_DEVICE_TYPE_GPU:
+ {
+ char name[64] = "nil";
+ if ((hsa_fns.hsa_agent_get_info_fn (agent, HSA_AGENT_INFO_NAME, name)
+ != HSA_STATUS_SUCCESS)
+ || isa_code (name) == EF_AMDGPU_MACH_UNSUPPORTED)
+ {
+ GCN_DEBUG ("Ignoring unsupported agent '%s'\n", name);
+ return false;
+ }
+ }
break;
case HSA_DEVICE_TYPE_CPU:
if (!support_cpu_devices)
Like Jakub says, I think it needs to be like this, to be safe:
status = hsa_fns.hsa_agent_get_info_fn (...)
if (status unsuccessful || name unsupported)
if (status successful) output debug
return false
Andrew