Hi Thomas,
Thomas Schwinge wrote:
/* Return the number of GCN devices on the system. */
int
-GOMP_OFFLOAD_get_num_devices (void)
+GOMP_OFFLOAD_get_num_devices (unsigned int omp_requires_mask)
{
if (!init_hsa_context ())
return 0;
+ /* Return -1 if no omp_requires_mask cannot be fulfilled but
+ devices were present. */
+ if (hsa_context.agent_count > 0 && omp_requires_mask != 0)
+ return -1;
return hsa_context.agent_count;
}
...
OK to push the attached "nvptx: 'cuDeviceGetCount' failure is fatal"?
I think the real question is: what does a 'cuDeviceGetCount' fail mean?
Does it mean a serious error – or could it just be a permissions issue
such that the user has no device access but otherwise is fine?
Because if it is, e.g., a permission problem – just returning '0' (no
devices) would seem to be the proper solution.
But if it is expected to be always something serious, well, then a fatal
error makes more sense.
The possible exit codes are:
CUDA_SUCCESS, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_INITIALIZED,
CUDA_ERROR_INVALID_CONTEXT, CUDA_ERROR_INVALID_VALUE
which does not really help.
My impression is that 0 is usually returned if something goes wrong
(e.g. with permissions) such that an error is a real exception. But all
three choices seem to make about equally sense: either host fallback
(with 0 or -1) or a fatal error.
Tobias