Late Attach

NvSciSync provides a mechanism for an application to allocate an NvSciSyncObj that will be shared with other peers, without requiring each peer to have sent an unreconciled NvSciSyncAttrList during initial reconciliation. The constraints of late attach waiter peers, however, should be passed via unreconciled NvSciSyncAttrList during the reconciliation process by the application to ensure the NvSciSyncObj is allocated to satisfy the constraints of the late peers.

NvSciSync also allows remote peer NvSciIpcEndpoint to gain access to already allocated NvSciSyncObj, provided the already allocated NvSciSyncObj satisfies the constraints of the unreconciled NvSciSyncAttrList, received from that peer, through the NvSciSyncObjAttachPeer() API.

The following table contains the attributes set by User mode drivers (UMD), CPU Waiter, and Inter-chip waiter. Application needs to create an unreconciled NvSciSyncAttrList and set the attribute-value, as described below, if corresponding UMD is a late attach waiter. Along with the following attributes, the application needs to set the NvSciSyncAttrKey_PeerLocationInfo attribute.

User Mode Driver API Attribute and Values
SIPL/Camera nvsipl::INvSIPLCamera::FillNvSciSyncAttrList()
NvSciSyncAttrKey_RequiredPerm set to the following:
  • NvSciSyncAccessPerm_WaitOnly for clientType SIPL_WAITER
  • NvSciSyncAccessPerm_SignalOnly for clientType SIPL_SIGNALER
  • NvSciSyncAccessPerm_WaitSignal for clientType SIPL_SIGNALER_WAITER
NvSciSyncAttrKey_PrimitiveInfo set to the following:
  • NvSciSyncAttrValPrimitiveType_Syncpoint
NvMedia IDE NvMediaIDEFillNvSciSyncAttrList()
NvSciSyncAttrKey_RequiredPerm set to the following:
  • NvSciSyncAccessPerm_WaitOnly for @ref clienttype NVMEDIA_WAITER
  • NvSciSyncAccessPerm_SignalOnly for @ref clienttype NVMEDIA_SIGNALER
  • NvSciSyncAccessPerm_WaitSignal for @ref clienttype NVMEDIA_SIGNALER_WAITER
NvSciSyncAttrKey_PrimitiveInfo set to the following:
  • NvSciSyncAttrValPrimitiveType_Syncpoint
NvSciSyncAttrKey_RequiredPerm set to the following:
  • NvSciSyncAccessPerm_WaitOnly for @ref clienttype NVMEDIA_WAITER
  • NvSciSyncAccessPerm_SignalOnly for @ref clienttype NVMEDIA_SIGNALER
  • NvSciSyncAccessPerm_WaitSignal for @ref clienttype NVMEDIA_SIGNALER_WAITER
NvSciSyncAttrKey_PrimitiveInfo set to the following:
  • NvSciSyncAttrValPrimitiveType_Syncpoint
NvMedia IEP NvMediaIEPFillNvSciSyncAttrList()
NvSciSyncAttrKey_RequiredPerm set to the following:
  • NvSciSyncAccessPerm_WaitOnly for @ref clienttype NVMEDIA_WAITER
  • NvSciSyncAccessPerm_SignalOnly for @ref clienttype NVMEDIA_SIGNALER
  • NvSciSyncAccessPerm_WaitSignal for @ref clienttype NVMEDIA_SIGNALER_WAITER
NvSciSyncAttrKey_PrimitiveInfo set to the following:
  • NvSciSyncAttrValPrimitiveType_Syncpoint
NvMedia IJPD NvMediaIJPDFillNvSciSyncAttrList()
NvSciSyncAttrKey_RequiredPerm set to the following:
  • NvSciSyncAccessPerm_WaitOnly for @ref clienttype NVMEDIA_WAITER
  • NvSciSyncAccessPerm_SignalOnly for @ref clienttype NVMEDIA_SIGNALER
  • NvSciSyncAccessPerm_WaitSignal for @ref clienttype NVMEDIA_SIGNALER_WAITER
NvSciSyncAttrKey_PrimitiveInfo set to the following:
  • NvSciSyncAttrValPrimitiveType_Syncpoint
NvMedia IJPE NvMediaIJPEFillNvSciSyncAttrList()
NvSciSyncAttrKey_RequiredPerm set to the following:
  • NvSciSyncAccessPerm_WaitOnly for @ref clienttype NVMEDIA_WAITER
  • NvSciSyncAccessPerm_SignalOnly for @ref clienttype NVMEDIA_SIGNALER
  • NvSciSyncAccessPerm_WaitSignal for @ref clienttype NVMEDIA_SIGNALER_WAITER
NvSciSyncAttrKey_PrimitiveInfo set to the following:
  • NvSciSyncAttrValPrimitiveType_Syncpoint
