'GCN_SUPPRESS_HOST_FALLBACK' originated as 'HSA_SUPPRESS_HOST_FALLBACK' in the
libgomp HSA plugin, where the idea was -- in my understanding -- that you
wouldn't have device code available for all functions that may be called, and
in that case transparently (shared memory system!) do host-fallback execution.
Or, with 'HSA_SUPPRESS_HOST_FALLBACK' set, you'd get those diagnosed.
This has then been copied into the libgomp GCN plugin as
'GCN_SUPPRESS_HOST_FALLBACK'. However, the original meaning isn't applicable
for the libgomp GCN plugin anymore: we assume that we're generating device code
for all relevant functions, and we're implementing a non-shared memory system,
where we cannot transparently do host-fallback execution for individual
functions.
However, 'GCN_SUPPRESS_HOST_FALLBACK' has gained an additional meaning, to
enforce a fatal error in case that 'libhsa-runtime64.so.1' can't be dynamically
loaded; keep that meaning.
libgomp/
* plugin/plugin-gcn.c (GOMP_OFFLOAD_can_run): Don't consider
'GCN_SUPPRESS_HOST_FALLBACK' anymore (assume always-'true').
(init_hsa_context): Adjust 'GCN_SUPPRESS_HOST_FALLBACK' error
message.
init_environment_variables ();
if (!init_hsa_runtime_functions ())
{
- GCN_WARNING ("Run-time could not be dynamically opened\n");
+ const char *msg = "Run-time could not be dynamically opened";
if (suppress_host_fallback)
- GOMP_PLUGIN_fatal ("GCN host fallback has been suppressed");
+ GOMP_PLUGIN_fatal ("%s\n", msg);
+ else
+ GCN_WARNING ("%s\n", msg);
return false;
}
status = hsa_fns.hsa_init_fn ();
init_kernel (kernel);
if (kernel->initialization_failed)
- goto failure;
+ GOMP_PLUGIN_fatal ("kernel initialization failed");
return true;
-
-failure:
- if (suppress_host_fallback)
- GOMP_PLUGIN_fatal ("GCN host fallback has been suppressed");
- GCN_WARNING ("GCN target cannot be launched, doing a host fallback\n");
- return false;
}
/* Allocate memory on device N. */