cuda.bindings._v2.driver.wait_external_semaphores_async#
- cuda.bindings._v2.driver.wait_external_semaphores_async(
- ext_sem_array,
- params_array,
- unsigned int num_ext_sems,
- intptr_t stream,
Waits on a set of external semaphore objects.
Enqueues a wait operation on a set of externally allocated semaphore object in the specified stream. The operations will be executed when all prior operations in the stream complete. The exact semantics of waiting on a semaphore depends on the type of the object. If the semaphore object is any one of the following types:
CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD,CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32,CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMTthen waiting on the semaphore will wait until the semaphore reaches the signaled state. The semaphore will then be reset to the unsignaled state. Therefore for every signal operation, there can only be one wait operation. If the semaphore object is any one of the following types:CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE,CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE,CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD,CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32then waiting on the semaphore will wait until the value of the semaphore is greater than or equal toCUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS.params.fence.value. If the semaphore object is of the typeCU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNCthen, waiting on the semaphore will wait until theCUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS.params.nvSciSync.fenceis signaled by the signaler of the NvSciSyncObj that was associated with this semaphore object. By default, waiting on such an external semaphore object causes appropriate memory synchronization operations to be performed over all external memory objects that are imported asCU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF. This ensures that any subsequent accesses made by other importers of the same set of NvSciBuf memory object(s) are coherent. These operations can be skipped by specifying the flagCUDA_EXTERNAL_SEMAPHORE_WAIT_SKIP_NVSCIBUF_MEMSYNC, which can be used as a performance optimization when data coherency is not required. But specifying this flag in scenarios where data coherency is required results in undefined behavior. Also, for semaphore object of the typeCU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC, if the NvSciSyncAttrList used to create the NvSciSyncObj had not set the flags incuDeviceGetNvSciSyncAttributesto CUDA_NVSCISYNC_ATTR_WAIT, this API will return CUDA_ERROR_NOT_SUPPORTED. If the semaphore object is any one of the following types:CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX,CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMTthen the keyed mutex will be acquired when it is released with the key specified inCUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS.params.keyedmutex.keyor until the timeout specified byCUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS.params.keyedmutex.timeoutMshas lapsed. The timeout interval can either be a finite value specified in milliseconds or an infinite value. In case an infinite value is specified the timeout never elapses. The windows INFINITE macro must be used to specify infinite timeout.- Parameters:
ext_sem_array (object) –
External semaphores to be waited on. It can be:
params_array (intptr_t) – Array of semaphore parameters.
num_ext_sems (unsigned int) – Number of semaphores to wait on.
stream (intptr_t) – Stream to enqueue the wait operations in.
See also
cuWaitExternalSemaphoresAsync