NvMedia IOFA NvMediaIOFAFillNvSciSyncAttrList()
NvSciSyncAttrKey_RequiredPerm set to the following:
  • NvSciSyncAccessPerm_WaitOnly for @ref clienttype NVMEDIA_WAITER
  • NvSciSyncAccessPerm_SignalOnly for @ref clienttype NVMEDIA_SIGNALER
  • NvSciSyncAccessPerm_WaitSignal for @ref clienttype NVMEDIA_SIGNALER_WAITER
NvSciSyncAttrKey_PrimitiveInfo set to the following:
  • NvSciSyncAttrValPrimitiveType_Syncpoint
CUDA Driver API cuDeviceGetNvSciSyncAttributes()
NvSciSyncAttrKey_RequiredPerm is set to the following:
  • NvSciSyncAccessPerm_SignalOnly if ::CUDA_NVSCISYNC_ATTR_SIGNAL is set in \p flags
  • NvSciSyncAccessPerm_WaitOnly if ::CUDA_NVSCISYNC_ATTR_WAIT is set in \p flags
  • NvSciSyncAccessPerm_WaitSignal if both ::CUDA_NVSCISYNC_ATTR_WAIT and ::CUDA_NVSCISYNC_ATTR_SIGNAL are set in \p flags
NvSciSyncAttrKey_PrimitiveInfo is set to the following:
  • NvSciSyncAttrValPrimitiveType_SysmemSemaphore on any valid \p device
  • NvSciSyncAttrValPrimitiveType_Syncpoint if \p device is a Tegra device
  • NvSciSyncAttrValPrimitiveType_SysmemSemaphorePayload64b if \p device is GA10X+

NvSciSyncAttrKey_GpuId is set to the same UUID that is returned for \p device from ::cuDeviceGetUuid

CUDA Runtime API cudaDeviceGetNvSciSyncAttributes()
NvSciSyncAttrKey_RequiredPerm is set to the following:
  • NvSciSyncAccessPerm_SignalOnly if ::cudaNvSciSyncAttrSignal is set in \p flags
  • NvSciSyncAccessPerm_WaitOnly if ::cudaNvSciSyncAttrWait is set in \p flags
  • NvSciSyncAccessPerm_WaitSignal if both ::cudaNvSciSyncAttrWait and ::cudaNvSciSyncAttrSignal are set in \p flags
NvSciSyncAttrKey_PrimitiveInfo is set to the following:
  • NvSciSyncAttrValPrimitiveType_SysmemSemaphore on any valid \p device
  • NvSciSyncAttrValPrimitiveType_Syncpoint if \p device is a Tegra device
  • NvSciSyncAttrValPrimitiveType_SysmemSemaphorePayload64b if \p device is GA10X+

NvSciSyncAttrKey_GpuId is set to the same UUID returned in \p cudaDeviceProp.uuid from ::cudaDeviceGetProperties for this \p device.

NvMedia 2D NvMedia2DFillNvSciSyncAttrList()
NvSciSyncAttrKey_RequiredPerm set to the following:
  • NvSciSyncAccessPerm_WaitOnly for @ref clientType NVMEDIA_WAITER
  • NvSciSyncAccessPerm_SignalOnly for @ref clientType NVMEDIA_SIGNALER
  • NvSciSyncAccessPerm_WaitSignal for @ref clientType NVMEDIA_SIGNALER_WAITER

NvSciSyncAttrKey_PrimitiveInfo set to the following:

NvSciSyncAttrValPrimitiveType_Syncpoint

VIC Diagnostics VicDiagnosticsFillNvSciSyncAttrList()
NvSciSyncAttrKey_RequiredPerm set to the following:
  • NvSciSyncAccessPerm_WaitOnly for @ref clientType NVMEDIA_WAITER
  • NvSciSyncAccessPerm_SignalOnly for @ref clientType NVMEDIA_SIGNALER
  • NvSciSyncAccessPerm_WaitSignal for @ref clientType NVMEDIA_SIGNALER_WAITER
NvSciSyncAttrKey_PrimitiveInfo set to the following:
  • NvSciSyncAttrValPrimitiveType_Syncpoint
NvMedia LDC NvMediaLdcFillNvSciSyncAttrList()
NvSciSyncAttrKey_RequiredPerm set to the following:
  • NvSciSyncAccessPerm_WaitOnly for @ref clientType NVMEDIA_WAITER
  • NvSciSyncAccessPerm_SignalOnly for @ref clientType NVMEDIA_SIGNALER
  • NvSciSyncAccessPerm_SignalOnly for @ref clientType NVMEDIA_SIGNALER
  • NvSciSyncAccessPerm_WaitSignal for @ref clientType NVMEDIA_SIGNALER_WAITER
NvSciSyncAttrKey_PrimitiveInfo set to the following:
  • NvSciSyncAttrValPrimitiveType_Syncpoint
