6.16. 多播对象管理

本节介绍由底层 CUDA 驱动程序应用程序编程接口公开的 CUDA 多播对象操作。

概述

通过 cuMulticastCreate 创建的多播对象允许将某些内存操作广播到设备团队。可以通过 cuMulticastAddDevice 将设备添加到多播对象。可以通过 cuMulticastBindMemcuMulticastBindAddr 在每个参与设备上绑定内存。可以使用虚拟内存管理 API 将多播对象映射到设备的虚拟地址空间中(请参阅 cuMemMapcuMemSetAccess)。

支持的平台

可以使用设备属性 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
将要关联到多播对象的设备。
描述

将设备关联到多播对象。添加的设备将是多播团队的一部分,团队大小由 cuMulticastCreate 期间 CUmulticastObjectProp::numDevices 指定。设备与多播对象的关联在多播对象的生命周期内是永久的。在任何内存可以绑定到团队中的任何设备之前,必须将所有设备添加到多播团队。对 cuMulticastBindMemcuMulticastBindAddr 的任何调用都将阻塞,直到添加完所有设备。同样,在虚拟地址范围可以映射到多播对象之前,必须将所有设备添加到多播团队。对 cuMemMap 的调用将阻塞,直到添加完所有设备。

另请参阅

cuMulticastCreate, cuMulticastBindMem, cuMulticastBindAddr

CUresult cuMulticastBindAddr ( CUmemGenericAllocationHandle mcHandle, size_t mcOffset, CUdeviceptr memptr, size_t size, unsigned long long flags )
将由虚拟地址表示的内存分配绑定到多播对象。
参数
mcHandle
表示多播对象的句柄。
mcOffset
附加到多播 va 范围的偏移量。
memptr
内存分配的虚拟地址。
size
将要绑定到多播对象的内存大小。
flags
标志供将来使用,现在必须为零。
描述

绑定由memptr指定的内存分配到由mcHandle表示的多播对象。内存必须通过 cuMemCreatecudaMallocAsync 分配。 意图size绑定的,多播范围内的偏移量mcOffsetmemptr必须是 cuMulticastGetGranularity 返回值的倍数,标志为 CU_MULTICAST_GRANULARITY_MINIMUM。 但是,为了获得最佳性能,size, mcOffsetmemptr应与 cuMulticastGetGranularity 返回的值对齐,标志为 CU_MULTICAST_GRANULARITY_RECOMMENDED

Thesize不能大于已分配内存的大小。 同样,size + mcOffset不能大于多播对象的总大小。 内存分配必须已在通过 cuMulticastAddDevice 添加到多播团队的设备之一上创建。 外部可共享以及导入的多播对象只能绑定到外部可共享内存。 请注意,如果执行绑定所需的资源不足,则此调用将返回 CUDA_ERROR_OUT_OF_MEMORY。 如果必要的系统软件未初始化或未运行,则此调用也可能返回 CUDA_ERROR_SYSTEM_NOT_READY。

另请参阅

cuMulticastCreate, cuMulticastAddDevice, cuMemCreate

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.
描述

绑定由memHandle指定并通过 cuMemCreate 创建的内存分配到由mcHandle表示并通过 cuMulticastCreate 创建的多播对象。 意图size绑定的,多播范围内的偏移量mcOffset以及内存中的偏移量memOffset必须是 cuMulticastGetGranularity 返回值的倍数,标志为 CU_MULTICAST_GRANULARITY_MINIMUM。 但是,为了获得最佳性能,size, mcOffsetmemOffset应与内存分配的粒度(请参阅 ::cuMemGetAllocationGranularity)或 cuMulticastGetGranularity 返回的值对齐,标志为 CU_MULTICAST_GRANULARITY_RECOMMENDED

Thesize + memOffset不能大于已分配内存的大小。 同样,size + mcOffset不能大于多播对象的大小。 内存分配必须已在通过 cuMulticastAddDevice 添加到多播团队的设备之一上创建。 外部可共享以及导入的多播对象只能绑定到外部可共享内存。 请注意,如果执行绑定所需的资源不足,则此调用将返回 CUDA_ERROR_OUT_OF_MEMORY。 如果必要的系统软件未初始化或未运行,则此调用也可能返回 CUDA_ERROR_SYSTEM_NOT_READY。

另请参阅

cuMulticastCreate, cuMulticastAddDevice, cuMemCreate

CUresult cuMulticastCreate ( CUmemGenericAllocationHandle* mcHandle, const CUmulticastObjectProp* prop )
创建一个通用分配句柄,表示由给定属性描述的多播对象。
参数
mcHandle
Value of handle returned.
prop
要创建的多播对象的属性。
描述

This creates a multicast object as described byprop。 参与设备的数量由 CUmulticastObjectProp::numDevices 指定。 可以通过 cuMulticastAddDevice 将设备添加到多播对象。 在内存可以绑定到多播对象之前,必须将所有参与设备添加到多播对象。 内存通过 cuMulticastBindMemcuMulticastBindAddr 绑定到多播对象,并且可以通过 cuMulticastUnbind 解除绑定。 每个设备可以绑定的内存总量由 :CUmulticastObjectProp::size 指定。 此大小必须是 cuMulticastGetGranularity 返回值的倍数,标志为 CU_MULTICAST_GRANULARITY_MINIMUM。 但是,为了获得最佳性能,大小应与 cuMulticastGetGranularity 返回的值对齐,标志为 CU_MULTICAST_GRANULARITY_RECOMMENDED

在添加完所有参与设备后,也可以使用虚拟内存管理 API 将多播对象映射到设备的虚拟地址空间(请参阅 cuMemMapcuMemSetAccess)。 也可以通过 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
确定要返回的粒度。
描述

计算给定的一组多播对象属性的最小或建议粒度,并在 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.
描述

解除绑定托管在dev上并绑定到mcOffset处的多播对象以及给定size范围内的任何内存分配。 意图size解除绑定和多播范围内的偏移量 (mcOffset) 必须是 cuMulticastGetGranularity 返回值的倍数,标志为 CU_MULTICAST_GRANULARITY_MINIMUM。 Thesize + mcOffset不能大于多播对象的总大小。

注意

警告:mcOffsetsize必须与绑定调用期间指定的相应值匹配。 任何其他值都可能导致未定义的行为。

另请参阅

cuMulticastBindMem, cuMulticastBindAddr