6.16. 多播对象管理
本节介绍由底层 CUDA 驱动程序应用程序编程接口公开的 CUDA 多播对象操作。
概述
通过 cuMulticastCreate 创建的多播对象允许将某些内存操作广播到设备团队。可以通过 cuMulticastAddDevice 将设备添加到多播对象。可以通过 cuMulticastBindMem 或 cuMulticastBindAddr 在每个参与设备上绑定内存。可以使用虚拟内存管理 API 将多播对象映射到设备的虚拟地址空间中(请参阅 cuMemMap 和 cuMemSetAccess)。
支持的平台
可以使用设备属性 CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED 查询特定设备上对多播的支持
函数
- CUresult cuMulticastAddDevice ( CUmemGenericAllocationHandle mcHandle, CUdevice dev )
- 将设备关联到多播对象。
- CUresult cuMulticastBindAddr ( CUmemGenericAllocationHandle mcHandle, size_t mcOffset, CUdeviceptr memptr, size_t size, unsigned long long flags )
- 将由虚拟地址表示的内存分配绑定到多播对象。
- CUresult cuMulticastBindMem ( CUmemGenericAllocationHandle mcHandle, size_t mcOffset, CUmemGenericAllocationHandle memHandle, size_t memOffset, size_t size, unsigned long long flags )
- 将由句柄表示的内存分配绑定到多播对象。
- CUresult cuMulticastCreate ( CUmemGenericAllocationHandle* mcHandle, const CUmulticastObjectProp* prop )
- 创建一个通用分配句柄,表示由给定属性描述的多播对象。
- CUresult cuMulticastGetGranularity ( size_t* granularity, const CUmulticastObjectProp* prop, CUmulticastGranularity_flags option )
- 计算多播对象的最小或建议粒度。
- CUresult cuMulticastUnbind ( CUmemGenericAllocationHandle mcHandle, CUdevice dev, size_t mcOffset, size_t size )
- 在给定偏移量和给定大小范围内,解除绑定到多播对象的任何内存分配。
函数
- CUresult cuMulticastAddDevice ( CUmemGenericAllocationHandle mcHandle, CUdevice dev )
-
将设备关联到多播对象。
参数
- mcHandle
- 表示多播对象的句柄。
- dev
- 将要关联到多播对象的设备。
返回值
CUDA_SUCCESS, CUDA_ERROR_INVALID_VALUE, CUDA_ERROR_OUT_OF_MEMORY, CUDA_ERROR_INVALID_DEVICE, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_PERMITTED, CUDA_ERROR_NOT_SUPPORTED
描述
将设备关联到多播对象。添加的设备将是多播团队的一部分,团队大小由 cuMulticastCreate 期间 CUmulticastObjectProp::numDevices 指定。设备与多播对象的关联在多播对象的生命周期内是永久的。在任何内存可以绑定到团队中的任何设备之前,必须将所有设备添加到多播团队。对 cuMulticastBindMem 或 cuMulticastBindAddr 的任何调用都将阻塞,直到添加完所有设备。同样,在虚拟地址范围可以映射到多播对象之前,必须将所有设备添加到多播团队。对 cuMemMap 的调用将阻塞,直到添加完所有设备。
另请参阅
- CUresult cuMulticastBindAddr ( CUmemGenericAllocationHandle mcHandle, size_t mcOffset, CUdeviceptr memptr, size_t size, unsigned long long flags )
-
将由虚拟地址表示的内存分配绑定到多播对象。
参数
- mcHandle
- 表示多播对象的句柄。
- mcOffset
- 附加到多播 va 范围的偏移量。
- memptr
- 内存分配的虚拟地址。
- size
- 将要绑定到多播对象的内存大小。
- flags
- 标志供将来使用,现在必须为零。
返回值
CUDA_SUCCESS, CUDA_ERROR_INVALID_VALUE, CUDA_ERROR_INVALID_DEVICE, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_PERMITTED, CUDA_ERROR_NOT_SUPPORTED, CUDA_ERROR_OUT_OF_MEMORY, CUDA_ERROR_SYSTEM_NOT_READY
描述
绑定由memptr指定的内存分配到由mcHandle表示的多播对象。内存必须通过 cuMemCreate 或 cudaMallocAsync 分配。 意图size绑定的,多播范围内的偏移量mcOffset和memptr必须是 cuMulticastGetGranularity 返回值的倍数,标志为 CU_MULTICAST_GRANULARITY_MINIMUM。 但是,为了获得最佳性能,size, mcOffset和memptr应与 cuMulticastGetGranularity 返回的值对齐,标志为 CU_MULTICAST_GRANULARITY_RECOMMENDED。
Thesize不能大于已分配内存的大小。 同样,size + mcOffset不能大于多播对象的总大小。 内存分配必须已在通过 cuMulticastAddDevice 添加到多播团队的设备之一上创建。 外部可共享以及导入的多播对象只能绑定到外部可共享内存。 请注意,如果执行绑定所需的资源不足,则此调用将返回 CUDA_ERROR_OUT_OF_MEMORY。 如果必要的系统软件未初始化或未运行,则此调用也可能返回 CUDA_ERROR_SYSTEM_NOT_READY。
另请参阅
- CUresult cuMulticastBindMem ( CUmemGenericAllocationHandle mcHandle, size_t mcOffset, CUmemGenericAllocationHandle memHandle, size_t memOffset, size_t size, unsigned long long flags )
-
将由句柄表示的内存分配绑定到多播对象。
参数
- mcHandle
- 表示多播对象的句柄。
- mcOffset
- Offset into the multicast object for attachment.
- memHandle
- 表示内存分配的句柄。
- memOffset
- 附加到内存的偏移量。
- size
- Size of the memory that will be bound to the multicast object.
- flags
- Flags for future use, must be zero for now.
返回值
CUDA_SUCCESS, CUDA_ERROR_INVALID_VALUE, CUDA_ERROR_INVALID_DEVICE, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_PERMITTED, CUDA_ERROR_NOT_SUPPORTED, CUDA_ERROR_OUT_OF_MEMORY, CUDA_ERROR_SYSTEM_NOT_READY
描述
绑定由memHandle指定并通过 cuMemCreate 创建的内存分配到由mcHandle表示并通过 cuMulticastCreate 创建的多播对象。 意图size绑定的,多播范围内的偏移量mcOffset以及内存中的偏移量memOffset必须是 cuMulticastGetGranularity 返回值的倍数,标志为 CU_MULTICAST_GRANULARITY_MINIMUM。 但是,为了获得最佳性能,size, mcOffset和memOffset应与内存分配的粒度(请参阅 ::cuMemGetAllocationGranularity)或 cuMulticastGetGranularity 返回的值对齐,标志为 CU_MULTICAST_GRANULARITY_RECOMMENDED。
Thesize + memOffset不能大于已分配内存的大小。 同样,size + mcOffset不能大于多播对象的大小。 内存分配必须已在通过 cuMulticastAddDevice 添加到多播团队的设备之一上创建。 外部可共享以及导入的多播对象只能绑定到外部可共享内存。 请注意,如果执行绑定所需的资源不足,则此调用将返回 CUDA_ERROR_OUT_OF_MEMORY。 如果必要的系统软件未初始化或未运行,则此调用也可能返回 CUDA_ERROR_SYSTEM_NOT_READY。
另请参阅
- CUresult cuMulticastCreate ( CUmemGenericAllocationHandle* mcHandle, const CUmulticastObjectProp* prop )
-
创建一个通用分配句柄,表示由给定属性描述的多播对象。
参数
- mcHandle
- Value of handle returned.
- prop
- 要创建的多播对象的属性。
返回值
CUDA_SUCCESS, CUDA_ERROR_INVALID_VALUE, CUDA_ERROR_OUT_OF_MEMORY, CUDA_ERROR_INVALID_DEVICE, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_PERMITTED, CUDA_ERROR_NOT_SUPPORTED
描述
This creates a multicast object as described byprop。 参与设备的数量由 CUmulticastObjectProp::numDevices 指定。 可以通过 cuMulticastAddDevice 将设备添加到多播对象。 在内存可以绑定到多播对象之前,必须将所有参与设备添加到多播对象。 内存通过 cuMulticastBindMem 或 cuMulticastBindAddr 绑定到多播对象,并且可以通过 cuMulticastUnbind 解除绑定。 每个设备可以绑定的内存总量由 :CUmulticastObjectProp::size 指定。 此大小必须是 cuMulticastGetGranularity 返回值的倍数,标志为 CU_MULTICAST_GRANULARITY_MINIMUM。 但是,为了获得最佳性能,大小应与 cuMulticastGetGranularity 返回的值对齐,标志为 CU_MULTICAST_GRANULARITY_RECOMMENDED。
在添加完所有参与设备后,也可以使用虚拟内存管理 API 将多播对象映射到设备的虚拟地址空间(请参阅 cuMemMap 和 cuMemSetAccess)。 也可以通过 cuMemExportToShareableHandle 请求共享句柄来与其他进程共享多播对象。 请注意,所需的共享句柄类型必须在位掩码 CUmulticastObjectProp::handleTypes 中指定。 可以使用虚拟内存管理 API cuMemRelease 释放多播对象。
另请参阅
cuMulticastAddDevice, cuMulticastBindMem, cuMulticastBindAddr, cuMulticastUnbind
cuMemCreate, cuMemRelease, cuMemExportToShareableHandle, cuMemImportFromShareableHandle
- CUresult cuMulticastGetGranularity ( size_t* granularity, const CUmulticastObjectProp* prop, CUmulticastGranularity_flags option )
-
计算多播对象的最小或建议粒度。
参数
- granularity
- 返回的粒度。
- prop
- Properties of the multicast object.
- option
- 确定要返回的粒度。
返回值
CUDA_SUCCESS, CUDA_ERROR_INVALID_VALUE, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_PERMITTED, CUDA_ERROR_NOT_SUPPORTED
描述
计算给定的一组多播对象属性的最小或建议粒度,并在 granularity 中返回。 此粒度可以用作多播对象的大小、绑定偏移量和地址映射的倍数。
另请参阅
cuMulticastCreate, cuMulticastBindMem, cuMulticastBindAddr, cuMulticastUnbind
- CUresult cuMulticastUnbind ( CUmemGenericAllocationHandle mcHandle, CUdevice dev, size_t mcOffset, size_t size )
-
在给定偏移量和给定大小范围内,解除绑定到多播对象的任何内存分配。
参数
- mcHandle
- 表示多播对象的句柄。
- dev
- Device that hosts the memory allocation.
- mcOffset
- Offset into the multicast object.
- size
- Desired size to unbind.
返回值
CUDA_SUCCESS, CUDA_ERROR_INVALID_VALUE, CUDA_ERROR_INVALID_DEVICE, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_PERMITTED, CUDA_ERROR_NOT_SUPPORTED
描述
解除绑定托管在dev上并绑定到mcOffset处的多播对象以及给定size范围内的任何内存分配。 意图size解除绑定和多播范围内的偏移量 (mcOffset) 必须是 cuMulticastGetGranularity 返回值的倍数,标志为 CU_MULTICAST_GRANULARITY_MINIMUM。 Thesize + mcOffset不能大于多播对象的总大小。
注意警告:mcOffset和size必须与绑定调用期间指定的相应值匹配。 任何其他值都可能导致未定义的行为。
另请参阅