cuPVA CupvaSyncObjFillAttributes(), cupva::FillAttributes() CUPVA supports NvSciSyncAttrValPrimitiveType_Syncpoint and NvSciSyncAttrValPrimitiveType_SysmemSemaphore primitive types
VulcanSC GetPhysicalDeviceSciSyncAttributesNV()
NvSciSyncAttrKey_RequiredPerm is set to the following:
  • NvSciSyncAccessPerm_SignalOnly if VK_SCI_SYNC_CLIENT_TYPE_SIGNALER_NV is set to @p VkSciSyncAttributesInfoNV::clientType
  • NvSciSyncAccessPerm_WaitOnly if VK_SCI_SYNC_CLIENT_TYPE_WAITER_NV is set to @p VkSciSyncAttributesInfoNV::clientType
  • NvSciSyncAccessPerm_WaitSignal if VK_SCI_SYNC_CLIENT_TYPE_SIGNALER_WAITER_NV is set to @p VkSciSyncAttributesInfoNV::clientType
NvSciSyncAttrKey_PrimitiveInfo is set to the following:
  • NvSciSyncAttrValPrimitiveType_SysmemSemaphore and NvSciSyncAttrValPrimitiveType_SysmemSemaphorePayload64b if VK_SCI_SYNC_PRIMITIVE_TYPE_SEMAPHORE_NV is set to @p VkSciSyncAttributesInfoNV::primitiveType
  • NvSciSyncAttrValPrimitiveType_Syncpoint if VK_SCI_SYNC_PRIMITIVE_TYPE_FENCE_NV is set to @p VkSciSyncAttributesInfoNV::primitiveType
NvSciSyncAttrKey_NeedCpuAccess is set to the following:
  • true if VK_SCI_SYNC_PRIMITIVE_TYPE_SEMAPHORE_NV is set to @p VkSciSyncAttributesInfoNV::primitiveType
NvMedia DLA NvMediaDlaFillNvSciSyncAttrList()
NvSciSyncAttrKey_RequiredPerm set to the following:
  • NvSciSyncAccessPerm_WaitOnly for @ref clienttype NVMEDIA_WAITER
  • NvSciSyncAccessPerm_SignalOnly for @ref clienttype NVMEDIA_SIGNALER
  • NvSciSyncAccessPerm_WaitSignal for @ref clienttype NVMEDIA_SIGNALER_WAITER
NvSciSyncAttrKey_PrimitiveInfo set to the following:
  • NvSciSyncAttrValPrimitiveType_Syncpoint
NvMedia DLA NvMediaDlaFillNvSciSyncDeterministicAttrList()
NvSciSyncAttrKey_RequiredPerm set to the following:
  • NvSciSyncAccessPerm_WaitOnly for @ref clienttype NVMEDIA_WAITER
  • NvSciSyncAccessPerm_SignalOnly for @ref clienttype NVMEDIA_SIGNALER
  • NvSciSyncAccessPerm_WaitSignal for @ref clienttype NVMEDIA_SIGNALER_WAITER
NvSciSyncAttrKey_PrimitiveInfo set to the following:
  • NvSciSyncAttrValPrimitiveType_SysmemSemaphore
NvSciSyncAttrKey_RequireDeterministicFences set to the following:
  • TRUE
Display/OpenWFD wfdNvSciSyncSetSignalerAttributesNVX()
`NvSciSyncAttrKey_RequiredPerm` is set to the following:
  • NvSciSyncAccessPerm_SignalOnly
NvSciSyncAttrKey_PrimitiveInfo is set to the following:
  • NvSciSyncAttrValPrimitiveType_Syncpoint
Display/OpenWFD wfdNvSciSyncSetWaiterAttributesNVX()
NvSciSyncAttrKey_RequiredPerm is set to the following:
  • NvSciSyncAccessPerm_WaitOnly
NvSciSyncAttrKey_PrimitiveInfo is set to the following:
  • NvSciSyncAttrValPrimitiveType_Syncpoint
CPU Waiter -
NvSciSyncAttrKey_RequiredPerm is set to the following:
  • NvSciSyncAccessPerm_WaitOnly
NvSciSyncAttrKey_PrimitiveInfo is set to the following:
  • NvSciSyncAttrValPrimitiveType_Syncpoint
  • NvSciSyncAttrValPrimitiveType_SysmemSemaphore
  • NvSciSyncAttrValPrimitiveType_SysmemSemaphorePayload64b
NvSciSyncAttrKey_NeedCpuAccess is set to the following:
  • true
NvSciSyncAttrKey_WaiterRequireTimestamps is set to the following:
  • true (if applicable)
Inter-Chip Waiter NvSciSyncFillC2cAttrs() The NvSciSyncFillC2cAttrs() API can fill in the attributes corresponding to the inter-chip late peer