mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-11-28 04:10:02 +08:00
bf4a5efa80
Those TR13/OpenMP 6.0 routines permit a reproducible offloading to a specific device by mapping an OpenMP device number to a unique ID (UID). The GPU device UIDs should be universally unique, the one for the host is not. gcc/ChangeLog: * omp-general.cc (omp_runtime_api_procname): Add get_device_from_uid and omp_get_uid_from_device routines. include/ChangeLog: * cuda/cuda.h (cuDeviceGetUuid): Declare. (cuDeviceGetUuid_v2): Add prototype. libgomp/ChangeLog: * config/gcn/target.c (omp_get_uid_from_device, omp_get_device_from_uid): Add stub implementation. * config/nvptx/target.c (omp_get_uid_from_device, omp_get_device_from_uid): Likewise. * fortran.c (omp_get_uid_from_device_, omp_get_uid_from_device_8_): New functions. * libgomp-plugin.h (GOMP_OFFLOAD_get_uid): Add prototype. * libgomp.h (struct gomp_device_descr): Add 'uid' and 'get_uid_func'. * libgomp.map (GOMP_6.0): New, includind the new UID routines. * libgomp.texi (OpenMP Technical Report 13): Mark UID routines as 'Y'. (Device Information Routines): Document new UID routines. (Offload-Target Specifics): Document UID format. * omp.h.in (omp_get_device_from_uid, omp_get_uid_from_device): New prototype. * omp_lib.f90.in (omp_get_device_from_uid, omp_get_uid_from_device): New interface. * omp_lib.h.in: Likewise. * plugin/cuda-lib.def: Add cuDeviceGetUuid and cuDeviceGetUuid_v2 via CUDA_ONE_CALL_MAYBE_NULL. * plugin/plugin-gcn.c (GOMP_OFFLOAD_get_uid): New. * plugin/plugin-nvptx.c (GOMP_OFFLOAD_get_uid): New. * target.c (str_omp_initial_device): New static var. (STR_OMP_DEV_PREFIX): Define. (gomp_get_uid_for_device, omp_get_uid_from_device, omp_get_device_from_uid): New. (gomp_load_plugin_for_device): DLSYM_OPT the function 'get_uid'. (gomp_target_init): Set the device's 'uid' field to NULL. * testsuite/libgomp.c/device_uid.c: New test. * testsuite/libgomp.fortran/device_uid.f90: New test.
62 lines
2.0 KiB
Modula-2
62 lines
2.0 KiB
Modula-2
CUDA_ONE_CALL (cuCtxCreate)
|
|
CUDA_ONE_CALL (cuCtxDestroy)
|
|
CUDA_ONE_CALL (cuCtxGetCurrent)
|
|
CUDA_ONE_CALL (cuCtxGetDevice)
|
|
CUDA_ONE_CALL (cuCtxPopCurrent)
|
|
CUDA_ONE_CALL (cuCtxPushCurrent)
|
|
CUDA_ONE_CALL (cuCtxSetLimit)
|
|
CUDA_ONE_CALL (cuCtxSynchronize)
|
|
CUDA_ONE_CALL (cuDeviceGet)
|
|
CUDA_ONE_CALL (cuDeviceGetAttribute)
|
|
CUDA_ONE_CALL (cuDeviceGetCount)
|
|
CUDA_ONE_CALL (cuDeviceGetName)
|
|
CUDA_ONE_CALL_MAYBE_NULL (cuDeviceGetUuid)
|
|
CUDA_ONE_CALL_MAYBE_NULL (cuDeviceGetUuid_v2)
|
|
CUDA_ONE_CALL (cuDeviceTotalMem)
|
|
CUDA_ONE_CALL (cuDriverGetVersion)
|
|
CUDA_ONE_CALL (cuEventCreate)
|
|
CUDA_ONE_CALL (cuEventDestroy)
|
|
CUDA_ONE_CALL (cuEventElapsedTime)
|
|
CUDA_ONE_CALL (cuEventQuery)
|
|
CUDA_ONE_CALL (cuEventRecord)
|
|
CUDA_ONE_CALL (cuEventSynchronize)
|
|
CUDA_ONE_CALL (cuFuncGetAttribute)
|
|
CUDA_ONE_CALL_MAYBE_NULL (cuGetErrorString)
|
|
CUDA_ONE_CALL (cuInit)
|
|
CUDA_ONE_CALL (cuLaunchKernel)
|
|
CUDA_ONE_CALL (cuLinkAddData)
|
|
CUDA_ONE_CALL_MAYBE_NULL (cuLinkAddData_v2)
|
|
CUDA_ONE_CALL (cuLinkComplete)
|
|
CUDA_ONE_CALL (cuLinkCreate)
|
|
CUDA_ONE_CALL_MAYBE_NULL (cuLinkCreate_v2)
|
|
CUDA_ONE_CALL (cuLinkDestroy)
|
|
CUDA_ONE_CALL (cuMemAlloc)
|
|
CUDA_ONE_CALL (cuMemAllocHost)
|
|
CUDA_ONE_CALL (cuMemHostAlloc)
|
|
CUDA_ONE_CALL (cuMemcpy)
|
|
CUDA_ONE_CALL (cuMemcpyDtoDAsync)
|
|
CUDA_ONE_CALL (cuMemcpyDtoH)
|
|
CUDA_ONE_CALL (cuMemcpyDtoHAsync)
|
|
CUDA_ONE_CALL (cuMemcpyHtoD)
|
|
CUDA_ONE_CALL (cuMemcpyHtoDAsync)
|
|
CUDA_ONE_CALL (cuMemcpy2D)
|
|
CUDA_ONE_CALL (cuMemcpy2DUnaligned)
|
|
CUDA_ONE_CALL (cuMemcpy3D)
|
|
CUDA_ONE_CALL (cuMemFree)
|
|
CUDA_ONE_CALL (cuMemFreeHost)
|
|
CUDA_ONE_CALL (cuMemGetAddressRange)
|
|
CUDA_ONE_CALL (cuMemGetInfo)
|
|
CUDA_ONE_CALL (cuMemHostGetDevicePointer)
|
|
CUDA_ONE_CALL (cuModuleGetFunction)
|
|
CUDA_ONE_CALL (cuModuleGetGlobal)
|
|
CUDA_ONE_CALL (cuModuleLoad)
|
|
CUDA_ONE_CALL (cuModuleLoadData)
|
|
CUDA_ONE_CALL (cuModuleUnload)
|
|
CUDA_ONE_CALL_MAYBE_NULL (cuOccupancyMaxPotentialBlockSize)
|
|
CUDA_ONE_CALL (cuStreamAddCallback)
|
|
CUDA_ONE_CALL (cuStreamCreate)
|
|
CUDA_ONE_CALL (cuStreamDestroy)
|
|
CUDA_ONE_CALL (cuStreamQuery)
|
|
CUDA_ONE_CALL (cuStreamSynchronize)
|
|
CUDA_ONE_CALL (cuStreamWaitEvent)
|