跳到主要内容

MUSA 运行时 API 参考

弃用列表

成员 MU_CTX_BLOCKING_SYNC

这个标志在 MUSA 4.0 中被弃用,并被 MU_CTX_SCHED_BLOCKING_SYNC 替代。

成员 MU_CTX_MAP_HOST

这个标志在 MUSA 11.0 中被弃用,它不再有任何效果。从 MUSA 3.2 开始的所有上下文都表现得好像这个标志被启用了。

成员 MU_DEVICE_P2P_ATTRIBUTE_ACCESS_ACCESS_SUPPORTED

使用 MU_DEVICE_P2P_ATTRIBUTE_MUSA_ARRAY_ACCESS_SUPPORTED 替代

成员 muDeviceComputeCapability (intmajor, intminor, MUdevice dev)

成员 muDeviceGetProperties (MUdevpropprop, MUdevice dev)

成员 muLaunchHostFunc (MUstream hStream, MUhostFn fn, voiduserData)

这个函数在 MUSA 11.3 中被弃用。

成员 MUSA_ERROR_CONTEXT_ALREADY_CURRENT

这个错误返回在 MUSA 3.2 中被弃用。尝试通过 muCtxPushCurrent() 推送活动上下文不再是错误。

成员 MUSA_ERROR_PROFILER_ALREADY_STARTED

这个错误返回在 MUSA 5.0 中被弃用。当分析已经启用时,调用 muProfilerStart() 不再是错误。

成员 MUSA_ERROR_PROFILER_ALREADY_STOPPED

这个错误返回在 MUSA 5.0 中被弃用。当分析已经禁用时,调用 muProfilerStop() 不再是错误。

成员 MUSA_ERROR_PROFILER_NOT_INITIALIZED 这个错误返回在 MUSA 5.0 中被弃用。在没有初始化的情况下,尝试通过 muProfilerStart 或 muProfilerStop 启用/禁用分析不再是错误。

模块 MUSA_GRAPH

模块 MUSA_MODULE

成员 muSurfRefGetArray (MUarrayphArray, MUsurfref hSurfRef)

成员 muSurfRefSetArray (MUsurfref hSurfRef, MUarray hArray, unsigned int Flags)

成员 muTexRefCreate (MUtexrefpTexRef)

成员 muTexRefDestroy (MUtexref hTexRef)

成员 muTexRefGetAddress (MUdeviceptrpdptr, MUtexref hTexRef)

成员 muTexRefGetAddressMode (MUaddress_modepam, MUtexref hTexRef, int dim)

成员 muTexRefGetArray (MUarrayphArray, MUtexref hTexRef)

成员 muTexRefGetBorderColor (floatpBorderColor, MUtexref hTexRef)

成员 muTexRefGetFilterMode (MUfilter_modepfm, MUtexref hTexRef)

成员 muTexRefGetFlags (unsigned intpFlags, MUtexref hTexRef)

成员 muTexRefGetFormat (MUarray_formatpFormat, intpNumChannels, MUtexref hTexRef)

成员 muTexRefGetMaxAnisotropy (intpmaxAniso, MUtexref hTexRef)

成员 muTexRefGetMipmapFilterMode (MUfilter_modepfm, MUtexref hTexRef)

成员 muTexRefGetMipmapLevelBias (floatpbias, MUtexref hTexRef)

成员 muTexRefGetMipmapLevelClamp (floatpminMipmapLevelClamp, floatpmaxMipmapLevel ←-

Clamp, MUtexref hTexRef)

成员 muTexRefGetMipmappedArray (MUmipmappedArrayphMipmappedArray, MUtexref hTexRef)

成员 muTexRefSetAddress (size_tByteOffset, MUtexref hTexRef, MUdeviceptr dptr, size_t bytes)

成员 muTexRefSetAddress2D (MUtexref hTexRef, const MUSA_ARRAY_DESCRIPTOR ∗desc, MUdeviceptr dptr, size_t Pitch)

成员 muTexRefSetAddressMode (MUtexref hTexRef, int dim, MUaddress_mode am)

成员 muTexRefSetArray (MUtexref hTexRef, MUarray hArray, unsigned int Flags)

成员 muTexRefSetBorderColor (MUtexref hTexRef, floatpBorderColor)

成员 muTexRefSetFilterMode (MUtexref hTexRef, MUfilter_mode fm)

成员 muTexRefSetFlags (MUtexref hTexRef, unsigned int Flags)

成员 muTexRefSetFormat (MUtexref hTexRef, MUarray_format fmt, int NumPackedComponents)

成员 muTexRefSetMaxAnisotropy (MUtexref hTexRef, unsigned int maxAniso)

成员 muTexRefSetMipmapFilterMode (MUtexref hTexRef, MUfilter_mode fm)
成员 muTexRefSetMipmapLevelBias (MUtexref hTexRef, float bias)

成员 muTexRefSetMipmapLevelClamp (MUtexref hTexRef, float minMipmapLevelClamp, float maxMipmapLevelClamp)

成员 muTexRefSetMipmappedArray (MUtexref hTexRef, MUmipmappedArray hMipmappedArray, unsigned int Flags)

宏定义文档

MUSA_VERSION

#define MUSA_VERSION 10400

MUSA API 版本号。

MU_UUID_HAS_BEEN_DEFINED

#define MU_UUID_HAS_BEEN_DEFINED

MU_IPC_HANDLE_SIZE

#define MU_IPC_HANDLE_SIZE 64

MUSA IPC 句柄大小。

MU_STREAM_LEGACY

#define MU_STREAM_LEGACY ((MUstream)0x1)

传统流句柄。

可以作为 MUstream 传递以使用具有传统同步行为的隐式流。

MU_STREAM_PER_THREAD

#define MU_STREAM_PER_THREAD ((MUstream)0x2)

每个线程的流句柄。

可以作为 MUstream 传递以使用具有每个线程同步行为的隐式流。

MUSA_CB

#define MUSA_CB

MU_MEMHOSTALLOC_PORTABLE

#define MU_MEMHOSTALLOC_PORTABLE 0x01

如果设置,主机内存在 MUSA 上下文之间是可移植的。

muMemHostAlloc() 的标志

MU_MEMHOSTALLOC_DEVICEMAP

#define MU_MEMHOSTALLOC_DEVICEMAP 0x02

如果设置,主机内存映射到 MUSA 地址空间,并且可以在主机指针上调用 muMemHostGetDevicePointer()。

muMemHostAlloc() 的标志

MU_MEMHOSTALLOC_WRITECOMBINED

#define MU_MEMHOSTALLOC_WRITECOMBINED 0x04

如果设置,主机内存被分配为写合并 - 写入快速,通过 DMA 更快,读取慢(除了通过 SSE4 流加载指令 MOVNTDQA)。

muMemHostAlloc() 的标志

MU_MEMHOSTREGISTER_PORTABLE

#define MU_MEMHOSTREGISTER_PORTABLE 0x01

如果设置,主机内存在 MUSA 上下文之间是可移植的。

muMemHostRegister() 的标志

MU_MEMHOSTREGISTER_DEVICEMAP

#define MU_MEMHOSTREGISTER_DEVICEMAP 0x02

如果设置,主机内存映射到 MUSA 地址空间,并且可以在主机指针上调用 muMemHostGetDevicePointer()。

muMemHostRegister() 的标志

MU_MEMHOSTREGISTER_IOMEMORY

#define MU_MEMHOSTREGISTER_IOMEMORY 0x04

如果设置,传递的内存指针被视为指向某些内存映射的 I/O 空间,例如属于第三方 PCIe 设备。在 Windows 上,该标志无效。在 Linux 上,该内存被标记为对 GPU 非缓存一致性,并且预期是物理上连续的。如果以非特权用户身份运行,它可能返回 MUSA_ERROR_NOT_PERMITTED,MUSA_ERROR_NOT_SUPPORTED 在较旧的 Linux 内核版本上。在所有其他平台上,它不受支持,并且返回 MUSA_ERROR_NOT_SUPPORTED。muMemHostRegister() 的标志

MU_MEMHOSTREGISTER_READ_ONLY

#define MU_MEMHOSTREGISTER_READ_ONLY 0x08

如果设置,传递的内存指针被视为指向设备认为只读的内存。

在没有 MU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 的平台上,为了注册映射到 CPU 作为只读的内存,需要这个标志。支持使用这个标志可以通过设备属性 MU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED 查询。如果当前上下文与没有设置此属性的设备关联,使用这个标志将导致 muMemHostRegister 出现 MUSA_ERROR_NOT_SUPPORTED 错误。

MU_PEERACCESS_DEFAULT

#define MU_PEERACCESS_DEFAULT 0x00

如果设置,本地对直接在对等方上分配的内存的对等访问路径为单介质,这取决于两个之间的 MTlink 连接是否启用。

如果启用,访问路径是 MTlink,否则是 PCIe。

MU_PEERACCESS_UNIDIR_INTERLEAVED

#define MU_PEERACCESS_UNIDIR_INTERLEAVED 0x01

如果设置,本地对直接在对等方上分配的内存的对等访问路径通过聚合链接,前提是两个之间启用了 MTlink 连接。

MUSA 将根据单向算法拓扑确定 MTlink 和 PCIe 之间的自适应链接比例。在两个之间 MTlink 不存在或被禁用的情况下,标志将回退到 MU_PEERACCESS_DEFAULT。

MU_PEERACCESS_BIDIR_INTERLEAVED

#define MU_PEERACCESS_BIDIR_INTERLEAVED 0x02

如果设置,本地对直接在对等方上分配的内存的对等访问路径通过聚合链接,前提是两个之间启用了 MTlink 连接。

MUSA 将根据双向算法拓扑确定 MTlink 和 PCIe 之间的自适应链接比例。在两个之间 MTlink 不存在或被禁用的情况下,标志将回退到 MU_PEERACCESS_DEFAULT。

MU_PEERACCESS_HETERO_INTERLEAVED

#define MU_PEERACCESS_HETERO_INTERLEAVED 0x03

如果设置,本地对直接在对等方上分配的内存的对等访问路径通过聚合链接,前提是两个之间启用了 MTlink 连接。

MUSA 将根据异构算法拓扑确定 MTlink 和 PCIe 之间的自适应链接比例。在两个之间 MTlink 不存在或被禁用的情况下,标志将回退到 MU_PEERACCESS_DEFAULT。

MU_PEERACCESS_HETERO_BIDIR_INTERLEAVED

#define MU_PEERACCESS_HETERO_BIDIR_INTERLEAVED 0x04

如果设置,本地对直接在对等方上分配的内存的对等访问路径通过聚合链接,前提是两个之间启用了 MTlink 连接。

MUSA 将根据异构双向算法拓扑确定 MTlink 和 PCIe 之间的自适应链接比例。在两个之间 MTlink 不存在或被禁用的情况下,标志将回退到 MU_PEERACCESS_DEFAULT。

MU_PEERACCESS_HALF_BIDIR_INTERLEAVED

#define MU_PEERACCESS_HALF_BIDIR_INTERLEAVED 0x05

如果设置,本地对直接在对等方上分配的内存的对等访问路径通过聚合链接,前提是两个之间启用了 MTlink 连接。

MUSA 将根据半双向算法拓扑确定 MTlink 和 PCIe 之间的自适应链接比例。在两个之间 MTlink 不存在或被禁用的情况下,标志将回退到 MU_PEERACCESS_DEFAULT。

MU_PEERACCESS_PCIE_ONLY

#define MU_PEERACCESS_PCIE_ONLY 0x06

如果设置,本地对直接在对等方上分配的内存的对等访问路径将路由到 PCIe,即使两个不同设备的上下文之间的 MTlink 被启用。

MU_PEERACCESS_POLICY_MAX

#define MU_PEERACCESS_POLICY_MAX 0x06

启用对等寻址策略最大标志。

MU_ARRAY_SPARSE_PROPERTIES_SINGLE_MIPTAIL

#define MU_ARRAY_SPARSE_PROPERTIES_SINGLE_MIPTAIL 0x1

表示分层稀疏 MUSA 数组或 MUSA 纹理映射数组具有所有层的单个 mip 尾部区域。

MU_TENSOR_DESCRIPTOR_NUM_QWORDS

#define MU_TENSOR_DESCRIPTOR_NUM_QWORDS 8

张量映射描述符的大小。

MUSA_EXTERNAL_MEMORY_DEDICATED

#define MUSA_EXTERNAL_MEMORY_DEDICATED 0x1

表示外部内存对象是一个专用资源。

MUSA_EXTERNAL_SEMAPHORE_SIGNAL_SKIP_MTSCIBUF_MEMSYNC

#define MUSA_EXTERNAL_SEMAPHORE_SIGNAL_SKIP_MTSCIBUF_MEMSYNC 0x01

当 MUSA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS 的 flags 参数包含此标志时,它表示信号外部信号量对象应跳过对所有作为 MU_EXTERNAL_MEMORY_HANDLE_TYPE_MTSCIBUF 导入的外部内存对象执行适当的内存同步操作,这些操作默认执行以确保与其他导入者的数据一致性。

MUSA_EXTERNAL_SEMAPHORE_WAIT_SKIP_MTSCIBUF_MEMSYNC

#define MUSA_EXTERNAL_SEMAPHORE_WAIT_SKIP_MTSCIBUF_MEMSYNC 0x02

当 MUSA_EXTERNAL_SEMAPHORE_WAIT_PARAMS 的 flags 参数包含此标志时,它表示等待外部信号量对象应跳过对所有作为 MU_EXTERNAL_MEMORY_HANDLE_TYPE_MTSCIBUF 导入的外部内存对象执行适当的内存同步操作,这些操作默认执行以确保与其他导入者的数据一致性。

MUSA_MTSCISYNC_ATTR_SIGNAL

#define MUSA_MTSCISYNC_ATTR_SIGNAL 0x1

当 muDeviceGetMtSciSyncAttributes 的 flags 设置为此时,它表示应用程序需要 muDeviceGetMtSciSyncAttributes 填充特定的信号者 NvSciSyncAttr。

MUSA_MTSCISYNC_ATTR_WAIT

#define MUSA_MTSCISYNC_ATTR_WAIT 0x2

当 muDeviceGetMtSciSyncAttributes 的 flags 设置为此时,它表示应用程序需要 muDeviceGetMtSciSyncAttributes 填充特定的等待者 NvSciSyncAttr。

MU_MEM_CREATE_USAGE_TILE_POOL

#define MU_MEM_CREATE_USAGE_TILE_POOL 0x1

如果设置,表示内存将用作瓦片池。

MUSA_COOPERATIVE_LAUNCH_MULTI_DEVICE_NO_PRE_LAUNCH_SYNC

#define MUSA_COOPERATIVE_LAUNCH_MULTI_DEVICE_NO_PRE_LAUNCH_SYNC 0x01

如果设置,作为 muLaunchCooperativeKernelMultiDevice 的一部分启动的每个内核只等待相应 GPU 的流中的先前工作完成后才开始执行。

MUSA_COOPERATIVE_LAUNCH_MULTI_DEVICE_NO_POST_LAUNCH_SYNC

#define MUSA_COOPERATIVE_LAUNCH_MULTI_DEVICE_NO_POST_LAUNCH_SYNC 0x02

如果设置,任何后续工作被推送到参与 muLaunchCooperativeKernelMultiDevice 调用的流中,只会等待相应 GPU 上启动的内核完成后才开始执行。

MUSA_ARRAY3D_LAYERED

#define MUSA_ARRAY3D_LAYERED 0x01

如果设置,MUSA 数组是一系列层的集合,其中每一层要么是一维数组,要么是二维数组,MUSA_ARRAY3D_DESCRIPTOR 的 Depth 成员指定层数,而不是 3D 数组的深度。

MUSA_ARRAY3D_2DARRAY

#define MUSA_ARRAY3D_2DARRAY 0x01

弃用,请使用 MUSA_ARRAY3D_LAYERED。

MUSA_ARRAY3D_SURFACE_LDST

#define MUSA_ARRAY3D_SURFACE_LDST 0x02

为了将表面引用绑定到 MUSA 数组,必须设置此标志。

MUSA_ARRAY3D_CUBEMAP

#define MUSA_ARRAY3D_CUBEMAP 0x04

如果设置,MUSA 数组是由六个 2D 数组组成的集合,代表立方体的面。

这样的 MUSA 数组的宽度必须等于其高度,Depth 必须是六。如果也设置了 MUSA_ARRAY3D_LAYERED 标志,那么 MUSA 数组是一系列立方图,Depth 必须是六的倍数。

MUSA_ARRAY3D_TEXTURE_GATHER

#define MUSA_ARRAY3D_TEXTURE_GATHER 0x08

为了在 MUSA 数组上执行纹理聚集操作,必须设置此标志。

MUSA_ARRAY3D_DEPTH_TEXTURE

#define MUSA_ARRAY3D_DEPTH_TEXTURE 0x10

如果设置,表示 MUSA 数组是 DEPTH_TEXTURE。

MUSA_ARRAY3D_COLOR_ATTACHMENT

#define MUSA_ARRAY3D_COLOR_ATTACHMENT 0x20

此标志表示 MUSA 数组可以作为外部图形 API 中的颜色目标绑定。

MUSA_ARRAY3D_SPARSE

#define MUSA_ARRAY3D_SPARSE 0x40

如果设置,表示 MUSA 数组或 MUSA 纹理映射数组分别是稀疏 MUSA 数组或 MUSA 纹理映射数组。

MU_TRSA_OVERRIDE_FORMAT

#define MU_TRSA_OVERRIDE_FORMAT 0x01

用从数组中推断出的格式覆盖 texref 格式。

muTexRefSetArray() 的标志

MU_TRSF_READ_AS_INTEGER

#define MU_TRSF_READ\_AS\_INTEGER 0x01

将纹理作为整数读取,而不是将值提升到范围 [0,1] 中的浮点数。

muTexRefSetFlags() 和 muTexObjectCreate() 的标志

MU_TRSF_NORMALIZED_COORDINATES

#define MU_TRSF_NORMALIZED_COORDINATES 0x02

使用范围 [0,1) 中的归一化纹理坐标,而不是 [0,dim)。

muTexRefSetFlags() 和 muTexObjectCreate() 的标志

MU_TRSF_SRGB

#define MU_TRSF_SRGB 0x10

在纹理读取期间执行 sRGB->线性转换。

muTexRefSetFlags() 和 muTexObjectCreate() 的标志

MU_TRSF_DISABLE_TRILINEAR_OPTIMIZATION

#define MU_TRSF_DISABLE_TRILINEAR_OPTIMIZATION 0x20

禁用任何三线性过滤优化。

muTexRefSetFlags() 和 muTexObjectCreate() 的标志

MU_LAUNCH_PARAM_END

#define MU_LAUNCH_PARAM_END ((void∗)0x00)

muLaunchKernel 的 extra 参数的数组终结符。

MU_LAUNCH_PARAM_BUFFER_POINTER

#define MU_LAUNCH\_PARAM\_BUFFER\_POINTER ((void∗)0x01)

指示 extra 参数中的下一个值将是一个指向缓冲区的指针,该缓冲区包含用于启动内核的所有内核参数。

这个缓冲区需要满足各个参数的所有对齐/填充要求。如果 extra 数组中没有指定 MU_LAUNCH_PARAM_BUFFER_SIZE,则 MU_LAUNCH_PARAM_BUFFER_POINTER 将没有效果。

MU_LAUNCH_PARAM_BUFFER_SIZE

#define MU_LAUNCH\_PARAM\_BUFFER\_SIZE ((void∗)0x02)

指示 extra 参数中的下一个值将是一个指向 size_t 的指针,该指针包含与 MU_LAUNCH_PARAM_BUFFER_POINTER 指定的缓冲区的大小。

如果与 MU_LAUNCH_PARAM_BUFFER_SIZE 相关联的值不为零,则需要在 extra 数组中指定 MU_LAUNCH_PARAM_BUFFER_POINTER。

MU_PARAM_TR_DEFAULT

#define MU_PARAM_TR_DEFAULT -1

对于加载到模块中的纹理引用,使用纹理引用的默认 texunit。

MU_DEVICE_CPU

#define MU_DEVICE_CPU ((MUdevice)-1)

代表 CPU 的设备。

MU_DEVICE_INVALID

#define MU_DEVICE_INVALID ((MUdevice)-2)

代表无效设备的设备。

类型定义文档

MUdeviceptr_v2

typedef unsigned int MUdeviceptr_v2

MUSA 设备指针 MUdeviceptr 定义为与目标平台上的指针大小相匹配的无符号整型。

MUdeviceptr

typedef MUdeviceptr_v2 MUdeviceptr

MUSA 设备指针。

MUdevice_v1

typedef int MUdevice_v1

MUSA 设备。

MUdevice

typedef MUdevice_v1 MUdevice

MUSA 设备。

MUcontext

typedef struct MUctx_st∗MUcontext

MUSA 上下文。

MUmodule

typedef struct MUmod_st∗MUmodule

MUSA 模块。

MUfunction

typedef struct MUfunc_st∗MUfunction

MUSA 函数。

MUarray

typedef struct MUarray_st∗MUarray

MUSA 数组。

MUmipmappedArray

typedef struct MUmipmappedArray_st∗MUmipmappedArray

MUSA 纹理映射数组。

MUtexref

typedef struct MUtexref_st∗MUtexref

MUSA 纹理引用。

MUsurfref

typedef struct MUsurfref_st∗MUsurfref

MUSA 表面引用。

MUevent

typedef struct MUevent_st∗MUevent

MUSA 事件。

MUstream

typedef struct MUstream_st∗MUstream

MUSA 流。

MUgraphicsResource

typedef struct MUgraphicsResource_st∗MUgraphicsResource

MUSA 图形互操作资源。

MUtexObject_v1

typedef unsigned long long MUtexObject_v1

表示 MUSA 纹理对象的不透明值。

MUtexObject

typedef MUtexObject_v1 MUtexObject

表示 MUSA 纹理对象的不透明值。

MUsurfObject_v1

typedef unsigned long long MUsurfObject_v1

表示 MUSA 表面对象的不透明值。

MUsurfObject

typedef MUsurfObject_v1 MUsurfObject

表示 MUSA 表面对象的不透明值。

MUexternalMemory

typedef struct MUextMemory_st∗MUexternalMemory

MUSA 外部内存。

MUexternalSemaphore

typedef struct MUextSemaphore_st∗MUexternalSemaphore

MUSA 外部信号量。

MUgraph

typedef struct MUgraph_st∗MUgraph

MUSA 图。

MUgraphNode

typedef struct MUgraphNode_st∗MUgraphNode

MUSA 图节点。

MUgraphExec

typedef struct MUgraphExec_st∗MUgraphExec

MUSA 可执行图。

MUmemoryPool

typedef struct MUmemPoolHandle_st∗MUmemoryPool

MUSA 内存池。

MUuserObject

typedef struct MUuserObject_st∗MUuserObject

MUSA 图的用户对象。

MUuuid

typedef struct MUuuid_st MUuuid

MUipcEventHandle_v1

typedef struct MUipcEventHandle_st MUipcEventHandle_v1

MUSA IPC 事件句柄。

MUipcEventHandle

typedef MUipcEventHandle_v1 MUipcEventHandle

MUipcMemHandle_v1

typedef struct MUipcMemHandle_st MUipcMemHandle_v1

MUSA IPC 内存句柄。

MUipcMemHandle

typedef MUipcMemHandle_v1 MUipcMemHandle

MUipcMem_flags

typedef enum MUipcMem_flags_enum MUipcMem_flags

MUSA Ipc 内存标志。

MUmemAttach_flags

typedef enum MUmemAttach_flags_enum MUmemAttach_flags

MUSA 内存附加标志。

MUctx_flags

typedef enum MUctx_flags_enum MUctx_flags

上下文创建标志。

MUstream_flags

typedef enum MUstream_flags_enum MUstream_flags

流创建标志。

MUevent_flags

typedef enum MUevent_flags_enum MUevent_flags

事件创建标志。

MUevent_record_flags

typedef enum MUevent_record_flags_enum MUevent_record_flags

事件记录标志。

MUevent_wait_flags

typedef enum MUevent_wait_flags_enum MUevent_wait_flags

事件等待标志。

MUstreamWaitValue_flags

typedef enum MUstreamWaitValue_flags_enum MUstreamWaitValue_flags

muStreamWaitValue32 和 muStreamWaitValue64 的标志。

MUstreamWriteValue_flags

typedef enum MUstreamWriteValue_flags_enum MUstreamWriteValue_flags

muStreamWriteValue32 的标志。

MUstreamBatchMemOpType

typedef enum MUstreamBatchMemOpType_enum MUstreamBatchMemOpType

muStreamBatchMemOp 的操作。

MUstreamBatchMemOpParams_v1

typedef union MUstreamBatchMemOpParams_union MUstreamBatchMemOpParams_v1

muStreamBatchMemOp 的每个操作参数。

MUstreamBatchMemOpParams

typedef MUstreamBatchMemOpParams_v1 MUstreamBatchMemOpParams

MUoccupancy_flags

typedef enum MUoccupancy_flags_enum MUoccupancy_flags

占用计算器标志。

MUstreamUpdateCaptureDependencies_flags

typedef enum MUstreamUpdateCaptureDependencies_flags_enum MUstreamUpdateCaptureDependencies_flags

muStreamUpdateCaptureDependencies 的标志。

MUarray_format

typedef enum MUarray_format_enum MUarray_format

数组格式。

MUaddress_mode

typedef enum MUaddress_mode_enum MUaddress_mode

纹理引用寻址模式。

MUfilter_mode

typedef enum MUfilter_mode_enum MUfilter_mode

纹理引用过滤模式。

MUdevice_attribute

typedef enum MUdevice_attribute_enum MUdevice_attribute

设备属性。

MUdevprop_v1

typedef struct MUdevprop_st MUdevprop_v1

传统设备属性。

MUdevprop

typedef MUdevprop_v1 MUdevprop

MUpointer_attribute

typedef enum MUpointer_attribute_enum MUpointer_attribute

指针信息。

MUmemRangeHandleType

typedef enum MUmemRangeHandleType_enum MUmemRangeHandleType

指定地址范围的句柄类型。

MUfunction_attribute

typedef enum MUfunction_attribute_enum MUfunction_attribute

函数属性。

MUfunc_cache

typedef enum MUfunc_cache_enum MUfunc_cache

函数缓存配置。

MUsharedconfig

typedef enum MUsharedconfig_enum MUsharedconfig

共享内存配置。

MUshared_carveout

typedef enum MUshared_carveout_enum MUshared_carveout

共享内存划分配置。

这些可以传递给 muFuncSetAttribute

MUmemorytype

typedef enum MUmemorytype_enum MUmemorytype

内存类型。

MUcomputemode

typedef enum MUcomputemode_enum MUcomputemode

计算模式。

MUmem_advise

typedef enum MUmem_advise_enum MUmem_advise

内存建议值。

MUmem_range_attribute

typedef enum MUmem_range_attribute_enum MUmem_range_attribute

MUjit_option

typedef enum MUjit_option_enum MUjit_option

在线编译器和链接器选项。

MUjit_target

typedef enum MUjit_target_enum MUjit_target

在线编译目标。

MUjit_fallback

typedef enum MUjit_fallback_enum MUjit_fallback

Cubin 匹配回退策略。

MUjit_cacheMode

typedef enum MUjit_cacheMode_enum MUjit_cacheMode

dlcm 的缓存模式。

MUjitInputType

typedef enum MUjitInputType_enum MUjitInputType

设备代码格式。

MUlinkState

typedef struct MUlinkState_st∗MUlinkState

MUgraphicsRegisterFlags

typedef enum MUgraphicsRegisterFlags_enum MUgraphicsRegisterFlags

注册图形资源的标志。

MUgraphicsMapResourceFlags

typedef enum MUgraphicsMapResourceFlags_enum MUgraphicsMapResourceFlags

映射和取消映射互操作资源的标志。

MUarray_cubemap_face

typedef enum MUarray_cubemap_face_enum MUarray_cubemap_face

立方体面的数组索引。

MUlimit

typedef enum MUlimit_enum MUlimit

限制。

MUresourcetype

typedef enum MUresourcetype_enum MUresourcetype

资源类型。

MUhostFn

typedef void(MUSA_CB∗MUhostFn) (void∗userData)

MUSA 主机函数。

参数

userData 传递给函数的参数值

MUaccessProperty

typedef enum MUaccessProperty_enum MUaccessProperty

指定 MUaccessPolicyWindow 的性能提示,用于 hitProp 和 missProp 成员。

MUaccessPolicyWindow_v1

typedef struct MUaccessPolicyWindow_st MUaccessPolicyWindow_v1

指定窗口的访问策略,窗口是一段连续的内存,从 base_ptr 开始,到 base_ptr + num_bytes 结束。

num_bytes 受到 MU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE 的限制。划分为许多段,并分配段,使得:sum of ̈hit segments ̈ / window == approx. ratio. sum of ̈miss segments ̈ / window == approx 1-ratio. 段和比例规范适合于架构的能力。在 hit 段中的访问应用 hitProp 访问策略。在 miss 段中的访问应用 missProp 访问策略。

MUaccessPolicyWindow

typedef MUaccessPolicyWindow_v1 MUaccessPolicyWindow

MUSA_KERNEL_NODE_PARAMS_v1

typedef struct MUSA_KERNEL_NODE_PARAMS_st MUSA_KERNEL_NODE_PARAMS_v1

GPU 内核节点参数。

MUSA_KERNEL_NODE_PARAMS

typedef MUSA_KERNEL_NODE_PARAMS_v1 MUSA_KERNEL_NODE_PARAMS

MUSA_MEMSET_NODE_PARAMS_v1

typedef struct MUSA_MEMSET_NODE_PARAMS_st MUSA_MEMSET_NODE_PARAMS_v1

Memset 节点参数。

MUSA_MEMSET_NODE_PARAMS

typedef MUSA_MEMSET_NODE_PARAMS_v1 MUSA_MEMSET_NODE_PARAMS

MUSA_HOST_NODE_PARAMS_v1

typedef struct MUSA_HOST_NODE_PARAMS_st MUSA_HOST_NODE_PARAMS_v1

主机节点参数。

MUSA_HOST_NODE_PARAMS

typedef MUSA_HOST_NODE_PARAMS_v1 MUSA_HOST_NODE_PARAMS

MUgraphNodeType

typedef enum MUgraphNodeType_enum MUgraphNodeType 图节点类型。

MUsynchronizationPolicy

typedef enum MUsynchronizationPolicy_enum MUsynchronizationPolicy

MUclusterSchedulingPolicy

typedef enum MUclusterSchedulingPolicy_enum MUclusterSchedulingPolicy

集群调度策略。

这些可以传递给 muFuncSetAttribute 或 muKernelSetAttribute

MUlaunchMemSyncDomain

typedef enum MUlaunchMemSyncDomain_enum MUlaunchMemSyncDomain

MUlaunchMemSyncDomainMap

typedef struct MUlaunchMemSyncDomainMap_st MUlaunchMemSyncDomainMap

MUlaunchAttributeID

typedef enum MUlaunchAttributeID_enum MUlaunchAttributeID

MUlaunchAttributeValue

typedef union MUlaunchAttributeValue_union MUlaunchAttributeValue

MUlaunchAttribute

typedef struct MUlaunchAttribute_st MUlaunchAttribute

MUlaunchConfig

typedef struct MUlaunchConfig_st MUlaunchConfig

MUkernelNodeAttrID

typedef enum MUkernelNodeAttrID_enum MUkernelNodeAttrID

图内核节点属性。

MUkernelNodeAttrValue_v1

typedef union MUkernelNodeAttrValue_union MUkernelNodeAttrValue_v1

图内核节点属性联合体,用于 cuKernelNodeSetAttribute/cuKernelNodeGetAttribute。

MUkernelNodeAttrValue

typedef MUkernelNodeAttrValue_v1 MUkernelNodeAttrValue

MUstreamCaptureStatus

typedef enum MUstreamCaptureStatus_enum MUstreamCaptureStatus

muStreamIsCapturing 返回的可能的流捕获状态。

MUstreamCaptureMode

typedef enum MUstreamCaptureMode_enum MUstreamCaptureMode

流捕获线程交互的可能模式。

更多详细信息请参见 muStreamBeginCapture 和 muThreadExchangeStreamCaptureMode

MUstreamAttrID

typedef enum MUstreamAttrID_enum MUstreamAttrID

流属性。

MUstreamAttrValue_v1

typedef union MUstreamAttrValue_union MUstreamAttrValue_v1

流属性联合体,用于 muStreamSetAttribute/muStreamGetAttribute。

MUstreamAttrValue

typedef MUstreamAttrValue_v1 MUstreamAttrValue

MUdriverProcAddress_flags

typedef enum MUdriverProcAddress_flags_enum MUdriverProcAddress_flags

指定搜索选项的标志。

更多详细信息请参见 muGetProcAddress

MUexecAffinityType

typedef enum MUexecAffinityType_enum MUexecAffinityType

执行亲和性类型。

MUexecAffinitySmCount_v1

typedef struct MUexecAffinitySmCount_st MUexecAffinitySmCount_v1

MU_EXEC_AFFINITY_TYPE_SM_COUNT 的值。

MUexecAffinitySmCount

typedef MUexecAffinitySmCount_v1 MUexecAffinitySmCount

MUexecAffinityParam_v1

typedef struct MUexecAffinityParam_st MUexecAffinityParam_v1

执行亲和性参数。

MUexecAffinityParam

typedef MUexecAffinityParam_v1 MUexecAffinityParam

MUresult

typedef enum musaError_enum MUresult

错误代码。

MUdevice_P2PAttribute

typedef enum MUdevice_P2PAttribute_enum MUdevice_P2PAttribute

P2P 属性。

MUstreamCallback

typedef void(MUSA_CB∗MUstreamCallback) (MUstream hStream, MUresult status, void∗userData)

MUSA 流回调。

参数

hStream 添加回调的流,如 muStreamAddCallback 传递的。可能是 NULL。

status MUSA_SUCCESS 或流上的任何持久错误。

userData 注册时提供的用户提供的参数。

MUoccupancyB2DSize

typedef size_t(MUSA_CB∗MUoccupancyB2DSize) (int blockSize)

某个内核的每个块动态共享内存映射的块大小。

参数

blockSize 内核的块大小。

返回值

一个块所需的动态共享内存。

MUSA_MEMCPY2D_v2

typedef struct MUSA_MEMCPY2D_st MUSA_MEMCPY2D_v2

2D 内存复制参数

MUSA_MEMCPY2D

typedef MUSA_MEMCPY2D_v2 MUSA_MEMCPY2D

MUSA_MEMCPY3D_v2

typedef struct MUSA_MEMCPY3D_st MUSA_MEMCPY3D_v2

3D 内存复制参数

MUSA_MEMCPY3D

typedef MUSA_MEMCPY3D_v2 MUSA_MEMCPY3D

MUSA_MEMCPY3D_PEER_v1

typedef struct MUSA_MEMCPY3D_PEER_st MUSA_MEMCPY3D_PEER_v1

3D 内存跨上下文复制参数

MUSA_MEMCPY3D_PEER

typedef MUSA_MEMCPY3D_PEER_v1 MUSA_MEMCPY3D_PEER

MUSA_ARRAY_DESCRIPTOR_v2

typedef struct MUSA_ARRAY_DESCRIPTOR_st MUSA_ARRAY_DESCRIPTOR_v2

数组描述符。

MUSA_ARRAY_DESCRIPTOR

typedef MUSA_ARRAY_DESCRIPTOR_v2 MUSA_ARRAY_DESCRIPTOR

MUSA_ARRAY3D_DESCRIPTOR_v2

typedef struct MUSA_ARRAY3D_DESCRIPTOR_st MUSA_ARRAY3D_DESCRIPTOR_v2

3D 数组描述符

MUSA_ARRAY3D_DESCRIPTOR

typedef MUSA_ARRAY3D_DESCRIPTOR_v2 MUSA_ARRAY3D_DESCRIPTOR

MUSA_ARRAY_SPARSE_PROPERTIES_v1

typedef struct MUSA_ARRAY_SPARSE_PROPERTIES_st MUSA_ARRAY_SPARSE_PROPERTIES_v1

MUSA 数组稀疏属性。

MUSA_ARRAY_SPARSE_PROPERTIES

typedef MUSA_ARRAY_SPARSE_PROPERTIES_v1 MUSA_ARRAY_SPARSE_PROPERTIES

MUSA_RESOURCE_DESC_v1

typedef struct MUSA_RESOURCE_DESC_st MUSA_RESOURCE_DESC_v1

MUSA 资源描述符。

MUSA_RESOURCE_DESC

typedef MUSA_RESOURCE_DESC_v1 MUSA_RESOURCE_DESC

MUSA_TEXTURE_DESC_v1

typedef struct MUSA_TEXTURE_DESC_st MUSA_TEXTURE_DESC_v1

纹理描述符。

MUSA_TEXTURE_DESC

typedef MUSA_TEXTURE_DESC_v1 MUSA_TEXTURE_DESC

MUresourceViewFormat

typedef enum MUresourceViewFormat_enum MUresourceViewFormat

资源视图格式。

MUSA_RESOURCE_VIEW_DESC_v1

typedef struct MUSA_RESOURCE_VIEW_DESC_st MUSA_RESOURCE_VIEW_DESC_v1

资源视图描述符。

MUSA_RESOURCE_VIEW_DESC

typedef MUSA_RESOURCE_VIEW_DESC_v1 MUSA_RESOURCE_VIEW_DESC

MUtensorDescriptor

typedef struct MUtensorDescriptor_st MUtensorDescriptor

张量映射描述符。

需要编译器支持对齐到 64 字节。

MUtensorDescriptorDataType

typedef enum MUtensorDescriptorDataType_enum MUtensorDescriptorDataType

张量映射数据类型。

MUtensorDescriptorInterleave

typedef enum MUtensorDescriptorInterleave_enum MUtensorDescriptorInterleave

张量映射交错布局类型。

MUSA_POINTER_ATTRIBUTE_P2P_TOKENS_v1

typedef struct MUSA_POINTER_ATTRIBUTE_P2P_TOKENS_st MUSA_POINTER_ATTRIBUTE_P2P_TOKENS_v1

GPU Direct v3 令牌。

MUSA_POINTER_ATTRIBUTE_P2P_TOKENS

typedef MUSA_POINTER_ATTRIBUTE_P2P_TOKENS_v1 MUSA_POINTER_ATTRIBUTE_P2P_TOKENS

MUSA_POINTER_ATTRIBUTE_ACCESS_FLAGS

typedef enum MUSA_POINTER_ATTRIBUTE_ACCESS_FLAGS_enum MUSA_POINTER_ATTRIBUTE_ACCESS_FLAGS

访问标志,指定当前上下文的设备对引用的内存的访问级别。

MUSA_LAUNCH_PARAMS_v1

typedef struct MUSA_LAUNCH_PARAMS_st MUSA_LAUNCH_PARAMS_v1

内核启动参数。

MUSA_LAUNCH_PARAMS

typedef MUSA_LAUNCH_PARAMS_v1 MUSA_LAUNCH_PARAMS

MUexternalMemoryHandleType

typedef enum MUexternalMemoryHandleType_enum MUexternalMemoryHandleType

外部内存句柄类型。

MUSA_EXTERNAL_MEMORY_HANDLE_DESC_v1

typedef struct MUSA_EXTERNAL_MEMORY_HANDLE_DESC_st MUSA_EXTERNAL_MEMORY_HANDLE_DESC_v1

外部内存句柄描述符。

MUSA_EXTERNAL_MEMORY_HANDLE_DESC

typedef MUSA_EXTERNAL_MEMORY_HANDLE_DESC_v1 MUSA_EXTERNAL_MEMORY_HANDLE_DESC

MUSA_EXTERNAL_MEMORY_BUFFER_DESC_v1

typedef struct MUSA_EXTERNAL_MEMORY_BUFFER_DESC_st MUSA_EXTERNAL_MEMORY_BUFFER_DESC_v1

外部内存缓冲区描述符。

MUSA_EXTERNAL_MEMORY_BUFFER_DESC

typedef MUSA_EXTERNAL_MEMORY_BUFFER_DESC_v1 MUSA_EXTERNAL_MEMORY_BUFFER_DESC

MUSA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC_v1

typedef struct MUSA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC_st MUSA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC_v1

外部内存纹理映射描述符。

MUSA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC

typedef MUSA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC_v1 MUSA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC

MUexternalSemaphoreHandleType

typedef enum MUexternalSemaphoreHandleType_enum MUexternalSemaphoreHandleType

外部信号量句柄类型。

MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC_v1

typedef struct MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC_st MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC_v1

外部信号量句柄描述符。

MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC

typedef MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC_v1 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC

MUSA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_v1

typedef struct MUSA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_st MUSA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_v1

外部信号量信号参数。

MUSA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS

typedef MUSA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_v1 MUSA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS

MUSA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_v1

typedef struct MUSA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_st MUSA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_v1

外部信号量等待参数。

MUSA_EXTERNAL_SEMAPHORE_WAIT_PARAMS

typedef MUSA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_v1 MUSA_EXTERNAL_SEMAPHORE_WAIT_PARAMS

MUSA_EXT_SEM_SIGNAL_NODE_PARAMS_v1

typedef struct MUSA_EXT_SEM_SIGNAL_NODE_PARAMS_st MUSA_EXT_SEM_SIGNAL_NODE_PARAMS_v1

信号量信号节点参数。

MUSA_EXT_SEM_SIGNAL_NODE_PARAMS

typedef MUSA_EXT_SEM_SIGNAL_NODE_PARAMS_v1 MUSA_EXT_SEM_SIGNAL_NODE_PARAMS

MUSA_EXT_SEM_WAIT_NODE_PARAMS_v1

typedef struct MUSA_EXT_SEM_WAIT_NODE_PARAMS_st MUSA_EXT_SEM_WAIT_NODE_PARAMS_v1

信号量等待节点参数。

MUSA_EXT_SEM_WAIT_NODE_PARAMS

typedef MUSA_EXT_SEM_WAIT_NODE_PARAMS_v1 MUSA_EXT_SEM_WAIT_NODE_PARAMS

MUmemGenericAllocationHandle_v1

typedef unsigned long long MUmemGenericAllocationHandle_v1

MUmemGenericAllocationHandle

typedef MUmemGenericAllocationHandle_v1 MUmemGenericAllocationHandle

MUmemAllocationHandleType

typedef enum MUmemAllocationHandleType_enum MUmemAllocationHandleType

指定特定句柄类型的标志。

MUmemAccess_flags

typedef enum MUmemAccess_flags_enum MUmemAccess_flags

指定映射的内存保护标志。

MUmemLocationType

typedef enum MUmemLocationType_enum MUmemLocationType

指定位置类型。

MUmemAllocationType

typedef enum MUmemAllocationType_enum MUmemAllocationType

定义可用的分配类型。

MUmemAllocationGranularity_flags

typedef enum MUmemAllocationGranularity_flags_enum MUmemAllocationGranularity_flags

请求分配的不同优化和必需粒度的标志。

MUarraySparseSubresourceType

typedef enum MUarraySparseSubresourceType_enum MUarraySparseSubresourceType

稀疏子资源类型。

MUmemOperationType

typedef enum MUmemOperationType_enum MUmemOperationType

内存操作类型。

MUmemHandleType

typedef enum MUmemHandleType_enum MUmemHandleType

内存句柄类型。

MUarrayMapInfo_v1

typedef struct MUarrayMapInfo_st MUarrayMapInfo_v1

指定 MUSA 数组或 MUSA 纹理映射数组内存映射信息。

MUarrayMapInfo

typedef MUarrayMapInfo_v1 MUarrayMapInfo

MUmemLocation_v1

typedef struct MUmemLocation_st MUmemLocation_v1

指定内存位置。

MUmemLocation

typedef MUmemLocation_v1 MUmemLocation

MUmemAllocationCompType

typedef enum MUmemAllocationCompType_enum MUmemAllocationCompType

指定分配的压缩属性。

MUmemAllocationProp_v1

typedef struct MUmemAllocationProp_st MUmemAllocationProp_v1

指定分配的分配属性。

MUmemAllocationProp

typedef MUmemAllocationProp_v1 MUmemAllocationProp

MUmemAccessDesc_v1

typedef struct MUmemAccessDesc_st MUmemAccessDesc_v1

内存访问描述符。

MUmemAccessDesc

typedef MUmemAccessDesc_v1 MUmemAccessDesc

MUgraphExecUpdateResult

typedef enum MUgraphExecUpdateResult_enum MUgraphExecUpdateResult

MUmemPool_attribute

typedef enum MUmemPool_attribute_enum MUmemPool_attribute

MUSA 内存池属性。

MUmemPoolProps_v1

typedef struct MUmemPoolProps_st MUmemPoolProps_v1

指定来自池的分配的属性。

MUmemPoolProps

typedef MUmemPoolProps_v1 MUmemPoolProps

MUmemPoolPtrExportData_v1

typedef struct MUmemPoolPtrExportData_st MUmemPoolPtrExportData_v1

导出池分配的不透明数据。

MUmemPoolPtrExportData

typedef MUmemPoolPtrExportData_v1 MUmemPoolPtrExportData

MUSA_MEM_ALLOC_NODE_PARAMS

typedef struct MUSA_MEM_ALLOC_NODE_PARAMS_st MUSA_MEM_ALLOC_NODE_PARAMS

内存分配节点参数。

MUgraphMem_attribute

typedef enum MUgraphMem_attribute_enum MUgraphMem_attribute

MUflushGPUDirectRDMAWritesOptions

typedef enum MUflushGPUDirectRDMAWritesOptions_enum MUflushGPUDirectRDMAWritesOptions

MU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 的位掩码。

MUGPUDirectRDMAWritesOrdering

typedef enum MUGPUDirectRDMAWritesOrdering_enum MUGPUDirectRDMAWritesOrdering

GPUDirect RDMA 写入的平台原生排序。

MUflushGPUDirectRDMAWritesScope

typedef enum MUflushGPUDirectRDMAWritesScope_enum MUflushGPUDirectRDMAWritesScope

muFlushGPUDirectRDMAWrites 的范围。

MUflushGPUDirectRDMAWritesTarget

typedef enum MUflushGPUDirectRDMAWritesTarget_enum MUflushGPUDirectRDMAWritesTarget

muFlushGPUDirectRDMAWrites 的目标。

MUgraphDebugDot_flags

typedef enum MUgraphDebugDot_flags_enum MUgraphDebugDot_flags

muGraphDebugDotPrint 的额外写入选项。

MUuserObject_flags

typedef enum MUuserObject_flags_enum MUuserObject_flags

图的用户对象标志。

MUuserObjectRetain_flags

typedef enum MUuserObjectRetain_flags_enum MUuserObjectRetain_flags

保留图的用户对象引用的标志。

MUgraphInstantiate_flags

typedef enum MUgraphInstantiate_flags_enum MUgraphInstantiate_flags

实例化图的标志。

MUconvParamer

typedef struct MUconvParamer_st MUconvParamer

MUdirectConvParamer

typedef struct MUdirectConvParamer_st MUdirectConvParamer

MUdirectConvInterleave

typedef enum MUdirectConvInterleave_enum MUdirectConvInterleave

MUdirectConvBasicShape

typedef enum MUdirectConvBasicShape_enum MUdirectConvBasicShape

MUatomicType

typedef enum MUatomicType_enum MUatomicType

MUSA_MEM_ATOMIC_NODE_PARAMS_v1

typedef struct MUSA_MEM_ATOMIC_NODE_PARAMS_st MUSA_MEM_ATOMIC_NODE_PARAMS_v1

MUSA_MEM_ATOMIC_NODE_PARAMS

typedef MUSA_MEM_ATOMIC_NODE_PARAMS_v1 MUSA_MEM_ATOMIC_NODE_PARAMS

MUatomicValueType

typedef enum MUatomicValueType_enum MUatomicValueType

MUSA_MEM_ATOMIC_VALUE_NODE_PARAMS_v1

typedef struct MUSA_MEM_ATOMIC_VALUE_NODE_PARAMS_st MUSA_MEM_ATOMIC_VALUE_NODE_PARAMS_v1

MUSA_MEM_ATOMIC_VALUE_NODE_PARAMS

typedef MUSA_MEM_ATOMIC_VALUE_NODE_PARAMS_v1 MUSA_MEM_ATOMIC_VALUE_NODE_PARAMS

MUSA_MEM_WAIT_WRITE_NODE_PARAMS_v1

typedef struct MUSA_MEM_WAIT_WRITE_NODE_PARAMS_st MUSA_MEM_WAIT_WRITE_NODE_PARAMS_v1

MUSA_MEM_WAIT_WRITE_NODE_PARAMS

typedef MUSA_MEM_WAIT_WRITE_NODE_PARAMS_v1 MUSA_MEM_WAIT_WRITE_NODE_PARAMS

枚举类型文档

MUipcMem_flags_enum

enum MUipcMem_flags_enum

MUSA IPC 内存标志。

枚举值

MU_IPC_MEM_LAZY_ENABLE_PEER_ACCESS 根据需要自动启用通过MTlink或PCIe路径在远程设备之间的对等访问。

MU_IPC_MEM_LAZY_UNIDIR_INTERLEAVE_PEER_ACCESS 自动启用通过MTlink-PCIe单向交错路径在设备之间使用自适应比例的对等访问。

MU_IPC_MEM_LAZY_BIDIR_INTERLEAVE_PEER_ACCESS 自动启用通过MTlink-PCIe双向交错路径在设备之间使用自适应比例的对等访问。

MU_IPC_MEM_LAZY_HETERO_INTERLEAVE_PEER_ACCESS 自动启用通过MTlink-PCIe异构交错路径在设备之间使用自适应比例的对等访问。

MU_IPC_MEM_LAZY_HETERO_BIDIR_INTERLEAVE_PEER_ACCESS 自动启用通过MTlink-PCIe异构双向交错路径在设备之间使用自适应比例的对等访问。

MU_IPC_MEM_LAZY_HALF_BIDIR_INTERLEAVE_PEER_ACCESS 自动启用通过MTlink-PCIe半双向交错路径在设备之间使用自适应比例的对等访问。

MU_IPC_MEM_LAZY_PCIE_PEER_ACCESS 根据需要自动启用通过PCIe路径在设备之间的PCIe对等访问。

MU_IPC_MEM_LAZY_POLICY_MAX IPC 内存策略最大标志。

MUmemAttach_flags_enum

enum MUmemAttach_flags_enum

MUSA 内存附加标志。

枚举值

MU_MEM_ATTACH_GLOBAL 任何流在任何设备上都可以访问内存。
MU_MEM_ATTACH_HOST 任何流在任何设备上都不能访问内存。
MU_MEM_ATTACH_SINGLE 只能由关联设备上的单个流访问内存。

MUctx_flags_enum

enum MUctx_flags_enum

上下文创建标志。

枚举值

MU_CTX_SCHED_AUTO 自动调度。

MU_CTX_SCHED_SPIN 设置自旋作为默认调度。

MU_CTX_SCHED_YIELD 设置让步作为默认调度。

MU_CTX_SCHED_BLOCKING_SYNC 设置阻塞同步作为默认调度。

MU_CTX_BLOCKING_SYNC 设置阻塞同步作为默认调度。

弃用 此标志在MUSA 4.0中被弃用,并被MU_CTX_SCHED_BLOCKING_SYNC替代。

MU_CTX_SCHED_MASK

MU_CTX_MAP_HOST

弃用 此标志在MUSA 11.0中被弃用,不再有任何效果。从MUSA 3.2起,所有上下文的行为就好像启用了此标志一样。

MU_CTX_LMEM_RESIZE_TO_MAX 启动后保持本地内存分配。

MU_CTX_FLAGS_MASK

MUstream_flags_enum

enum MUstream_flags_enum

流创建标志。

枚举值

MU_STREAM_DEFAULT 默认流标志。

MU_STREAM_NON_BLOCKING 流不与流0(空流)同步

MUevent_flags_enum

enum MUevent_flags_enum

事件创建标志。

枚举值

MU_EVENT_DEFAULT 默认事件标志。

MU_EVENT_BLOCKING_SYNC 事件使用阻塞同步。 MU_EVENT_DISABLE_TIMING 事件将不记录时间数据。

MU_EVENT_INTERPROCESS 事件适用于进程间使用。MU_EVENT_DISABLE_TIMING必须被设置

MUevent_record_flags_enum

enum MUevent_record_flags_enum

事件记录标志。

枚举值

MU_EVENT_RECORD_DEFAULT 默认事件记录标志。

MU_EVENT_RECORD_EXTERNAL 使用流捕获时,创建事件记录节点而不是默认行为。这个标志

MUevent_wait_flags_enum

enum MUevent_wait_flags_enum

事件等待标志。

枚举值

MU_EVENT_WAIT_DEFAULT 默认事件等待标志。

MU_EVENT_WAIT_EXTERNAL 使用流捕获时,创建事件等待节点而不是默认行为。
在捕获之外使用时无效。

MUstreamWaitValue_flags_enum

enum MUstreamWaitValue_flags_enum

muStreamWaitValue32和muStreamWaitValue64的标志。

枚举值

属性名称描述注释
MU_STREAM_WAIT_VALUE_GEQ等待直到(int32_t)(*addr - value) >= 0(或64位值为int64_t)。这是一个循环比较,忽略环绕。默认行为。
MU_STREAM_WAIT_VALUE_EQ等待直到*addr == value
MU_STREAM_WAIT_VALUE_AND等待直到(*addr & value) != 0
MU_STREAM_WAIT_VALUE_NOR等待直到`~(*addrvalue) != 0。支持此操作可以通过muDeviceGetAttribute()MU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR`查询。需要特定设备支持。
MU_STREAM_WAIT_VALUE_LT等待直到*addr \< value
MU_STREAM_WAIT_VALUE_LEQ等待直到*addr \<= value
MU_STREAM_WAIT_VALUE_GT等待直到*addr > value
MU_STREAM_WAIT_VALUE_NEQ等待直到*addr != value
MU_STREAM_WAIT_VALUE_FLUSH在等待操作后跟一个刷新未完成的远程写入。确保在等待满足之前到达设备的远程写入对下游工作可见。支持限制在选定平台,并且可以通过CU_DEVICE_ATTRIBUTE_CAN_USE_WAIT_VALUE_FLUSH查询。

MUstreamWriteValue_flags_enum

enum MUstreamWriteValue_flags_enum

muStreamWriteValue32的标志。

枚举值

  • MU_STREAM_WRITE_VALUE_DEFAULT: 默认行为。
  • MU_STREAM_WRITE_VALUE_NO_MEMORY_BARRIER: 允许写入与之前发出的写入重新排序,作为一种性能优化。
    通常,muStreamWriteValue32在写入前提供内存围栏,语义类似于__threadfence_system(),但范围限定在流而不是MUSA线程。

MUstreamBatchMemOpType_enum

enum MUstreamBatchMemOpType_enum

muStreamBatchMemOp的操作。

枚举值

MU_STREAM_MEM_OP_WAIT_VALUE_32 表示muStreamWaitValue32操作。

MU_STREAM_MEM_OP_WRITE_VALUE_32 表示muStreamWriteValue32操作。

MU_STREAM_MEM_OP_WAIT_VALUE_64 表示muStreamWaitValue64操作。

MU_STREAM_MEM_OP_WRITE_VALUE_64 表示muStreamWriteValue64操作。

MU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES 这与MU_STREAM_WAIT_VALUE_FLUSH具有相同的效果,但作为一个独立操作。

MUoccupancy_flags_enum

enum MUoccupancy_flags_enum ` 占用计算器标志。

枚举值

MU_OCCUPANCY_DEFAULT 默认行为。 MU_OCCUPANCY_DISABLE_CACHING_OVERRIDE 假设全局缓存已启用,不能自动关闭。

MUstreamUpdateCaptureDependencies_flags_enum

enum MUstreamUpdateCaptureDependencies_flags_enum

muStreamUpdateCaptureDependencies的标志。

枚举值

MU_STREAM_ADD_CAPTURE_DEPENDENCIES 将新节点添加到依赖集。 MU_STREAM_SET_CAPTURE_DEPENDENCIES 用新节点替换依赖集。

MUarray_format_enum

enum MUarray_format_enum

数组格式。

枚举值

MU_AD_FORMAT_UNSIGNED_INT8 无符号8位整数。

MU_AD_FORMAT_UNSIGNED_INT16 无符号16位整数。

MU_AD_FORMAT_UNSIGNED_INT32 无符号32位整数。

MU_AD_FORMAT_SIGNED_INT8 有符号8位整数。

MU_AD_FORMAT_SIGNED_INT16 有符号16位整数。

MU_AD_FORMAT_SIGNED_INT32 有符号32位整数。

MU_AD_FORMAT_HALF 16位浮点数

MU_AD_FORMAT_FLOAT 32位浮点数

MU_AD_FORMAT_NV12 8位YUV平面格式,采用4:2:0采样

MU_AD_FORMAT_UNORM_INT8X1 1通道无符号8位归一化整数

MU_AD_FORMAT_UNORM_INT8X2 2通道无符号8位归一化整数

MU_AD_FORMAT_UNORM_INT8X4 4通道无符号8位归一化整数

MU_AD_FORMAT_UNORM_INT16X1 1通道无符号16位归一化整数

MU_AD_FORMAT_UNORM_INT16X2 2通道无符号16位归一化整数

MU_AD_FORMAT_UNORM_INT16X4 4通道无符号16位归一化整数

MU_AD_FORMAT_SNORM_INT8X1 1通道有符号8位归一化整数

MU_AD_FORMAT_SNORM_INT8X2 2通道有符号8位归一化整数

MU_AD_FORMAT_SNORM_INT8X4 4通道有符号8位归一化整数

MU_AD_FORMAT_SNORM_INT16X1 1通道有符号16位归一化整数

MU_AD_FORMAT_SNORM_INT16X2 2通道有符号16位归一化整数

MU_AD_FORMAT_SNORM_INT16X4 4通道有符号16位归一化整数

MUaddress_mode_enum

enum MUaddress_mode_enum

纹理引用寻址模式。

枚举值

MU_TR_ADDRESS_MODE_WRAP 包装寻址模式。

MU_TR_ADDRESS_MODE_CLAMP 边缘夹紧寻址模式。

MU_TR_ADDRESS_MODE_MIRROR 镜像寻址模式。

MU_TR_ADDRESS_MODE_BORDER 边框寻址模式。

MUfilter_mode_enum

enum MUfilter_mode_enum

纹理引用过滤模式。

枚举值

MU_TR_FILTER_MODE_POINT 点过滤模式。 MU_TR_FILTER_MODE_LINEAR 线性过滤模式。

MUdevice_attribute_enum

enum MUdevice_attribute_enum

设备属性。

枚举值

MU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK 每个块中的最大线程数。

MU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X 块的最大维度X。

MU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y 块的最大维度Y。

MU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z 块的最大维度Z。

MU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X 网格的最大维度X。

MU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y 网格的最大维度Y。

MU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z 网格的最大维度Z。

MU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK 每个块可用的最大共享内存字节数。

MU_DEVICE_ATTRIBUTE_SHARED_MEMORY_PER_BLOCK 已弃用,请使用MU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK。

MU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY 设备上MUSA C内核中常量变量可用的内存字节数。

MU_DEVICE_ATTRIBUTE_WARP_SIZE 线程中的Warp大小。

MU_DEVICE_ATTRIBUTE_MAX_PITCH 内存复制允许的最大间距字节数。

MU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK 每个块可用的最大32位寄存器数。

MU_DEVICE_ATTRIBUTE_REGISTERS_PER_BLOCK 已弃用,请使用MU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK。

MU_DEVICE_ATTRIBUTE_CLOCK_RATE 典型时钟频率,单位为千赫兹。

MU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT 纹理的对齐要求。

MU_DEVICE_ATTRIBUTE_GPU_OVERLAP 设备可能同时复制内存和执行内核。已弃用。请改用MU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT。

MU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT 设备上的多处理器数量。

MU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT 指定内核是否有运行时间限制。

MU_DEVICE_ATTRIBUTE_INTEGRATED 设备与主机内存集成。

MU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY 设备可以将主机内存映射到MUSA地址空间。

MU_DEVICE_ATTRIBUTE_COMPUTE_MODE 计算模式(详见MUcomputemode)

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH 最大1D纹理宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH 最大2D纹理宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT 最大2D纹理高度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH 最大3D纹理宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT 最大3D纹理高度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH 最大3D纹理深度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH 最大2D层纹理宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 最大2D层纹理高度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2D层纹理的最大层数。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_WIDTH 已弃用,请使用MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_HEIGHT 已弃用,请使用MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_NUMSLICES 已弃用,请使用MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS。

MU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT 表面的对齐要求。

MU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS 设备可能同时执行多个内核。

MU_DEVICE_ATTRIBUTE_ECC_ENABLED 设备启用了ECC支持。

MU_DEVICE_ATTRIBUTE_PCI_BUS_ID 设备的PCI总线ID。

MU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID 设备的PCI设备ID。

MU_DEVICE_ATTRIBUTE_TCC_DRIVER 设备使用TCC驱动模型。

MU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE 峰值内存时钟频率,单位为千赫兹。

MU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH 全局内存总线宽度,单位为位。

MU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE L2缓存大小,单位为字节。

MU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR 每个多处理器的最大线程数。

MU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT 异步引擎数量。

MU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING 设备与主机共享统一地址空间。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH 最大1D层纹理宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 1D层纹理的最大层数。

MU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER 已弃用,请勿使用。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH 如果设置了MUSA_ARRAY3D_TEXTURE_GATHER,则最大2D纹理宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT 如果设置了MUSA_ARRAY3D_TEXTURE_GATHER,则最大2D纹理高度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 备用最大3D纹理宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 备用最大3D纹理高度。

``MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE` 备用最大3D纹理深度。

MU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID 设备的PCI域ID。

MU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT 纹理的间距对齐要求。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH 最大立方体贴图宽度/高度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 最大立方体层贴图宽度/高度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 立方体层贴图的最大层数。

MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH 最大1D表面宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH 最大2D表面宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT 最大2D表面高度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH 最大3D表面宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT 最大3D表面高度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH 最大3D表面深度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH 最大1D层表面宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 1D层表面的最大层数。

MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH 最大2D层表面宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 最大2D层表面高度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2D层表面的最大层数。

MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH 最大立方体表面宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 最大立方体层表面宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 立方体层表面的最大层数。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH 已弃用,请勿使用。

使用musaDeviceGetTexture1DLinearMaxWidth()或 muDeviceGetTexture1DLinearMaxWidth()代替。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH 最大2D线性纹理宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT 最大2D线性纹理高度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH 最大2D线性纹理间距字节数。

枚举值

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 最大mipmapped 2D纹理宽度。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 最大mipmapped 2D纹理高度。

MU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR 主要计算能力版本号。

MU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR 次要计算能力版本号。

MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 最大mipmapped 1D纹理宽度。

MU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED 设备支持流优先级。

MU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED 设备支持在L1中缓存全局变量。

MU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED 设备支持在L1中缓存局部变量。

MU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 每个多处理器可用的最大共享内存字节数。

MU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 每个多处理器可用的最大32位寄存器数。

MU_DEVICE_ATTRIBUTE_MANAGED_MEMORY 设备可以在该系统上分配托管内存。

MU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD 设备位于多GPU板上。

MU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID 同一多GPU板上的设备组的唯一ID。

MU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED 设备与主机之间的链接支持原生原子操作(这是一个占位符属性,在任何当前硬件上都不受支持)

MU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO 单精度性能(每秒浮点操作数)与双精度性能的比率。

MU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS 设备支持无需调用musaHostRegister即可一致性访问分页内存。

MU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS 设备可以与CPU同时一致性访问托管内存。

MU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED 设备支持计算抢占。

MU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 设备可以使用主机注册内存的相同虚拟地址访问主机注册内存。

MU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_MEM_OPS 支持muStreamBatchMemOp和相关API。

MU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS_V1 已弃用,连同v1 MemOps API,64位操作在muStreamBatchMemOp和相关MemOp API中得到支持。

MU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR_V1 已弃用,连同v1 MemOps API,MU_STREAM_WAIT_VALUE_NOR得到支持。

MU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH 设备支持通过muLaunchCooperativeKernel启动合作内核。

MU_DEVICE_ATTRIBUTE_COOPERATIVE_MULTI_DEVICE_LAUNCH 已弃用,muLaunchCooperativeKernelMultiDevice已弃用。

MU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 每个块的最大optin共享内存。

MU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES 设备支持MU_STREAM_WAIT_VALUE_FLUSH标志和MU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp。有关更多详细信息,请参阅流内存操作。

MU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED 设备支持通过musaHostRegister注册主机内存。

MU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 设备通过主机的页表访问分页内存。

MU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 主机可以直接访问设备上的托管内存,无需迁移。

MU_DEVICE_ATTRIBUTE_VIRTUAL_ADDRESS_MANAGEMENT_SUPPORTED 已弃用,请使用MU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED。

MU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 设备支持虚拟内存管理API,如muMemAddressReserve、muMemCreate、muMemMap及相关API。

MU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 设备支持通过muMemExportToShareableHandle导出内存到posix文件描述符,如果通过muMemCreate请求。

MU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED

设备支持通过muMemExportToShareableHandle导出内存到Win32 NT句柄,如果通过muMemCreate请求。

枚举值

MU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED

设备支持通过muMemExportToShareableHandle导出内存到Win32 KMT句柄,如果通过muMemCreate请求。 MU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR 每个多处理器的最大块数。

MU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED 设备支持内存压缩。

MU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE L2持久行容量设置的最大值,单位为字节。

MU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE MUaccessPolicyWindownum_bytes的最大值。

MU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_MUSA_VMM_SUPPORTED 设备支持在muMemCreate时指定GPUDirect RDMA标志。

MU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK MUSA驱动程序每个块保留的共享内存字节数。

MU_DEVICE_ATTRIBUTE_SPARSE_MUSA_ARRAY_SUPPORTED 设备支持稀疏MUSA数组和稀疏MUSA mipmapped数组。

MU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED 设备支持使用muMemHostRegister标志CU_MEMHOSTERGISTER_READ_ONLY注册必须映射为GPU只读的内存。

MU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 设备支持外部时间线信号量互操作。

MU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED 设备支持使用muMemAllocAsync和cuMemPool系列API。

MU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED 设备支持GPUDirect RDMA API,如mthreads_p2p_get_pages(有关更多信息,请参见链接

MU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 返回的属性应解释为位掩码,其中各个位由MUflushGPUDirectRDMAWritesOptions枚举描述。

MU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING GPUDirect RDMA写入设备不需要为返回属性指示范围内的消费者刷新。有关数值,请参阅MUGPUDirectRDMAWritesOrdering。

MU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES 与mempool基础IPC支持的句柄类型。

MU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 设备支持延迟映射CUDA数组和CUDA mipmapped数组。

MU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS 64位操作在muStreamBatchMemOp和相关MemOp API中得到支持。

MU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR MU_STREAM_WAIT_VALUE_NOR由MemOp API支持。

MU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED 设备支持与dma_buf机制的缓冲区共享。

MU_DEVICE_ATTRIBUTE_MAX

MUpointer_attribute_enum

enum MUpointer_attribute_enum

指针信息。

枚举值

MU_POINTER_ATTRIBUTE_CONTEXT 分配或注册指针的MUcontext。

MU_POINTER_ATTRIBUTE_MEMORY_TYPE 描述指针物理位置的MUmemorytype。

MU_POINTER_ATTRIBUTE_DEVICE_POINTER 可以在设备上访问指针内存的地址。

MU_POINTER_ATTRIBUTE_HOST_POINTER 可以在主机上访问指针内存的地址。

MU_POINTER_ATTRIBUTE_P2P_TOKENS 用于nv-p2p.h Linux内核接口的一对令牌。

MU_POINTER_ATTRIBUTE_SYNC_MEMOPS 在此区域上发起的每个同步内存操作都同步。

MU_POINTER_ATTRIBUTE_BUFFER_ID 为分配的内存区域分配的进程范围唯一ID。

MU_POINTER_ATTRIBUTE_IS_MANAGED 指示指针是否指向托管内存。

MU_POINTER_ATTRIBUTE_DEVICE_ORDINAL 分配或注册指针的设备的设备序数。

MU_POINTER_ATTRIBUTE_IS_LEGACY_MUSA_IPC_CAPABLE 1如果此指针映射到适合musaIpcGetMemHandle的分配,否则为0

MU_POINTER_ATTRIBUTE_RANGE_START_ADDR 此请求指针的起始地址。

MU_POINTER_ATTRIBUTE_RANGE_SIZE 此请求指针的地址范围大小。

MU_POINTER_ATTRIBUTE_MAPPED 1如果此指针在映射到后备分配的有效地址范围中,否则为0

MU_POINTER_ATTRIBUTE_ALLOWED_HANDLE_TYPES 允许的MUmemAllocationHandleType的位掩码,用于此分配。

MU_POINTER_ATTRIBUTE_IS_GPU_DIRECT_RDMA_CAPABLE 1如果引用的内存可以使用GPUDirect RDMA API

MU_POINTER_ATTRIBUTE_ACCESS_FLAGS 返回与当前上下文关联的设备对指针引用的相应内存的访问标志。

MU_POINTER_ATTRIBUTE_MEMPOOL_HANDLE 如果分配来自mempool,则返回mempool句柄。否则返回NULL。

MUmemRangeHandleType_enum

enum MUmemRangeHandleType_enum

指定地址范围的句柄类型。

枚举值

MU_MEM_RANGE_HANDLE_TYPE_DMA_BUF_FD MU_MEM_RANGE_HANDLE_TYPE_MAX

MUfunction_attribute_enum

enum MUfunction_attribute_enum

函数属性。

枚举值

MU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK 超出一个块中的线程最大数量,超出此数量将导致函数启动失败。这个数字取决于函数和当前加载函数的设备。

MU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES 此函数所需的静态分配共享内存大小(字节)。这不包括用户在运行时动态分配的共享内存。

MU_FUNC_ATTRIBUTE_CONST_SIZE_BYTES 此函数所需的用户分配常量内存大小(字节)。

MU_FUNC_ATTRIBUTE_LOCAL_SIZE_BYTES 此函数的每个线程使用的本地内存大小(字节)。

MU_FUNC_ATTRIBUTE_NUM_REGS 此函数的每个线程使用的寄存器数量。

MU_FUNC_ATTRIBUTE_PTX_VERSION 编译函数的PTX虚拟架构版本。这个值是主要PTX版本∗10 +次要PTX版本,因此PTX版本1.3的函数将返回值13。 请注意,这可能返回未定义值0,用于在MUSA 3.0之前编译的cubins。

MU_FUNC_ATTRIBUTE_BINARY_VERSION 编译函数的二进制架构版本。这个值是主要二进制版本∗10 +次要二进制版本,因此二进制版本1.3的函数将返回值13。 请注意,这将为没有正确编码的二进制架构版本的旧cubins返回值10。

MU_FUNC_ATTRIBUTE_CACHE_MODE_CA 属性表示函数是否已使用用户指定选项“-Xptxas --dlcm=ca”编译。

MU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES 此函数可以使用的最大动态分配共享内存大小(字节)。如果用户指定的动态共享内存大小大于这个值,启动将失败。请参阅muFuncSetAttribute

MU_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT 在L1缓存和共享内存使用相同硬件资源的设备上,这设置了共享内存划分偏好,占总共享内存的百分比。请参阅MU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR。 这只是一条提示,驱动程序如果需要执行函数,可以选择不同的比例。请参阅muFuncSetAttribute

MU_FUNC_ATTRIBUTE_MAX

MUfunc_cache_enum

enum MUfunc_cache_enum

函数缓存配置。

枚举值

MU_FUNC_CACHE_PREFER_NONE 对共享内存或L1无偏好(默认)

MU_FUNC_CACHE_PREFER_SHARED 偏好更大的共享内存和更小的L1缓存

MU_FUNC_CACHE_PREFER_L1 偏好更大的L1缓存和更小的共享内存

MU_FUNC_CACHE_PREFER_EQUAL 偏好等大小的L1缓存和共享内存

MUsharedconfig_enum

enum MUsharedconfig_enum

共享内存配置。

枚举值

MU_SHARED_MEM_CONFIG_DEFAULT_BANK_SIZE 设置默认共享内存银行大小

MU_SHARED_MEM_CONFIG_FOUR_BYTE_BANK_SIZE 将共享内存银行宽度设置为四个字节

MU_SHARED_MEM_CONFIG_EIGHT_BYTE_BANK_SIZE 将共享内存银行宽度设置为八个字节

MUshared_carveout_enum

enum MUshared_carveout_enum

共享内存划分配置。

这些可以传递给muFuncSetAttribute

枚举值

MU_SHAREDMEM_CARVEOUT_DEFAULT 对共享内存或L1无偏好(默认)

MU_SHAREDMEM_CARVEOUT_MAX_SHARED 偏好最大可用共享内存,最小L1缓存。

MU_SHAREDMEM_CARVEOUT_MAX_L1 偏好最大可用L1缓存,最小共享内存。

MUmemorytype_enum

`enum MUmemorytype_enum

内存类型。

枚举值

MU_MEMORYTYPE_HOST 主机内存。

MU_MEMORYTYPE_DEVICE 设备内存。

MU_MEMORYTYPE_ARRAY 数组内存。

MU_MEMORYTYPE_UNIFIED 统一的设备或主机内存。

MUcomputemode_enum

enum MUcomputemode_enum

计算模式。

枚举值

MU_COMPUTEMODE_DEFAULT 默认计算模式(每个设备允许多个上下文)

MU_COMPUTEMODE_PROHIBITED 计算禁止模式(此时在此设备上不能创建上下文)

MU_COMPUTEMODE_EXCLUSIVE_PROCESS 计算独占进程模式(只有一个上下文可以在此设备上使用)

MUmem_advise_enum

enum MUmem_advise_enum

内存建议值。

枚举值

MU_MEM_ADVISE_SET_READ_MOSTLY 数据将主要被读取,偶尔被写入。

MU_MEM_ADVISE_UNSET_READ_MOSTLY 撤销MU_MEM_ADVISE_SET_READ_MOSTLY的效果。

MU_MEM_ADVISE_SET_PREFERRED_LOCATION 将数据的首选位置设置为指定的设备。

MU_MEM_ADVISE_UNSET_PREFERRED_LOCATION 清除数据的首选位置。

MU_MEM_ADVISE_SET_ACCESSED_BY 数据将被指定的设备访问,因此尽可能防止页面错误。

MU_MEM_ADVISE_UNSET_ACCESSED_BY 让统一内存子系统决定指定设备的页面错误策略。

MUmem_range_attribute_enum

enum MUmem_range_attribute_enum

枚举值

MU_MEM_RANGE_ATTRIBUTE_READ_MOSTLY 范围是否将主要被读取,偶尔被写入。

MU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION 范围的首选位置。

MU_MEM_RANGE_ATTRIBUTE_ACCESSED_BY 内存范围已为指定设备设置了MU_MEM_ADVISE_SET_ACCESSED_BY。

MU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION 范围最后一次预取的位置。

MUjit_option_enum

enum MUjit_option_enum

在线编译器和链接器选项。

枚举值

MU_JIT_MAX_REGISTERS 线程可以使用的最大寄存器数量。 选项类型:无符号整数 适用范围:仅编译器

MU_JIT_THREADS_PER_BLOCK

IN:指定每个块的目标编译线程的最小数量

OUT:返回编译器实际目标的线程数量。这限制了编译器的资源利用(例如最大寄存器),以便给定数量的线程的块应该能够根据寄存器限制启动。注意,此选项目前不考虑其他资源限制,如共享内存利用。

不能与MU_JIT_TARGET结合使用。

选项类型:无符号整数

适用范围:仅编译器

MU_JIT_WALL_TIME 用编译器和链接器花费的总墙钟时间(毫秒)覆盖选项值

选项类型:浮点数

适用范围:编译器和链接器。

MU_JIT_INFO_LOG_BUFFER 指向用于打印任何信息性日志消息的缓冲区的指针(缓冲区大小通过选项MU_JIT_INFO_LOG_BUFFER_SIZE_BYTES指定)

选项类型:char∗

适用范围:编译器和链接器。

MU_JIT_INFO_LOG_BUFFER_SIZE_BYTES

IN:日志缓冲区大小,单位为字节。日志消息将限制在此大小(包括空终止符)

OUT:用消息填充的日志缓冲区数量

选项类型:无符号整数

适用范围:编译器和链接器

MU_JIT_ERROR_LOG_BUFFER 指向用于打印任何反映错误的日志消息的缓冲区的指针(缓冲区大小通过选项MU_JIT_ERROR_LOG_BUFFER_SIZE_BYTES指定) 选项类型:char∗ 适用范围:编译器和链接器。

MU_JIT_ERROR_LOG_BUFFER_SIZE_BYTES IN:日志缓冲区大小,单位为字节。日志消息将限制在此大小(包括空终止符) OUT:用消息填充的日志缓冲区数量 选项类型:无符号整数 适用范围:编译器和链接器

MU_JIT_OPTIMIZATION_LEVEL 应用于生成代码的优化级别(0 - 4),4为默认值和最高优化级别。 选项类型:无符号整数 适用范围:仅编译器

MU_JIT_TARGET_FROM_MUCONTEXT 不需要选项值。根据当前附加的上下文确定目标(默认) 选项类型:不需要选项值 适用范围:编译器和链接器

MU_JIT_TARGET 目标根据提供的MUjit_target选择。不能与MU_JIT_THREADS_PER_BLOCK结合使用。

选项类型:枚举类型MUjit_target的无符号整数

适用范围:编译器和链接器

MU_JIT_FALLBACK_STRATEGY 指定如果找不到匹配的mubin时的回退策略选择。选择基于提供的MUjit_fallback。此选项不能与cuLink∗APIs一起使用,因为链接器需要精确匹配。

选项类型:枚举类型MUjit_fallback的无符号整数

适用范围:仅编译器

MU_JIT_GENERATE_DEBUG_INFO 指定是否在输出中创建调试信息(-g)(0:false,默认值)

选项类型:整数

适用范围:编译器和链接器。

MU_JIT_LOG_VERBOSE 生成详细日志消息(0:false,默认值)

选项类型:整数

适用范围:编译器和链接器。

MU_JIT_GENERATE_LINE_INFO 生成行号信息(-lineinfo)(0:false,默认值)

选项类型:整数

适用范围:仅编译器。

MU_JIT_CACHE_MODE 指定是否显式启用缓存(-dlcm) 选择基于提供的MUjit_cacheMode_enum。

选项类型:枚举类型MUjit_cacheMode_enum的无符号整数

适用范围:仅编译器

MU_JIT_NEW_SM3X_OPT 下面的jit选项仅用于此版本的MUSA的内部目的。 MU_JIT_FAST_COMPILE

MU_JIT_GLOBAL_SYMBOL_NAMES 设备符号名称数组,将被重新定位到存储在MU_JIT_GLOBAL_SYMBOL_ADDRESSES中的相应主机地址。 必须包含MU_JIT_GLOBAL_SYMBOL_COUNT条目。 加载设备模块时,驱动程序将重新定位所有遇到的未解决符号 到主机地址。 只允许注册对应于未解决全局变量的符号。 在同一地址注册相同的设备符号是非法的。 选项类型:const char∗∗ 适用范围:动态链接器仅

MU_JIT_GLOBAL_SYMBOL_ADDRESSES

主机地址数组,将用于重新定位存储在MU_JIT_GLOBAL_SYMBOL_NAMES中的相应设备符号。 必须包含MU_JIT_GLOBAL_SYMBOL_COUNT条目。

选项类型:void∗∗

适用范围:动态链接器仅

MU_JIT_GLOBAL_SYMBOL_COUNT

MU_JIT_GLOBAL_SYMBOL_NAMESMU_JIT_GLOBAL_SYMBOL_ADDRESSES数组中的条目数量。

选项类型:无符号整数

适用范围:动态链接器仅

MU_JIT_LTO

为设备代码启用链接时优化(-dlto)(0:false,默认值)

选项类型:整数

适用范围:编译器和链接器。

MU_JIT_FTZ

控制单精度非规范值(-ftz)支持(0:false,默认值)。 1:将 非规范值刷新为零 0:保留非规范值

选项类型:整数

适用范围:指定MU_JIT_LTO的链接时优化

MU_JIT_PREC_DIV

控制单精度浮点除法和倒数(-prec-div)支持(1: true,默认值)。 1:启用IEEE最近模式 0:启用快速 近似模式

选项类型:整数

适用范围:指定MU_JIT_LTO的链接时优化

MU_JIT_PREC_SQRT

控制单精度浮点平方根(-prec-sqrt)支持(1:true, 默认值)。 1:启用IEEE最近模式 0:启用快速 近似模式

选项类型:整数

适用范围:指定MU_JIT_LTO的链接时优化

MU_JIT_FMA

启用/禁用将浮点乘法和加/减法收缩为浮点乘加(-fma)操作(1:启用,默认值;0:禁用)。

选项类型:整数

适用范围:指定MU_JIT_LTO的链接时优化

MU_JIT_NUM_OPTIONS

MUjit_target_enum

enum MUjit_target_enum

在线编译目标。

枚举值

MU_TARGET_COMPUTE_20 计算设备类别 2.0。

MU_TARGET_COMPUTE_21 计算设备类别 2.1。

MU_TARGET_COMPUTE_30 计算设备类别 3.0。

MU_TARGET_COMPUTE_32 计算设备类别 3.2。

MU_TARGET_COMPUTE_35 计算设备类别 3.5。

MU_TARGET_COMPUTE_37 计算设备类别 3.7。

MU_TARGET_COMPUTE_50 计算设备类别 5.0。

MU_TARGET_COMPUTE_52 计算设备类别 5.2。

MU_TARGET_COMPUTE_53 计算设备类别 5.3。

MU_TARGET_COMPUTE_60 计算设备类别 6.0。

MU_TARGET_COMPUTE_61 计算设备类别 6.1。

MU_TARGET_COMPUTE_62 计算设备类别 6.2。

MU_TARGET_COMPUTE_70 计算设备类别 7.0。

MU_TARGET_COMPUTE_72 计算设备类别 7.2。

MU_TARGET_COMPUTE_75 计算设备类别 7.5。

MU_TARGET_COMPUTE_80 计算设备类别 8.0。

MU_TARGET_COMPUTE_86 计算设备类别 8.6。

MUjit_fallback_enum

enum MUjit_fallback_enum Cubin匹配回退策略。

枚举值

MU_PREFER_PTX 如果没有找到确切的二进制匹配,则更倾向于编译PTX。 MU_PREFER_BINARY 如果没有找到确切的匹配,则更倾向于退回到兼容的二进制代码。

MUjit_cacheMode_enum

enum MUjit_cacheMode_enum

dlcm的缓存模式。

枚举值

MU_JIT_CACHE_OPTION_NONE 编译时未指定-dlcm标志。 MU_JIT_CACHE_OPTION_CG 编译时禁用L1缓存。 MU_JIT_CACHE_OPTION_CA 编译时启用L1缓存。

MUjitInputType_enum

enum MUjitInputType_enum

设备代码格式。

枚举值

MU_JIT_INPUT_MUBIN 编译的设备类特定设备代码 适用选项:无。

MU_JIT_INPUT_PTX PTX源代码 适用选项:PTX编译器选项。

MU_JIT_INPUT_FATBINARY 多个cubins和/或某些设备代码的PTX的捆绑 适用选项:PTX编译器选项,MU_JIT_FALLBACK_STRATEGY。

MU_JIT_INPUT_OBJECT 包含嵌入式设备代码的主机对象 适用选项:PTX编译器选项,MU_JIT_FALLBACK_STRATEGY。

MU_JIT_INPUT_LIBRARY 包含嵌入式设备代码的主机对象的存档 适用选项:PTX编译器选项,MU_JIT_FALLBACK_STRATEGY。

MU_JIT_INPUT_MTVM 高级中间代码用于链接时优化 适用选项:NVVM编译器选项,PTX编译器选项。

MU_JIT_NUM_INPUT_TYPES

MUgraphicsRegisterFlags_enum

enum MUgraphicsRegisterFlags_enum

注册图形资源的标志。

枚举值

MU_GRAPHICS_REGISTER_FLAGS_NONE MU_GRAPHICS_REGISTER_FLAGS_READ_ONLY MU_GRAPHICS_REGISTER_FLAGS_WRITE_DISCARD MU_GRAPHICS_REGISTER_FLAGS_SURFACE_LDST MU_GRAPHICS_REGISTER_FLAGS_TEXTURE_GATHER

MUgraphicsMapResourceFlags_enum

enum MUgraphicsMapResourceFlags_enum

映射和取消映射互操作资源的标志。

枚举值

MU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE MU_GRAPHICS_MAP_RESOURCE_FLAGS_READ_ONLY MU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITE_DISCARD

MUarray_cubemap_face_enum

enum MUarray_cubemap_face_enum

立方体贴图面的数组索引。

枚举值

MU_CUBEMAP_FACE_POSITIVE_X 立方体贴图的正X面。

MU_CUBEMAP_FACE_NEGATIVE_X 立方体贴图的负X面。

MU_CUBEMAP_FACE_POSITIVE_Y 立方体贴图的正Y面。

MU_CUBEMAP_FACE_NEGATIVE_Y 立方体贴图的负Y面。

MU_CUBEMAP_FACE_POSITIVE_Z 立方体贴图的正Z面。

MU_CUBEMAP_FACE_NEGATIVE_Z 立方体贴图的负Z面。

MUlimit_enum

enum MUlimit_enum

限制。

枚举值

MU_LIMIT_STACK_SIZE GPU线程栈大小。

MU_LIMIT_PRINTF_FIFO_SIZE GPU printf FIFO大小。

MU_LIMIT_MALLOC_HEAP_SIZE GPU malloc堆大小。

MU_LIMIT_DEV_RUNTIME_SYNC_DEPTH GPU设备运行时启动同步深度。

MU_LIMIT_DEV_RUNTIME_PENDING_LAUNCH_COUNT GPU设备运行时待处理启动计数。

MU_LIMIT_MAX_L2_FETCH_GRANULARITY 一个值在0和128之间,表示L2的最大获取粒度 (以字节为单位)。这是一个提示

MU_LIMIT_PERSISTING_L2_CACHE_SIZE L2持久行缓存大小的字节大小。 MU_LIMIT_MAX

MUresourcetype_enum

enum MUresourcetype_enum

资源类型。

枚举值

MU_RESOURCE_TYPE_ARRAY 数组资源。

MU_RESOURCE_TYPE_MIPMAPPED_ARRAY Mipmapped数组资源。

MU_RESOURCE_TYPE_LINEAR 线性资源。

MU_RESOURCE_TYPE_PITCH2D Pitch 2D资源。

MUaccessProperty_enum

enum MUaccessProperty_enum

指定MUaccessPolicyWindow的hitProp和missProp成员的性能提示。

枚举值

MU_ACCESS_PROPERTY_NORMAL 正常缓存持久性。 MU_ACCESS_PROPERTY_STREAMING 流式访问不太可能从缓存中持久。 MU_ACCESS_PROPERTY_PERSISTING 持久访问更有可能在缓存中持久。

MUgraphNodeType_enum

enum MUgraphNodeType_enum 图节点类型。

枚举值

MU_GRAPH_NODE_TYPE_KERNEL GPU内核节点。

MU_GRAPH_NODE_TYPE_MEMCPY Memcpy节点。

MU_GRAPH_NODE_TYPE_MEMSET Memset节点。

MU_GRAPH_NODE_TYPE_HOST 主机(可执行文件)节点。

MU_GRAPH_NODE_TYPE_GRAPH 执行嵌入式图的节点。

MU_GRAPH_NODE_TYPE_EMPTY 空(无操作)节点。

MU_GRAPH_NODE_TYPE_WAIT_EVENT 外部事件等待节点。

MU_GRAPH_NODE_TYPE_EVENT_RECORD 外部事件记录节点。

MU_GRAPH_NODE_TYPE_EXT_SEMAS_SIGNAL 外部信号量信号节点。

MU_GRAPH_NODE_TYPE_EXT_SEMAS_WAIT 外部信号量等待节点。

MU_GRAPH_NODE_TYPE_MEM_ALLOC 内存分配节点。

MU_GRAPH_NODE_TYPE_MEM_FREE 内存释放节点。

MU_GRAPH_NODE_TYPE_MEM_ATOMIC 内存原子节点。

MU_GRAPH_NODE_TYPE_MEM_ATOMIC_VALUE 内存原子值节点。

MU_GRAPH_NODE_TYPE_MEM_WAIT_WRITE 内存等待/写入节点。

MUsynchronizationPolicy_enum

enum MUsynchronizationPolicy_enum

枚举值

MU_SYNC_POLICY_AUTO MU_SYNC_POLICY_SPIN MU_SYNC_POLICY_YIELD MU_SYNC_POLICY_BLOCKING_SYNC

MUclusterSchedulingPolicy_enum

enum MUclusterSchedulingPolicy_enum

集群调度策略。

这些可以传递给muFuncSetAttribute或muKernelSetAttribute

枚举值

MU_CLUSTER_SCHEDULING_POLICY_DEFAULT 默认策略 MU_CLUSTER_SCHEDULING_POLICY_SPREAD 将块在集群内分散到SM上 MU_CLUSTER_SCHEDULING_POLICY_LOAD_BALANCING 允许硬件将集群中的块负载平衡到SM上

MUlaunchMemSyncDomain_enum

enum MUlaunchMemSyncDomain_enum

枚举值

MU_LAUNCH_MEM_SYNC_DOMAIN_DEFAULT MU_LAUNCH_MEM_SYNC_DOMAIN_REMOTE

MUlaunchAttributeID_enum

enum MUlaunchAttributeID_enum

枚举值

MU_LAUNCH_ATTRIBUTE_IGNORE 忽略条目,方便组合。 MU_LAUNCH_ATTRIBUTE_ACCESS_POLICY_WINDOW 适用于流、图节点、启动。 MU_LAUNCH_ATTRIBUTE_COOPERATIVE 适用于图节点、启动。 MU_LAUNCH_ATTRIBUTE_SYNCHRONIZATION_POLICY 适用于流。 MU_LAUNCH_ATTRIBUTE_CLUSTER_DIMENSION 适用于图节点、启动。 MU_LAUNCH_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE 适用于图节点、启动。

MU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_STREAM_SERIALIZATION 适用于启动。设置 programmaticStreamSerializationAllowed为非0表示内核将使用程序化方式解决其流依赖性,以便MUSA运行时应该在流中的前一个内核请求重叠时,有机会地允许网格的执行与流中的前一个内核重叠。依赖性启动可以选择使用程序化同步(musaGridDependencySynchronize()或等效PTX指令)等待依赖性。

MU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_EVENT 适用于启动。通过此启动属性记录的事件保证只有在关联内核的所有块触发事件后才触发。一个块可以通过PTX launchdep.release或MUSA内置函数 musaTriggerProgrammaticLaunchCompletion()触发事件。如果将triggerAtBlockStart设置为非0,则还可以在每个块的执行开始时插入触发器。依赖性启动可以选择使用程序化同步(musaGridDependencySynchronize()或等效PTX 指令)等待依赖性。请注意,依赖性(包括调用muEventSynchronize()的CPU线程)不能保证在释放时精确观察到释放。例如, muEventSynchronize()可能在关联内核完成后很长时间才观察到事件触发。这种记录类型主要用于建立设备任务之间的程序化依赖性。提供的事件不能是进程间或互操作事件。事件必须禁用计时(即。 用MU_EVENT_DISABLE_TIMING标志创建)。

MU_LAUNCH_ATTRIBUTE_PRIORITY 适用于流、图节点、启动。

MU_LAUNCH_ATTRIBUTE_MEM_SYNC_DOMAIN_MAP MU_LAUNCH_ATTRIBUTE_MEM_SYNC_DOMAIN

MUkernelNodeAttrID_enum

enum MUkernelNodeAttrID_enum

图内核节点属性。

枚举值

MU_KERNEL_NODE_ATTRIBUTE_ACCESS_POLICY_WINDOW MUkernelNodeAttrValueaccessPolicyWindow的标识符。 MU_KERNEL_NODE_ATTRIBUTE_COOPERATIVE 允许内核节点是合作的(见 muLaunchCooperativeKernel)。

MUstreamCaptureStatus_enum

enum MUstreamCaptureStatus_enum

muStreamIsCapturing返回的可能的流捕获状态。

枚举值

MU_STREAM_CAPTURE_STATUS_NONE 流未捕获。

MU_STREAM_CAPTURE_STATUS_ACTIVE 流正在积极捕获。

MU_STREAM_CAPTURE_STATUS_INVALIDATED 流是捕获序列的一部分,该序列已无效,但尚未终止。

MUstreamCaptureMode_enum

enum MUstreamCaptureMode_enum

流捕获线程交互的可能模式。

有关详细信息,请参见muStreamBeginCapture和muThreadExchangeStreamCaptureMode

枚举值

MU_STREAM_CAPTURE_MODE_GLOBAL

MU_STREAM_CAPTURE_MODE_THREAD_LOCAL

MU_STREAM_CAPTURE_MODE_RELAXED

MUstreamAttrID_enum

enum MUstreamAttrID_enum

流属性。

枚举值

MU_STREAM_ATTRIBUTE_ACCESS_POLICY_WINDOW MUstreamAttrValueaccessPolicyWindow的标识符。

MU_STREAM_ATTRIBUTE_SYNCHRONIZATION_POLICY 在此流中排队的工作的MUsynchronizationPolicy

MUdriverProcAddress_flags_enum

enum MUdriverProcAddress_flags_enum

指定搜索选项的标志。

有关详细信息,请参见muGetProcAddress

枚举值

MU_GET_PROC_ADDRESS_DEFAULT 驱动程序符号的默认搜索模式。

MU_GET_PROC_ADDRESS_LEGACY_STREAM 搜索驱动程序符号的旧版本。

MU_GET_PROC_ADDRESS_PER_THREAD_DEFAULT_STREAM 搜索驱动程序符号的每个线程版本。

MUexecAffinityType_enum

enum MUexecAffinityType_enum

执行亲和类型。

枚举值

MU_EXEC_AFFINITY_TYPE_SM_COUNT 创建具有有限SM的上下文。

MU_EXEC_AFFINITY_TYPE_MAX

musaError_enum

enum musaError_enum

错误代码。

枚举值

MUSA_SUCCESS API调用返回没有错误。在查询调用的情况下,这也意味着被查询的操作已完成(见 muEventQuery()和muStreamQuery())。

MUSA_ERROR_INVALID_VALUE 这表明传递给API调用的一个或多个参数不在可接受的值范围内。

MUSA_ERROR_OUT_OF_MEMORY API调用失败,因为它无法分配足够的内存来执行请求的操作。

MUSA_ERROR_NOT_INITIALIZED 这表明MUSA驱动程序尚未用muInit()初始化,或者初始化失败。

MUSA_ERROR_DEINITIALIZED 这表明MUSA驱动程序正在关闭过程中。

MUSA_ERROR_PROFILER_DISABLED 这表明分析器在此运行中未初始化。当应用程序使用visual profiler等外部分析工具运行时,可能会发生这种情况。

枚举值

MUSA_ERROR_PROFILER_NOT_INITIALIZED 弃用 此错误返回在MUSA 5.0中被弃用。尝试通过muProfilerStart或muProfilerStop启用/禁用分析 没有初始化不再是错误。

MUSA_ERROR_PROFILER_ALREADY_STARTED 弃用 此错误返回在MUSA 5.0中被弃用。当分析已经启用时调用muProfilerStart()不再是错误。

MUSA_ERROR_PROFILER_ALREADY_STOPPED 弃用 此错误返回在MUSA 5.0中被弃用。当分析已经禁用时调用muProfilerStop()不再是错误。

MUSA_ERROR_STUB_LIBRARY 这表明应用程序加载的MUSA驱动程序是存根库。与存根而不是真实驱动程序一起运行的应用程序将导致MUSA API返回此错误。 MUSA_ERROR_NO_DEVICE 这表明安装的MUSA驱动程序未检测到任何MUSA兼容设备。

MUSA_ERROR_INVALID_DEVICE 这表明用户提供的设备序数不对应有效的MUSA设备,或者请求的操作对指定设备无效。

MUSA_ERROR_DEVICE_NOT_LICENSED 此错误表明Grid许可证未应用。 MUSA_ERROR_INVALID_IMAGE 这表明设备内核映像无效。这也可能表示MUSA模块无效。

MUSA_ERROR_INVALID_CONTEXT 最常见的是指示当前线程没有上下文绑定。如果传递给API调用的上下文不是有效句柄(例如,已经对它调用了 muCtxDestroy()的上下文),也可能返回此值。如果用户混合使用不同版本的API(即3010上下文与3020 API调用),也可能返回此值。有关更多详细信息,请参阅 muCtxGetApiVersion()。 MUSA_ERROR_CONTEXT_ALREADY_CURRENT 这表明作为参数传递给API调用的上下文已经是活动上下文。 弃用 此错误返回在MUSA 3.2中被弃用。尝试通过 muCtxPushCurrent()推送活动上下文不再是错误。

MUSA_ERROR_MAP_FAILED 这表明映射或注册操作失败。

MUSA_ERROR_UNMAP_FAILED 这表明取消映射或注销操作失败。

MUSA_ERROR_ARRAY_IS_MAPPED 这表明指定的数组当前已映射,因此不能销毁。

MUSA_ERROR_ALREADY_MAPPED 这表明资源已经映射。

MUSA_ERROR_NO_BINARY_FOR_GPU 这表明没有适合设备的核心映像可用。当用户为特定MUSA源文件指定代码生成 选项时,如果没有包含相应的设备配置,可能会发生这种情况。

MUSA_ERROR_ALREADY_ACQUIRED 这表明资源已经被获取。

MUSA_ERROR_NOT_MAPPED 这表明资源未映射。

MUSA_ERROR_NOT_MAPPED_AS_ARRAY 这表明映射的资源不可用作数组访问。

MUSA_ERROR_NOT_MAPPED_AS_POINTER 这表明映射的资源不可用作指针访问。

MUSA_ERROR_ECC_UNCORRECTABLE 这表明在执行过程中检测到无法纠正的ECC错误。

MUSA_ERROR_UNSUPPORTED_LIMIT 这表明传递给API调用的MUlimit不受活动设备支持。

MUSA_ERROR_CONTEXT_ALREADY_IN_USE 这表明传递给API调用的MUcontext一次只能绑定到单个CPU线程,但已经绑定到CPU线程。

MUSA_ERROR_PEER_ACCESS_UNSUPPORTED 这表明对给定设备不支持对等访问。

MUSA_ERROR_INVALID_PTX 这表明PTX JIT编译失败。

MUSA_ERROR_INVALID_GRAPHICS_CONTEXT 这表明OpenGL或DirectX上下文有错误。

枚举值

MUSA_ERROR_MTLINK_UNCORRECTABLE 这表明在执行过程中检测到无法纠正的NVLink错误。

MUSA_ERROR_JIT_COMPILER_NOT_FOUND 这表明未找到PTX JIT编译器库。

MUSA_ERROR_UNSUPPORTED_PTX_VERSION 这表明提供的PTX是用不受支持的工具链编译的。

MUSA_ERROR_JIT_COMPILATION_DISABLED 这表明PTX JIT编译被禁用。

MUSA_ERROR_UNSUPPORTED_EXEC_AFFINITY 这表明传递给API调用的MUexecAffinityType不受活动设备支持。

MUSA_ERROR_INVALID_SOURCE 这表明设备内核源无效。

MUSA_ERROR_FILE_NOT_FOUND 这表明未找到指定的文件。

MUSA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND 这表明链接到共享对象失败,无法解析。

MUSA_ERROR_SHARED_OBJECT_INIT_FAILED 这表明共享对象初始化失败。

MUSA_ERROR_OPERATING_SYSTEM 这表明OS调用失败。

MUSA_ERROR_INVALID_HANDLE 这表明传递给API调用的资源句柄无效。资源句柄是像MUstream和MUevent这样的不透明类型。

MUSA_ERROR_ILLEGAL_STATE 这表明API调用所需的资源不在执行请求操作的有效状态。

MUSA_ERROR_NOT_FOUND 这表明未找到命名符号。符号的例子包括全局/常量变量名称、驱动程序函数名称、纹理名称和表面名称。

MUSA_ERROR_NOT_READY 这表明之前发出的异步操作尚未完成。这个结果实际上不是错误,但必须与MUSA_SUCCESS(表示完成)不同地表示。可能返回此值的调用包括muEventQuery()和 muStreamQuery()。

MUSA_ERROR_ILLEGAL_ADDRESS 在执行内核时,设备遇到了一个无效的内存地址上的加载或存储指令。这使得进程处于不一致状态,任何进一步的MUSA工作都将返回相同的错误。要继续使用MUSA,进程必须被终止和重新启动。

MUSA_ERROR_LAUNCH_OUT_OF_RESOURCES 这表明启动没有发生,因为它没有适当的资源。这个错误通常表明用户试图传递太多参数给设备内核,或者内核启动指定了太多的线程以供内核的寄存器计数。传递错误大小的参数(即。当期望32位整数时传递64位指针)等同于传递太多参数,也可能导致此错误。

MUSA_ERROR_LAUNCH_TIMEOUT 这表明设备内核执行时间过长。这只能发生在启用了超时的情况下 - 有关更多信息,请参阅设备属性 MU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT。这使得进程处于不一致状态,任何进一步的MUSA工作都将返回相同的错误。要继续使用MUSA,进程必须被终止和重新启动。 MUSA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING 此错误表明使用不兼容的纹理模式启动内核。

MUSA_ERROR_PEER_ACCESS_ALREADY_ENABLED 此错误表明调用muCtxEnablePeerAccess()试图重新启用对已经启用对等访问的上下文的对等访问。

MUSA_ERROR_PEER_ACCESS_NOT_ENABLED 此错误表明muCtxDisablePeerAccess()试图禁用尚未通过 muCtxEnablePeerAccess()启用的对等访问。

MUSA_ERROR_PRIMARY_CONTEXT_ACTIVE 此错误表明指定设备的主上下文已经被初始化。

MUSA_ERROR_CONTEXT_IS_DESTROYED 此错误表明当前调用线程的上下文已经被销毁使用muCtxDestroy,或者是一个尚未初始化的主上下文。

MUSA_ERROR_ASSERT 在内核执行期间触发了设备端断言。上下文不能再被使用,必须被销毁。从这个上下文分配的所有现有设备内存都是无效的,如果程序要继续使用MUSA,必须重建。 MUSA_ERROR_TOO_MANY_PEERS 此错误表明,启用对等访问所需的硬件资源已经被传递给muCtxEnablePeerAccess()的一个或多个设备耗尽。

MUSA_ERROR_HOST_MEMORY_ALREADY_REGISTERED 此错误表明传递给 muMemHostRegister()的内存范围已经被注册。 MUSA_ERROR_HOST_MEMORY_NOT_REGISTERED 此错误表明传递给muMemHostUnregister()的指针不对应任何当前注册的内存区域。 MUSA_ERROR_HARDWARE_STACK_ERROR 在执行内核时,设备遇到了一个栈错误。这可能是由于栈损坏或超出栈大小限制。这使得进程处于不一致状态,任何进一步的MUSA工作都将返回相同的错误。要继续使用MUSA,进程必须被终止和重新启动。

MUSA_ERROR_ILLEGAL_INSTRUCTION 在执行内核时,设备遇到了一个非法指令。这使得进程处于不一致状态,任何进一步的MUSA 工作都将返回相同的错误。要继续使用MUSA,进程必须被终止和重新启动。

MUSA_ERROR_MISALIGNED_ADDRESS 在执行内核时,设备遇到了一个未对齐的内存地址上的加载或存储指令。这使得进程处于不一致状态,任何进一步的MUSA工作都将返回相同的错误。要继续使用MUSA,进程必须被终止和重新启动。

MUSA_ERROR_INVALID_ADDRESS_SPACE 在执行内核时,设备遇到了一个只能对某些地址空间(全局、共享或局部)中的内存位置操作的指令,但提供了一个不属于允许地址空间的内存地址。这使得进程处于不一致状态,任何进一步的MUSA工作都将返回相同的错误。要继续使用MUSA,进程必须被终止和重新启动。

MUSA_ERROR_INVALID_PC 在执行内核时,设备程序计数器包裹了其地址空间。这使得进程处于不一致状态,任何进一步的MUSA工作都将返回相同的错误。要继续使用MUSA,进程必须被终止和重新启动。

MUSA_ERROR_LAUNCH_FAILED 在执行内核时,设备上发生了异常。常见原因包括解引用无效的设备指针和访问超出范围的共享内存。较少见的情况可能是系统特定的 - 有关这些情况的更多信息可以在系统特定用户指南中找到。这使得进程处于不一致状态,任何进一步的MUSA工作都将返回相同的错误。要继续使用MUSA,进程必须被终止和重新启动。

MUSA_ERROR_COOPERATIVE_LAUNCH_TOO_LARGE 此错误表明,通过muLaunchCooperativeKernel或 muLaunchCooperativeKernelMultiDevice启动的内核每个网格的块数超过了 muOccupancyMaxActiveBlocksPerMultiprocessor或 muOccupancyMaxActiveBlocksPerMultiprocessorWithFlags乘以设备属性 MU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT指定的多处理器数量所允许的最大块数。

MUSA_ERROR_NOT_PERMITTED 此错误表明尝试的操作不允许。

MUSA_ERROR_NOT_SUPPORTED 此错误表明尝试的操作在当前系统或设备上不受支持。

MUSA_ERROR_SYSTEM_NOT_READY 此错误表明系统尚未准备好开始任何MUSA工作。要继续使用MUSA,验证系统配置处于有效状态,并且所有所需的驱动程序守护进程都在积极运行。有关此错误的更多信息可以在系统特定用户指南中找到。

MUSA_ERROR_SYSTEM_DRIVER_MISMATCH 此错误表明显示驱动程序和MUSA驱动程序的版本之间存在不匹配。请参阅兼容性文档以获取支持的版本。 MUSA_ERROR_COMPAT_NOT_SUPPORTED_ON_DEVICE 此错误表明系统已升级为向前兼容,但MUSA检测到的可见硬件不支持此配置。请参阅兼容性文档以获取支持的硬件矩阵,或确保在初始化期间只有支持的硬件可见,通过MUSA_VISIBLE_DEVICES环境变量。

MUSA_ERROR_MPS_CONNECTION_FAILED 此错误表明MPS客户端未能连接到MPS控制守护进程或MPS服务器。 MUSA_ERROR_MPS_RPC_FAILURE 此错误表明MPS服务器和MPS客户端之间的远程过程调用失败。

枚举值

MUSA_ERROR_MPS_SERVER_NOT_READY 此错误表明MPS服务器尚未准备好接受新的MPS客户端请求。当MPS服务器 正在从严重故障中恢复时,可能会返回此错误。 MUSA_ERROR_MPS_MAX_CLIENTS_REACHED 此错误表明创建MPS客户端所需的硬件资源已被耗尽。 MUSA_ERROR_MPS_MAX_CONNECTIONS_REACHED 此错误表明支持设备连接所需的硬件资源已被耗尽。 MUSA_ERROR_STREAM_CAPTURE_UNSUPPORTED 此错误表明当流正在捕获时,不允许操作。 MUSA_ERROR_STREAM_CAPTURE_INVALIDATED 此错误表明由于先前的错误,流上的当前捕获序列已无效。 MUSA_ERROR_STREAM_CAPTURE_MERGE 此错误表明操作将导致两个独立的捕获序列合并。 MUSA_ERROR_STREAM_CAPTURE_UNMATCHED 此错误表明捕获在此流中未启动。 MUSA_ERROR_STREAM_CAPTURE_UNJOINED 此错误表明捕获序列包含一个未加入到主流的分支。 MUSA_ERROR_STREAM_CAPTURE_ISOLATION 此错误表明将创建一个将跨越捕获序列边界的依赖性。只允许隐式流内 排序依赖性跨越边界。 MUSA_ERROR_STREAM_CAPTURE_IMPLICIT 此错误表明不允许对当前捕获序列的隐式依赖性来自musaStreamLegacy。 MUSA_ERROR_CAPTURED_EVENT 此错误表明不允许在捕获流中最后记录的事件上进行操作。 MUSA_ERROR_STREAM_CAPTURE_WRONG_THREAD 流捕获序列未用 MU_STREAM_CAPTURE_MODE_RELAXED参数启动 muStreamBeginCapture被传递到muStreamEndCapture的不同线程。 MUSA_ERROR_TIMEOUT 此错误表明等待操作指定的超时已过。 MUSA_ERROR_GRAPH_EXEC_UPDATE_FAILURE 此错误表明图更新未执行,因为它包括违反特定于实例化的图更新的约束的更改。 MUSA_ERROR_EXTERNAL_DEVICE 这表明在MUSA之外的设备中发生了异步错误。如果MUSA在等待外部设备信号以 消费共享数据,外部设备发出错误信号表明数据无效,无法消费。这使得进程处于不一致状态,任何进一步的MUSA工作都将返回相同的 错误。要继续使用MUSA,进程必须被终止和重新启动。 MUSA_ERROR_INVALID_CLUSTER_SIZE 表示由于群集配置错误导致的内核启动错误。 MUSA_ERROR_UNKNOWN 这表明发生了未知的内部错误。

MUdevice_P2PAttribute_enum

enum MUdevice_P2PAttribute_enum

点对点(P2P)属性。

枚举值

MU_DEVICE_P2P_ATTRIBUTE_PERFORMANCE_RANK 表示两个设备之间链路性能的相对值。 MU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED 支持点对点访问。 MU_DEVICE_P2P_ATTRIBUTE_NATIVE_ATOMIC_SUPPORTED 支持链路上的原子操作。 MU_DEVICE_P2P_ATTRIBUTE_ACCESS_ACCESS_←- SUPPORTED 已弃用,请使用 MU_DEVICE_P2P_ATTRIBUTE_MUSA_←- ARRAY_ACCESS_SUPPORTED 代替

MU_DEVICE_P2P_ATTRIBUTE_MUSA_ARRAY_ACCESS_←- SUPPORTED

支持通过链路访问 MUSA 数组。

MU_DEVICE_P2P_ATTRIBUTE_MTLINK_PORT_COUNT 如果通过 MTLink 传输,表示 MTlink 端口计数。

MUresourceViewFormat_enum

enum MUresourceViewFormat_enum

资源视图格式。

枚举值

MU_RES_VIEW_FORMAT_NONE 无资源视图格式(使用底层资源格式)

MU_RES_VIEW_FORMAT_UINT_1X8 1通道无符号8位整数

MU_RES_VIEW_FORMAT_UINT_2X8 2通道无符号8位整数

MU_RES_VIEW_FORMAT_UINT_4X8 4通道无符号8位整数

MU_RES_VIEW_FORMAT_SINT_1X8 1通道有符号8位整数

MU_RES_VIEW_FORMAT_SINT_2X8 2通道有符号8位整数

MU_RES_VIEW_FORMAT_SINT_4X8 4通道有符号8位整数

MU_RES_VIEW_FORMAT_UINT_1X16 1通道无符号16位整数

MU_RES_VIEW_FORMAT_UINT_2X16 2通道无符号16位整数

MU_RES_VIEW_FORMAT_UINT_4X16 4通道无符号16位整数

MU_RES_VIEW_FORMAT_SINT_1X16 1通道有符号16位整数

MU_RES_VIEW_FORMAT_SINT_2X16 2通道有符号16位整数

MU_RES_VIEW_FORMAT_SINT_4X16 4通道有符号16位整数

MU_RES_VIEW_FORMAT_UINT_1X32 1通道无符号32位整数

MU_RES_VIEW_FORMAT_UINT_2X32 2通道无符号32位整数

MU_RES_VIEW_FORMAT_UINT_4X32 4通道无符号32位整数

MU_RES_VIEW_FORMAT_SINT_1X32 1通道有符号32位整数

MU_RES_VIEW_FORMAT_SINT_2X32 2通道有符号32位整数

MU_RES_VIEW_FORMAT_SINT_4X32 4通道有符号32位整数

MU_RES_VIEW_FORMAT_FLOAT_1X16 1通道16位浮点数

MU_RES_VIEW_FORMAT_FLOAT_2X16 2通道16位浮点数

MU_RES_VIEW_FORMAT_FLOAT_4X16 4通道16位浮点数

MU_RES_VIEW_FORMAT_FLOAT_1X32 1通道32位浮点数

MU_RES_VIEW_FORMAT_FLOAT_2X32 2通道32位浮点数

MU_RES_VIEW_FORMAT_FLOAT_4X32 4通道32位浮点数

MU_RES_VIEW_FORMAT_UNSIGNED_BC1 块压缩1。

MU_RES_VIEW_FORMAT_UNSIGNED_BC2 块压缩2。

MU_RES_VIEW_FORMAT_UNSIGNED_BC3 块压缩3。

MU_RES_VIEW_FORMAT_UNSIGNED_BC4 块压缩4无符号。

MU_RES_VIEW_FORMAT_SIGNED_BC4 块压缩4有符号。

MU_RES_VIEW_FORMAT_UNSIGNED_BC5 块压缩5无符号。

MU_RES_VIEW_FORMAT_SIGNED_BC5 块压缩5有符号。

MU_RES_VIEW_FORMAT_UNSIGNED_BC6H 块压缩6无符号半浮点。

MU_RES_VIEW_FORMAT_SIGNED_BC6H 块压缩6有符号半浮点。

MU_RES_VIEW_FORMAT_UNSIGNED_BC7 块压缩7。

MUtensorDescriptorDataType_enum

enum MUtensorDescriptorDataType_enum

张量映射数据类型。

枚举值

MU_TENSOR_DESCRIPTOR_DATA_TYPE_INT8

MU_TENSOR_DESCRIPTOR_DATA_TYPE_UINT8

MU_TENSOR_DESCRIPTOR_DATA_TYPE_INT16

MU_TENSOR_DESCRIPTOR_DATA_TYPE_UINT16

MU_TENSOR_DESCRIPTOR_DATA_TYPE_FLOAT16

MU_TENSOR_DESCRIPTOR_DATA_TYPE_BFLOAT16

MU_TENSOR_DESCRIPTOR_DATA_TYPE_INT32

MU_TENSOR_DESCRIPTOR_DATA_TYPE_UINT32

MU_TENSOR_DESCRIPTOR_DATA_TYPE_FLOAT32

MU_TENSOR_DESCRIPTOR_DATA_TYPE_TFLOAT32

MU_TENSOR_DESCRIPTOR_DATA_TYPE_INT64

MU_TENSOR_DESCRIPTOR_DATA_TYPE_UINT64

MU_TENSOR_DESCRIPTOR_DATA_TYPE_FLOAT64

MU_TENSOR_DESCRIPTOR_DATA_TYPE_FLOAT32_FTZ

MU_TENSOR_DESCRIPTOR_DATA_TYPE_TFLOAT32_FTZ

MU_TENSOR_DESCRIPTOR_DATA_TYPE_FLOAT32_TFLOAT32_RNE

MU_TENSOR_DESCRIPTOR_DATA_TYPE_FLOAT32_FTZ_TFLOAT32_RNE

MUtensorDescriptorInterleave_enum

enum MUtensorDescriptorInterleave_enum

张量映射交错布局类型。

枚举值

MU_TENSOR_DESCRIPTOR_INTERLEAVE_NONE

MU_TENSOR_DESCRIPTOR_INTERLEAVE_16B

MU_TENSOR_DESCRIPTOR_INTERLEAVE_32B

MU_TENSOR_DESCRIPTOR_INTERLEAVE_64B

MU_TENSOR_DESCRIPTOR_INTERLEAVE_128B

MU_TENSOR_DESCRIPTOR_INTERLEAVE_256B

MUSA_POINTER_ATTRIBUTE_ACCESS_FLAGS_enum

enum MUSA_POINTER_ATTRIBUTE_ACCESS_FLAGS_enum

访问标志,指定当前上下文的设备对引用的内存的访问级别。

枚举值

MU_POINTER_ATTRIBUTE_ACCESS_FLAG_NONE 无访问权限,意味着设备完全不能访问此内存,因此 必须通过可访问的内存来完成某些 操作。 MU_POINTER_ATTRIBUTE_ACCESS_FLAG_READ 只读访问,意味着对此内存的写入被视为无效 访问并在这种情况下返回错误。 MU_POINTER_ATTRIBUTE_ACCESS_FLAG_READWRITE 读写访问,设备对内存具有完全的读写访问权限。

MUexternalMemoryHandleType_enum

enum MUexternalMemoryHandleType_enum

外部内存句柄类型。

枚举值

MU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD 句柄是一个不透明的文件描述符。

MU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32 句柄是一个不透明的共享 NT 句柄。

MU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT 句柄是一个不透明、全局共享的句柄。

MU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP 句柄是一个 D3D12 堆对象。

MU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE 句柄是一个 D3D12 提交的资源。

MU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE 句柄是一个共享 NT 句柄到 D3D11 资源。

MU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE_KMT 句柄是一个全局共享的句柄到 D3D11 资源。

MU_EXTERNAL_MEMORY_HANDLE_TYPE_MTSCIBUF 句柄是一个 NvSciBuf 对象。

MUexternalSemaphoreHandleType_enum

enum MUexternalSemaphoreHandleType_enum

外部信号量句柄类型。

枚举值

MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD 句柄是一个不透明的文件描述符。

MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32 句柄是一个不透明的共享 NT 句柄。

MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT 句柄是一个不透明、全局共享的句柄。

MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE 句柄是一个共享 NT 句柄,引用一个 D3D12 信号量对象。

MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE 句柄是一个共享 NT 句柄,引用一个 D3D11 信号量对象。

MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_MTSCISYNC 不透明句柄到 NvSciSync 对象。

MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX 句柄是一个共享 NT 句柄,引用一个 D3D11 键控互斥体 对象。

MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT 句柄是一个全局共享的句柄,引用一个 D3D11 键控 互斥体对象。

MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD 句柄是一个不透明的文件描述符,引用一个时间线 信号量。 MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32 句柄是一个不透明的共享 NT 句柄,引用一个时间线 信号量。

MUmemAllocationHandleType_enum

enum MUmemAllocationHandleType_enum

指定特定句柄类型的标记。

枚举器

MU_MEM_HANDLE_TYPE_NONE 不允许任何导出机制。

MU_MEM_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR 允许用于导出的文件描述符。仅在 POSIX
系统上允许。(int)

MU_MEM_HANDLE_TYPE_WIN32 允许用于导出的 Win32 NT 句柄。(HANDLE)

MU_MEM_HANDLE_TYPE_WIN32_KMT 允许用于导出的 Win32 KMT 句柄。(D3DKMT_HANDLE)

MU_MEM_HANDLE_TYPE_MAX

MUmemAccess_flags_enum

enum MUmemAccess_flags_enum

指定映射的内存保护标记。

枚举器

MU_MEM_ACCESS_FLAGS_PROT_NONE 默认值,使地址范围不可访问。
MU_MEM_ACCESS_FLAGS_PROT_READ 使地址范围可读。
MU_MEM_ACCESS_FLAGS_PROT_READWRITE 使地址范围可读写。
MU_MEM_ACCESS_FLAGS_PROT_MAX

MUmemLocationType_enum

enum MUmemLocationType_enum

指定位置的类型。

枚举器

MU_MEM_LOCATION_TYPE_INVALID
MU_MEM_LOCATION_TYPE_DEVICE 位置是设备位置,因此 id 是设备序数。
MU_MEM_LOCATION_TYPE_MAX

MUmemAllocationType_enum

enum MUmemAllocationType_enum

定义可用的分配类型。

枚举器

MU_MEM_ALLOCATION_TYPE_INVALID
MU_MEM_ALLOCATION_TYPE_PINNED 这种分配类型是“固定”的,即在应用程序积极使用它时不能从当前位置迁移
MU_MEM_ALLOCATION_TYPE_MAX

MUmemAllocationGranularity_flags_enum

enum MUmemAllocationGranularity_flags_enum

请求分配的不同最佳和必需粒度的标记。

枚举器

MU_MEM_ALLOC_GRANULARITY_MINIMUM 分配所需的最小粒度。
MU_MEM_ALLOC_GRANULARITY_RECOMMENDED 为最佳性能推荐的分配粒度。

MUarraySparseSubresourceType_enum

enum MUarraySparseSubresourceType_enum

稀疏子资源类型。

枚举器

MU_ARRAY_SPARSE_SUBRESOURCE_TYPE_SPARSE_LEVEL
MU_ARRAY_SPARSE_SUBRESOURCE_TYPE_MIPTAIL

MUmemOperationType_enum

enum MUmemOperationType_enum

内存操作类型。

枚举器

MU_MEM_OPERATION_TYPE_MAP
MU_MEM_OPERATION_TYPE_UNMAP

MUmemHandleType_enum

enum MUmemHandleType_enum

内存句柄类型。

枚举器

MU_MEM_HANDLE_TYPE_GENERIC

MUmemAllocationCompType_enum

enum MUmemAllocationCompType_enum

指定分配的压缩属性。

枚举器

MU_MEM_ALLOCATION_COMP_NONE 分配非可压缩内存。
MU_MEM_ALLOCATION_COMP_GENERIC 分配可压缩内存。

MUgraphExecUpdateResult_enum

enum MUgraphExecUpdateResult_enum

枚举器

MU_GRAPH_EXEC_UPDATE_SUCCESS

更新成功。

MU_GRAPH_EXEC_UPDATE_ERROR

由于一个未预期的原因更新失败,这个原因在
函数的返回值中描述。

MU_GRAPH_EXEC_UPDATE_ERROR_TOPOLOGY_CHANGED

因为拓扑结构改变导致更新失败。

MU_GRAPH_EXEC_UPDATE_ERROR_NODE_TYPE_CHANGED

因为节点类型改变导致更新失败。

MU_GRAPH_EXEC_UPDATE_ERROR_FUNCTION_CHANGED

因为内核节点的函数改变导致更新失败
(`MUSA driver\<11.2`)
MU_GRAPH_EXEC_UPDATE_ERROR_PARAMETERS_CHANGED

因为参数以不支持的方式改变导致更新失败。
MU_GRAPH_EXEC_UPDATE_ERROR_NOT_SUPPORTED

因为节点的某些特性不支持导致更新失败。
MU_GRAPH_EXEC_UPDATE_ERROR_UNSUPPORTED_FUNCTION_CHANGE

因为内核节点的函数以不支持的方式改变导致更新失败。

MUmemPool_attribute_enum

enum MUmemPool_attribute_enum

MUSA 内存池属性。

枚举器

属性名称值类型描述默认值
MU_MEMPOOL_ATTR_REUSE_FOLLOW_EVENT_DEPENDENCIESint允许 muMemAllocAsync 异步使用在另一个流中释放的内存,只要分配流对释放操作存在流排序依赖关系。启用
MU_MEMPOOL_ATTR_REUSE_ALLOW_OPPORTUNISTICint允许重用已经完成释放的操作,当释放和分配之间没有依赖关系时。启用
MU_MEMPOOL_ATTR_REUSE_ALLOW_INTERNAL_DEPENDENCIESint允许 muMemAllocAsync 插入新的流依赖关系,以建立重用 cuFreeAsync 释放的内存所需的流排序。启用
MU_MEMPOOL_ATTR_RELEASE_THRESHOLDmuuint64_t保留内存的字节数,在尝试将内存释放回操作系统之前。当持有超过释放阈值字节时,分配器尝试将内存释放回操作系统。0
MU_MEMPOOL_ATTR_RESERVED_MEM_CURRENTmuuint64_t当前为 mempool 分配的后备内存量。N/A
MU_MEMPOOL_ATTR_RESERVED_MEM_HIGHmuuint64_t自上次重置以来为 mempool 分配的后备内存量的最高水位。只能重置为零。N/A
MU_MEMPOOL_ATTR_USED_MEM_CURRENTmuuint64_t当前由应用程序使用的来自池的内存量。N/A
MU_MEMPOOL_ATTR_USED_MEM_HIGHmuuint64_t自上次重置以来由应用程序使用的来自池的内存量的最高水位。只能重置为零。N/A

MUgraphMem_attribute_enum

enum MUgraphMem_attribute_enum

枚举器

MU_GRAPH_MEM_ATTR_USED_MEM_CURRENT (值类型 = muuint64_t) 当前与图关联的内存量
MU_GRAPH_MEM_ATTR_USED_MEM_HIGH (值类型 = muuint64_t) 自上次重置以来与图关联的内存量的最高水位。最高水位只能
重置为零。
MU_GRAPH_MEM_ATTR_RESERVED_MEM_CURRENT (值类型 = muuint64_t) 当前为 MUSA 图异步分配器分配的内存量。
MU_GRAPH_MEM_ATTR_RESERVED_MEM_HIGH (值类型 = muuint64_t) 当前为 MUSA 图异步分配器分配的内存量的最高水位。

MUflushGPUDirectRDMAWritesOptions_enum

enum MUflushGPUDirectRDMAWritesOptions_enum

MU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 的位掩码。

枚举器

MU_FLUSH_GPU_DIRECT_RDMA_WRITES_OPTION_HOST muFlushGPUDirectRDMAWrites() 及其 MUSA 运行时 API
对应物在设备上受支持。

MU_FLUSH_GPU_DIRECT_RDMA_WRITES_OPTION_MEMOPS

MU_STREAM_WAIT_VALUE_FLUSH 标志和
MU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp 在设备上受支持。

MUGPUDirectRDMAWritesOrdering_enum

enum MUGPUDirectRDMAWritesOrdering_enum

GPUDirect RDMA 写入的平台原生排序。

枚举器

MU_GPU_DIRECT_RDMA_WRITES_ORDERING_NONE 设备不支持远程写入的原生排序。
可以使用 muFlushGPUDirectRDMAWrites(),如果支持的话。
MU_GPU_DIRECT_RDMA_WRITES_ORDERING_OWNER 本地,设备可以一致地消费远程写入,
尽管其他 MUSA 设备可能不行。
MU_GPU_DIRECT_RDMA_WRITES_ORDERING_ALL_DEVICES

系统中的任何 MUSA 设备都可以一致地消费远程写入到此设备。

MUflushGPUDirectRDMAWritesScope_enum

enum MUflushGPUDirectRDMAWritesScope_enum

muFlushGPUDirectRDMAWrites 的作用域。

枚举器

MU_FLUSH_GPU_DIRECT_RDMA_WRITES_TO_OWNER 阻塞直到远程写入对拥有数据的 MUSA 设备上下文可见。
MU_FLUSH_GPU_DIRECT_RDMA_WRITES_TO_ALL_DEVICES 阻塞直到远程写入对所有 MUSA 设备上下文可见。

MUflushGPUDirectRDMAWritesTarget_enum

enum MUflushGPUDirectRDMAWritesTarget_enum

muFlushGPUDirectRDMAWrites 的目标。

枚举器

MU_FLUSH_GPU_DIRECT_RDMA_WRITES_TARGET_←-
CURRENT_CTX
将 muFlushGPUDirectRDMAWrites() 的目标设置为当前活动的 MUSA 设备上下文。

MUgraphDebugDot_flags_enum

enum MUgraphDebugDot_flags_enum

muGraphDebugDotPrint 的额外写入选项。

枚举器

MU_GRAPH_DEBUG_DOT_FLAGS_VERBOSE
MU_GRAPH_DEBUG_DOT_FLAGS_RUNTIME_TYPES 将所有调试数据输出为如果启用了每个调试标志一样。
MU_GRAPH_DEBUG_DOT_FLAGS_KERNEL_NODE_PARAMS 使用 MUSA 运行时结构进行输出。
MU_GRAPH_DEBUG_DOT_FLAGS_MEMCPY_NODE_PARAMS 将 MUSA_KERNEL_NODE_PARAMS 值添加到输出中。
MU_GRAPH_DEBUG_DOT_FLAGS_MEMSET_NODE_PARAMS 将 MUSA_MEMCPY3D 值添加到输出中。
MU_GRAPH_DEBUG_DOT_FLAGS_HOST_NODE_PARAMS 将 MUSA_MEMSET_NODE_PARAMS 值添加到输出中。
MU_GRAPH_DEBUG_DOT_FLAGS_EVENT_NODE_PARAMS 将 MUSA_HOST_NODE_PARAMS 值添加到输出中。
MU_GRAPH_DEBUG_DOT_FLAGS_EXT_SEMAS_SIGNAL_←-
NODE_PARAMS
将记录和等待节点的 MUevent 句柄添加到输出中。
MU_GRAPH_DEBUG_DOT_FLAGS_EXT_SEMAS_WAIT_NODE_PARAMS
将 MUSA_EXT_SEM_SIGNAL_NODE_PARAMS 值添加到输出中。
MU_GRAPH_DEBUG_DOT_FLAGS_KERNEL_NODE_←-
ATTRIBUTES
将 MUSA_EXT_SEM_WAIT_NODE_PARAMS 值添加到输出中。
MU_GRAPH_DEBUG_DOT_FLAGS_HANDLES 将 MUkernelNodeAttrValue 值添加到输出中。
MU_GRAPH_DEBUG_DOT_FLAGS_MEM_ALLOC_NODE_PARAMS
将节点句柄和每个内核函数句柄添加到输出中。
MU_GRAPH_DEBUG_DOT_FLAGS_MEM_FREE_NODE_PARAMS
将内存分配节点参数添加到输出中。

MUuserObject_flags_enum

枚举 MUuserObject_flags_enum

图的用户对象标记。

枚举器

MU_USER_OBJECT_NO_DESTRUCTOR_SYNC 表示析构函数执行不受任何 MUSA 句柄的同步。

MUuserObjectRetain_flags_enum

enum MUuserObjectRetain_flags_enum

保留图的用户对象引用的标记。

枚举器

MU_GRAPH_USER_OBJECT_MOVE 从调用者转移引用而不是创建新引用。

MUgraphInstantiate_flags_enum

enum MUgraphInstantiate_flags_enum

实例化图的标记。

枚举器

MUSA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH

在重新启动之前自动释放图中分配的内存。

MUdirectConvInterleave_enum

enum MUdirectConvInterleave_enum

枚举器

MU_DIRECT_CONV_INTERLEAVE_16B
MU_DIRECT_CONV_INTERLEAVE_32B
MU_DIRECT_CONV_INTERLEAVE_64B
MU_DIRECT_CONV_INTERLEAVE_128B
MU_DIRECT_CONV_INTERLEAVE_256B

MUdirectConvBasicShape_enum

enum MUdirectConvBasicShape_enum

枚举器

MU_DIRECT_CONV_BASIC_SHAPE_1_4
MU_DIRECT_CONV_BASIC_SHAPE_4_1
MU_DIRECT_CONV_BASIC_SHAPE_2_2

MUatomicType_enum

enum MUatomicType_enum

枚举器

MU_ATOMIC_TYPE_ATOMIC_ADD32
MU_ATOMIC_TYPE_ATOMIC_ADD64
MU_ATOMIC_TYPE_ATOMIC_UMIN32
MU_ATOMIC_TYPE_ATOMIC_UMIN64
MU_ATOMIC_TYPE_ATOMIC_IMIN32
MU_ATOMIC_TYPE_ATOMIC_IMIN64
MU_ATOMIC_TYPE_ATOMIC_UMAX32
MU_ATOMIC_TYPE_ATOMIC_UMAX64
MU_ATOMIC_TYPE_ATOMIC_IMAX32
MU_ATOMIC_TYPE_ATOMIC_IMAX64
MU_ATOMIC_TYPE_ATOMIC_ADD_F32
MU_ATOMIC_TYPE_ATOMIC_ADD_F64
MU_ATOMIC_TYPE_ATOMIC_ADD_HF16
MU_ATOMIC_TYPE_ATOMIC_ADD_BF16

MUatomicValueType_enum

enum MUatomicValueType_enum

枚举器

MU_ATOMIC_VALUE_TYPE_ATOMIC_ADD64
MU_ATOMIC_VALUE_TYPE_ATOMIC_SUB64
MU_ATOMIC_VALUE_TYPE_ATOMIC_UMIN64
MU_ATOMIC_VALUE_TYPE_ATOMIC_IMIN64
MU_ATOMIC_VALUE_TYPE_ATOMIC_UMAX64
MU_ATOMIC_VALUE_TYPE_ATOMIC_IMAX64
MU_ATOMIC_VALUE_TYPE_ATOMIC_AND64
MU_ATOMIC_VALUE_TYPE_ATOMIC_OR64
MU_ATOMIC_VALUE_TYPE_ATOMIC_XOR64

错误处理函数

低级 MUSA 驱动 API 的错误处理函数。

muGetErrorString()

MUresult MUSAAPI muGetErrorString (
MUresult error,
const char ** pStr)

获取错误代码的字符串描述。

∗pStr 设置为错误代码 error 的 NULL 结尾字符串描述的地址。如果不认识错误代码, 将返回 MUSA_ERROR_INVALID_VALUE,并将∗pStr设置为 NULL 地址。

参数

error - 要转换为字符串的错误代码
pStr - 字符串指针的地址。

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

另请参阅

MUresult, musaGetErrorString

muGetErrorName()

MUresult MUSAAPI muGetErrorName (
MUresult error,
const char ** pStr)

获取错误代码枚举名称的字符串表示。

∗pStr 设置为枚举错误代码 error 的名称的 NULL 结尾字符串表示的地址。如果不认识错误代码, 将返回 MUSA_ERROR_INVALID_VALUE,并将 ∗pStr 设置为 NULL 地址。

参数

error - 要转换为字符串的错误代码
pStr - 字符串指针的地址。

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

另请参阅

MUresult, musaGetErrorName

初始化函数

低级 MUSA 驱动 API 的初始化函数。

muInit()

MUresult MUSAAPI muInit (
unsigned int Flags)

初始化 MUSA 驱动 API。

初始化驱动 API,必须在调用驱动 API 的任何其他函数之前调用。目前,Flags 参数必须是 0。如果未调用 muInit(), 驱动 API 的任何函数将返回 MUSA_ERROR_NOT_INITIALIZED。

参数

Flags - MUSA 的初始化标志

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_DEVICE, MUSA_ERROR_SYSTEM_DRIVER_MISMATCH,
MUSA_ERROR_COMPAT_NOT_SUPPORTED_ON_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

版本管理函数

低级 MUSA 驱动 API 的版本管理函数。

muDriverGetVersion()

MUresult MUSAAPI muDriverGetVersion (
int * driverVersion)

返回驱动支持的最新 MUSA 版本。

∗driverVersion 中返回驱动支持的 MUSA 版本。版本以 (1000×主版本 + 10×次版本) 的形式返回。例如, MUSA 9.2 将由 9020 表示。

如果 driverVersion 是 NULL,此函数自动返回 MUSA_ERROR_INVALID_VALUE。

参数

driverVersion - 返回 MUSA 驱动版本

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

musaDriverGetVersion, musaRuntimeGetVersion

设备管理函数

本节描述了低级 MUSA 驱动应用程序编程接口的设备管理函数。

muDeviceGet()

MUresult MUSAAPI muDeviceGet (
MUdevice* device,
int ordinal )

返回计算设备的句柄。

在∗ device 中返回给定 ordinal 的设备句柄,范围在 [0, muDeviceGetCount()-1] 内。

参数

device - 返回的设备句柄
ordinal - 要获取句柄的设备编号

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceGetAttribute, muDeviceGetCount, muDeviceGetName, muDeviceGetUuid, muDeviceGetLuid, muDeviceTotalMem, mu←-
DeviceGetExecAffinitySupport

muDeviceGetCount()

MUresult MUSAAPI muDeviceGetCount (
int* count)

返回计算能力设备的数目。

在∗ count 中返回具有计算能力大于或等于 2.0 的设备数量,可用于执行。如果没有 这样的设备,muDeviceGetCount() 返回 0。

参数

count - 返回计算能力设备的数目

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceGetAttribute, muDeviceGetName, muDeviceGetUuid, muDeviceGetLuid, muDeviceGet, muDeviceTotalMem, muDeviceGet←-
ExecAffinitySupport, musaGetDeviceCount

muDeviceGetName()

MUresult MUSAAPI muDeviceGetName (
char* name,
int len,
MUdevice dev )

返回设备的标识符字符串。

在指向的 NULL 结尾字符串中返回标识设备 dev 的 ASCII 字符串 namelen 指定可以返回的字符串的最大长度。

参数

name - 返回的设备标识符字符串
len - 存储在name中的最大字符串长度
dev - 要获取标识符字符串的设备

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceGetAttribute, muDeviceGetUuid, muDeviceGetLuid, muDeviceGetCount, muDeviceGet, muDeviceTotalMem, muDeviceGet←-
ExecAffinitySupport, musaGetDeviceProperties

muDeviceGetUuid()

MUresult MUSAAPI muDeviceGetUuid (
MUuuid * uuid,
MUdevice dev )

返回设备的 UUID。

注意:此 API 的更新版本是 muDeviceGetUuid_v2。它将在 12.0 中取代此版本,保留此版本是为了小版本兼容性。

在指向的 uuid 结构中返回标识设备 dev 的 16-octets。

参数

uuid - 返回的 UUID
dev - 要获取标识符字符串的设备

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceGetUuid_v2 muDeviceGetAttribute, muDeviceGetCount, muDeviceGetName, muDeviceGetLuid, muDeviceGet,
muDeviceTotalMem, muDeviceGetExecAffinitySupport, musaGetDeviceProperties

muDeviceGetUuid_v2()

MUresult MUSAAPI muDeviceGetUuid_v2 (
MUuuid * uuid,
MUdevice dev )

返回设备的 UUID (11.4+)

在指向的 uuid 结构中返回标识设备 dev 的 16-octets。如果设备处于 MIG 模式,则返回其 MIG UUID,该 UUID 唯一标识订阅的 MIG 计算实例。

参数

uuid - 返回的 UUID
dev - 要获取标识符字符串的设备

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceGetAttribute, muDeviceGetCount, muDeviceGetName, muDeviceGetLuid, muDeviceGet, muDeviceTotalMem, musaGet←-
DeviceProperties

muDeviceTotalMem()

MUresult MUSAAPI muDeviceTotalMem (
size_t * bytes,
MUdevice dev )

返回设备上的总内存量

在∗ byte 中返回设备 dev 上可用的总内存量,以 bytes 为单位。

参数

bytes - 返回设备上的内存量,以字节为单位
dev - 设备句柄

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceGetAttribute, muDeviceGetCount, muDeviceGetName, muDeviceGetUuid, muDeviceGet, muDeviceGetExecAffinitySupport,
musaMemGetInfo

muDeviceGetTexture1DLinearMaxWidth()

MUresult MUSAAPI muDeviceGetTexture1DLinearMaxWidth (
size_t * maxWidthInElements,
MUarray_format format,
unsigned numChannels,
MUdevice dev )

返回给定纹理元素大小的1D线性纹理中可分配的最大元素数量

*maxWidthInElements 中返回给定 formatnumChannels 的1D线性纹理中可分配的最大纹理元素数量。

参数

maxWidthInElements - 返回给定 format 和 numChannels 下可分配的最大纹理元素数量
format - 纹理格式
numChannels - 每个纹理元素的通道数
dev - 设备句柄

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceGetAttribute, muDeviceGetCount, muDeviceGetName, muDeviceGetUuid, muDeviceGet,
musaMemGetInfo, muDeviceTotalMem

muDeviceGetAttribute()

MUresult MUSAAPI muDeviceGetAttribute (
int * pi,
MUdevice_attribute attrib,
MUdevice dev )

返回关于设备的信息

在∗ pi 中返回设备 dev 上属性 attrib 的整数值。支持的属性包括:

  • MU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK: 每个块的最大线程数;

  • MU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X: 块的最大 x 维;

  • MU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y: 块的最大 y 维;

  • MU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z: 块的最大 z 维;

  • MU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X: 网格的最大 x 维;

  • MU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y: 网格的最大 y 维;

  • MU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z: 网格的最大 z 维;

  • MU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK: 每个线程块可用的共享内存最大数量 以字节为单位;

  • MU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY: 设备上 常量 变量在 MUSA C 内核中的内存量 以字节为单位;

  • MU_DEVICE_ATTRIBUTE_WARP_SIZE: 线程的 warp 大小;

  • MU_DEVICE_ATTRIBUTE_MAX_PITCH: 内存复制函数允许的最大 pitch,涉及通过 muMemAllocPitch() 分配的内存区域 以字节为单位;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH: 1D 纹理的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH: 绑定到线性内存的 1D 纹理的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH: mipmapped 1D 纹理的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH: 2D 纹理的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT: 2D 纹理的最大高度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH: 绑定到线性内存的 2D 纹理的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT: 绑定到线性内存的 2D 纹理的最大高度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH: 绑定到线性内存的 2D 纹理的最大 pitch 以字节为单位;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH: mipmapped 2D 纹理的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT: mipmapped 2D 纹理的最大高度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH: 3D 纹理的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT: 3D 纹理的最大高度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH: 3D 纹理的最大深度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE: 3D 纹理的备选最大宽度,如果不支持备选最大 3D 纹理大小则为 0;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE: 3D 纹理的备选最大高度,如果不支持备选最大 3D 纹理大小则为 0;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE: 3D 纹理的备选最大深度,如果不支持备选最大 3D 纹理大小则为 0;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH: 立方体纹理的最大宽度或高度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH: 1D 分层纹理的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS: 1D 分层纹理的最大层数;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH: 2D 分层纹理的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT: 2D 分层纹理的最大高度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS: 2D 分层纹理的最大层数;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH: 立方体分层纹理的最大宽度或高度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS: 立方体分层纹理的最大层数;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH: 1D 表面的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH: 2D 表面的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT: 2D 表面的最大高度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH: 3D 表面的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT: 3D 表面的最大高度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH: 3D 表面的最大深度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH: 1D 分层表面的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS: 1D 分层表面的最大层数;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH: 2D 分层表面的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT: 2D 分层表面的最大高度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS: 2D 分层表面的最大层数;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH: 立方体表面的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH: 立方体分层表面的最大宽度;

  • MU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS: 立方体分层表面的最大层数;

  • MU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK: 每个块可用的 32 位寄存器的最大数量;

  • MU_DEVICE_ATTRIBUTE_CLOCK_RATE: 典型的时钟频率,以千赫兹为单位;

  • MU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT: 对齐要求;纹理基地址对齐到 textureAlign 字节不需要偏移量 应用于纹理获取;

  • MU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT: 绑定到 pitched 内存的 2D 纹理引用的 pitch 对齐要求;

  • MU_DEVICE_ATTRIBUTE_GPU_OVERLAP: 1 如果设备可以同时复制内存和执行内核,或者 0 如果不;

  • MU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT: 设备上的多处理器数量;

  • MU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT: 1 如果设备上执行的内核有时限,或者 0 如果没有;

  • MU_DEVICE_ATTRIBUTE_INTEGRATED: 1 如果设备与内存子系统集成,或者 0 如果不;

  • MU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY: 1 如果设备可以将主机内存映射到 MUSA 地址空间,或者 0 如果不;

  • MU_DEVICE_ATTRIBUTE_COMPUTE_MODE: 设备当前的计算模式。可用的模式如下: - MU_COMPUTEMODE_DEFAULT: 默认模式 - 设备不受限制,并且可以同时有多个 MUSA 上下文。 - MU_COMPUTEMODE_PROHIBITED: 计算禁止模式 - 设备禁止创建新的 MUSA 上下文。 - MU_COMPUTEMODE_EXCLUSIVE_PROCESS: 计算独占进程模式 - 设备一次只能有一个上下文被一个进程使用。

  • MU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS: 1 如果设备支持在同一上下文中同时执行多个内核,或者 0 如果不。不能保证多个内核会同时驻留在设备上,因此这个特性不应该依赖于它来保证正确性;

  • MU_DEVICE_ATTRIBUTE_ECC_ENABLED: 1 如果设备上启用了错误校正,0 如果错误校正被禁用或不受设备支持;

  • MU_DEVICE_ATTRIBUTE_PCI_BUS_ID: 设备的 PCI 总线标识符;

  • MU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID: 设备的 PCI 设备(也称为插槽)标识符;

  • MU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID: 设备的 PCI 域标识符

  • MU_DEVICE_ATTRIBUTE_TCC_DRIVER: 1 如果设备使用 TCC 驱动程序。TCC 只在运行 Windows Vista 或更高版本的 Tesla 硬件上可用;

  • MU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE: 峰值内存时钟频率,以千赫兹为单位;

  • MU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH: 全局内存总线宽度,以位为单位;

  • MU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE: L2 缓存的大小,以字节为单位。如果设备没有 L2 缓存,则为 0;

  • MU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR: 每个多处理器上的最大线程数;

  • MU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING: 1 如果设备与主机共享统一的地址空间,或者 0 如果不;

  • MU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR: 计算能力的主版本号;

  • MU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR: 计算能力的次版本号;

  • MU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED: 1 如果设备支持在 L1 缓存中缓存全局变量,0 如果不支持;

  • MU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED: 1 如果设备支持在 L1 缓存中缓存局部变量,0 如果不支持;

  • MU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR: 每个多处理器上可用的共享内存最大数量 以字节为单位;这个数量由同时驻留在一个多处理器上的所有线程块共享;

  • MU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR: 每个多处理器上可用的 32 位寄存器的最大数量;这个数量由同时驻留在一个多处理器上的所有线程块共享;

  • MU_DEVICE_ATTRIBUTE_MANAGED_MEMORY: 1 如果设备支持在此系统上分配托管内存,0 如果在此系统上分配托管内存不受设备支持。

  • MU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD: 1 如果设备在多 GPU 板上,0 如果不是。

  • MU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID: 与相同板关联的设备组的唯一标识符。 在同一多 GPU 板上的设备将共享相同的标识符。

  • MU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED: 1 如果设备与主机之间的链接支持原生原子操作。

  • MU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO: 单精度性能(每秒浮点操作数)与双精度性能的比率。

  • MU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS: 设备支持不调用 musaHostRegister 就能一致地访问分页内存。

  • MU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS: 设备可以与 CPU 同时一致地访问托管内存。

  • MU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED: 设备支持计算抢占。

  • MU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM: 设备可以使用与 CPU 相同的虚拟地址访问主机注册的内存。

  • MU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN: 此设备上支持的每个块共享内存的最大大小。这是使用 muFuncSetAttribute() 调用时可以选入的最大值。有关更多详细信息,请参见 MU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES

  • MU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES: 设备通过主机的页表访问分页内存。

  • MU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST: 主机可以直接访问设备上的托管内存,无需迁移。

  • MU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED: 设备支持虚拟内存管理 API, 如 muMemAddressReserve, muMemCreate, muMemMap 及相关 API

  • MU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED: 设备支持将内存导出到 posix 文件描述符,如果通过 muMemCreate 请求

  • MU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED: 设备支持将内存导出到 Win32 NT 句柄, 如果通过 muMemCreate 请求

  • MU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED: 设备支持将内存导出到 Win32 KMT 句柄,如果通过 muMemCreate 请求

  • MU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE: L2 持久行容量设置的最大值,以字节为单位。

  • MU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE: MUaccessPolicyWindownum_bytes 的最大值。

  • MU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR: 可以驻留在一个多处理器上的线程块的最大数量。

  • MU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED: 设备通过 muMemCreate 支持可压缩内存分配

  • MU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK: MUSA 驱动程序为每个块保留的共享内存量,以字节为单位。

  • MU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED: 设备支持使用 muMemHostRegister 标志 CU_MEMHOSTERGISTER_READ_ONLY 注册必须映射为 GPU 只读的内存

  • MU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED: 设备支持使用 muMemAllocAsync 和 cuMemPool 系列 API

参数

pi - 返回的设备属性值
attrib - 要查询的设备属性
dev - 设备句柄

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceGetCount, muDeviceGetName, muDeviceGetUuid, muDeviceGet, muDeviceTotalMem, muDeviceGetExecAffinitySupport,←-
musaDeviceGetAttribute, musaGetDeviceProperties

设备管理 [已弃用]

本节描述了低级 MUSA 驱动应用程序编程接口的设备管理函数。

muDeviceGetProperties()

__MUSA_DEPRECATED MUresult MUSAAPI muDeviceGetProperties (
MUdevprop * prop,
MUdevice dev )

返回选定设备的属性。

弃用

此函数在 MUSA 5.0 中被弃用,并被 muDeviceGetAttribute() 替换。

在∗ prop 中返回设备 dev 的属性。MUdevprop 结构定义如下:

typedef struct MUdevprop_st {
int maxThreadsPerBlock;
int maxThreadsDim[3];
int maxGridSize[3];
int sharedMemPerBlock;
int totalConstantMemory;
int SIMDWidth;
int memPitch;
int regsPerBlock;
int clockRate;
int textureAlign
} MUdevprop;

其中:

  • maxThreadsPerBlock 是每个块的最大线程数;
  • maxThreadsDim[3] 是块的每个维度的最大大小;
  • maxGridSize[3] 是网格的每个维度的最大大小;
  • sharedMemPerBlock 是每个块可用的共享内存总量,以字节为单位;
  • totalConstantMemory 是设备上常量内存的总量,以字节为单位;
  • SIMDWidth 是 warp 大小;
  • memPitch 是内存复制函数允许的最大 pitch,涉及通过 muMemAllocPitch() 分配的内存区域;
  • regsPerBlock 是每个块可用的寄存器总数;
  • clockRate 是时钟频率,以千赫兹为单位;
  • textureAlign 是对齐要求;纹理基地址对齐到 textureAlign 字节不需要偏移量 应用于纹理获取。

参数

prop - 返回的设备属性
dev - 要获取属性的设备

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceGetAttribute, muDeviceGetCount, muDeviceGetName, muDeviceGetUuid, muDeviceGet, muDeviceTotalMem

muDeviceComputeCapability()

__MUSA_DEPRECATED MUresult MUSAAPI muDeviceComputeCapability (
int * major,
int * minor,
MUdevice dev )

返回设备的计算能力。

弃用

此函数在 MUSA 5.0 中被弃用,其功能被 muDeviceGetAttribute() 取代。

∗major∗minor 中返回定义设备 dev 计算能力的主版本号和次版本号。

参数

major - 主版本号
minor - 次版本号
dev - 设备句柄

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceGetAttribute, muDeviceGetCount, muDeviceGetName, muDeviceGetUuid, muDeviceGet, muDeviceTotalMem

主要上下文管理

本节描述了低级 MUSA 驱动应用程序编程接口的主要上下文管理函数。

主要上下文在每个设备上是唯一的,并且与 MUSA 运行时 API 共享。这些函数允许与使用 MUSA 的其他库集成。

muDevicePrimaryCtxRetain()

MUresult MUSAAPI muDevicePrimaryCtxRetain (
MUcontext * pctx,
MUdevice dev )

在 GPU 上保留主要上下文。

保留设备上的主要上下文。一旦用户成功保留主要上下文,主要上下文将处于活动状态并可供用户使用, 直到用户使用 muDevicePrimaryCtxRelease() 释放它或使用 muDevicePrimaryCtxReset() 重置它。与 muCtxCreate() 不同 新保留的上下文不会被推入栈。

首次保留主要上下文如果设备的计算模式是 MU_COMPUTEMODE_PROHIBITED 将失败,并返回 MUSA_ERROR_UNKNOWN。可以使用函数 muDeviceGetAttribute() 与 MU_DEVICE_ATTRIBUTE_COMPUTE_MODE 来确定设备的计算模式。可以使用 mthreads-smitool 来设置设备的计算模式。可以通过向 mthreads-smi 传递 -h 选项来获得文档。

请注意,主要上下文始终支持固定分配。可以通过 muDevicePrimaryCtxSetFlags() 指定其他标志。

参数

pctx - 返回的新上下文句柄
dev - 请求主要上下文的设备

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_DEVICE, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY,
MUSA_ERROR_UNKNOWN

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDevicePrimaryCtxRelease, muDevicePrimaryCtxSetFlags, muCtxCreate, muCtxGetApiVersion, muCtxGetCacheConfig,
muCtxGetDevice, muCtxGetFlags, muCtxGetLimit, muCtxPopCurrent, muCtxPushCurrent, muCtxSetCacheConfig, muCtxSetLimit,
muCtxSynchronize

muDevicePrimaryCtxRelease()

MUresult MUSAAPI muDevicePrimaryCtxRelease (
MUdevice dev )

在 GPU 上释放主要上下文。

释放设备上的主要上下文互操作。保留的上下文一旦用户完成使用,应始终释放。上下文在最后一个引用释放后自动重置。这种行为与 MUSA 4.0 及更早版本中 MUSA 运行时保留的主要上下文不同。在这种情况下,主要上下文始终保持活动状态。

释放之前未保留的主要上下文将失败,并返回 MUSA_ERROR_INVALID_CONTEXT

请注意,与 muCtxDestroy() 不同,此方法在任何情况下都不会从栈中弹出上下文。

参数

dev - 释放主要上下文的设备

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_DEVICE,
MUSA_ERROR_INVALID_CONTEXT

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDevicePrimaryCtxRetain, muCtxDestroy, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetDevice, muCtxGetFlags,
muCtxGetLimit, muCtxPopCurrent, muCtxPushCurrent, muCtxSetCacheConfig, muCtxSetLimit, muCtxSynchronize

muDevicePrimaryCtxSetFlags()

MUresult MUSAAPI muDevicePrimaryCtxSetFlags (
MUdevice dev,
unsigned int flags)

为主要上下文设置标志。

为设备上的主要上下文设置标志,覆盖之前设置的标志。

flags 参数的三个最低有效位可以用来控制拥有 MUSA 上下文的 OS 线程在等待 GPU 结果时与 OS 调度器的交互方式。创建上下文时只能设置其中一个调度标志。

  • MU_CTX_SCHED_SPIN: 指示 MUSA 在等待 GPU 结果时积极自旋。这可以减少等待 GPU 时的延迟, 但如果 CPU 线程与 MUSA 线程并行执行工作,则可能会降低 CPU 线程的性能。
  • MU_CTX_SCHED_YIELD: 指示 MUSA 在等待 GPU 结果时让出其线程。这可能会增加等待 GPU 时的延迟, 但可以提高与 GPU 并行执行工作的 CPU 线程的性能。
  • MU_CTX_SCHED_BLOCKING_SYNC: 指示 MUSA 在等待 GPU 完成工作时使用同步原语阻塞 CPU 线程。
  • MU_CTX_BLOCKING_SYNC: 指示 MUSA 在等待 GPU 完成工作时使用同步原语阻塞 CPU 线程。 弃用: 此标志自 MUSA 4.0 起被弃用,并被 MU_CTX_SCHED_BLOCKING_SYNC 替换。
  • MU_CTX_SCHED_AUTO: 如果 flags 参数为零,则使用默认值,使用基于进程中活动 MUSA 上下文的数量 C 和系统逻辑处理器的数量 P 的启发式方法。如果 C>P,则 MUSA 在等待 GPU 时会让出其他 OS 线程(MU_CTX_SCHED_YIELD),否则 MUSA 在等待结果时不会让出,而是在处理器上积极自旋(MU_CTX_SCHED_SPIN)。此外,在 Tegra 设备上,MU_CTX_SCHED_AUTO 使用基于平台电源配置文件的启发式方法,可能会为低功耗设备选择 MU_CTX_SCHED_BLOCKING_SYNC。
  • MU_CTX_LMEM_RESIZE_TO_MAX: 指示 MUSA 在调整内核的本地内存大小时不要减少本地内存。这可以 通过在启动许多使用高本地内存的内核时防止本地内存分配抖动,以潜在增加内存使用量为代价。 弃用: 此标志已被弃用,并且此标志启用的行为现在是默认行为,无法禁用。

参数

dev - 设置主要上下文标志的设备
flags - 设备的新标志

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_DEVICE,
MUSA_ERROR_INVALID_VALUE,

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDevicePrimaryCtxRetain, muDevicePrimaryCtxGetState, muCtxCreate, muCtxGetFlags, musaSetDeviceFlags

muDevicePrimaryCtxGetState()

MUresult MUSAAPI muDevicePrimaryCtxGetState (
MUdevice dev,
unsigned int * flags,
int * active)

获取主要上下文的状态。

∗flags 中返回 dev 的主要上下文的标志,并在 ∗active 中返回它是否处于活动状态。有关标志值,请参阅 muDevicePrimaryCtxSetFlags。

参数

dev - 获取主要上下文标志的设备
flags - 存储标志的指针
active - 存储上下文状态的指针;0 = 非活动,1 = 活动

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_DEVICE,
MUSA_ERROR_INVALID_VALUE,

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDevicePrimaryCtxSetFlags, muCtxGetFlags, musaGetDeviceFlags

muDevicePrimaryCtxReset()

MUresult MUSAAPI muDevicePrimaryCtxReset (
MUdevice dev )

销毁所有分配并重置主要上下文的所有状态。

显式销毁和清理与当前设备在当前进程中的所有资源。

请注意,调用函数有责任确保进程中没有其他模块再使用设备。因此,建议大多数情况下使用 muDevicePrimaryCtxRelease()。然而,即使在重置设备后,其他模块也可以安全地调用 muDevicePrimaryCtxRelease()。重置主要上下文不会释放它,保留主要上下文的应用程序应显式释放其使用。

参数

dev - 销毁主要上下文的设备

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_DEVICE,
MUSA_ERROR_PRIMARY_CONTEXT_ACTIVE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDevicePrimaryCtxRetain, muDevicePrimaryCtxRelease, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetDevice,
muCtxGetFlags, muCtxGetLimit, muCtxPopCurrent, muCtxPushCurrent, muCtxSetCacheConfig, muCtxSetLimit, muCtxSynchronize,
musaDeviceReset

上下文管理函数

本节描述了低级MUSA驱动应用程序编程接口的上下文管理函数。

请注意,有些函数在主要上下文管理部分中有描述。

muCtxCreate()

MUresult MUSAAPI muCtxCreate (
MUcontext * pctx,
unsigned int flags,
MUdevice dev )

创建一个MUSA上下文。

注意

大多数情况下,建议使用muDevicePrimaryCtxRetain。

创建一个新的MUSA上下文并将其与调用线程关联。flags参数在下文描述。上下文的创建使用计数为1,调用muCtxCreate()的调用者必须在完成使用上下文后调用muCtxDestroy()。如果已经有上下文对线程当前,则它将被新创建的上下文取代,并且可以通过随后对muCtxPopCurrent()的调用恢复。

flags参数的三个最低有效位可以用来控制拥有MUSA上下文的操作系统线程在等待GPU结果时与操作系统调度程序的交互。在创建上下文时只能设置其中一个调度标志。

  • MU_CTX_SCHED_SPIN:指示MUSA在等待GPU结果时积极自旋。这可以减少等待GPU时的延迟,但如果CPU线程与MUSA线程并行执行工作,则可能会降低CPU线程的性能。
  • MU_CTX_SCHED_YIELD:指示MUSA在等待GPU结果时让出其线程。这可能会增加等待GPU时的延迟,但可以增加与GPU并行执行工作的CPU线程的性能。
  • MU_CTX_SCHED_BLOCKING_SYNC:指示MUSA在等待GPU完成工作时,通过同步原语阻塞CPU线程。
  • MU_CTX_BLOCKING_SYNC:指示MUSA在等待GPU完成工作时,通过同步原语阻塞CPU线程。 已弃用: 此标志在MUSA 4.0中被弃用,并被MU_CTX_SCHED_BLOCKING_SYNC取代。
  • MU_CTX_SCHED_AUTO:如果flags参数为零,则使用默认值,根据进程中的活动MUSA上下文数量和系统中的逻辑处理器数量使用启发式方法。如果C>P,则MUSA在等待GPU时会让出给其他操作系统线程(MU_CTX_SCHED_YIELD),否则MUSA在等待结果时不会让出,并在处理器上积极自旋(MU_CTX_SCHED_SPIN)。此外,在Tegra设备上,MU_CTX_SCHED_AUTO使用基于平台电源配置文件的启发式方法,并且可能为低功耗设备选择MU_CTX_SCHED_BLOCKING_SYNC。
  • MU_CTX_MAP_HOST:指示MUSA支持映射固定分配。此标志必须设置才能分配固定主机内存,以便GPU可以访问。
  • MU_CTX_LMEM_RESIZE_TO_MAX:指示MUSA在调整内核的本地内存大小时,不减少本地内存。这可以通过在启动许多使用高本地内存的内核时,防止本地内存分配的抖动,但可能以增加内存使用为代价。 已弃用: 此标志已弃用,并且此标志启用的行为现在是默认行为,无法禁用。相反,可以使用muCtxSetLimit()控制每个线程的栈大小。

如果设备的计算模式是MU_COMPUTEMODE_PROHIBITED,则上下文创建将失败,并返回MUSA_ERROR_UNKNOWN。可以使用muDeviceGetAttribute()函数配合MU_DEVICE_ATTRIBUTE_COMPUTE_MODE来确定设备的计算模式。可以使用threads-smitool设置∗设备的计算模式。通过传递-h选项给threads-smican可以获得文档。

参数

pctx - 返回新上下文的上下文句柄
flags - 上下文创建标志
dev - 创建上下文的设备

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_DEVICE, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY,
MUSA_ERROR_UNKNOWN

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxDestroy, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetDevice, muCtxGetFlags, muCtxGetLimit, muCtxPopCurrent,
muCtxPushCurrent, muCtxSetCacheConfig, muCtxSetLimit, muCtxSynchronize

muCtxDestroy()

MUresult MUSAAPI muCtxDestroy (
MUcontext ctx)

销毁一个MUSA上下文

销毁由ctx指定的MUSA上下文。不管ctx是当前多少线程的上下文,它都将被销毁。调用函数有责任确保在执行muCtxDestroy()时没有使用ctx发出API调用。

如果ctx是调用线程的当前上下文,则ctx也会从当前线程的上下文堆栈中弹出(就好像调用了muCtxPopCurrent())。如果ctx是其他线程的当前上下文,则ctx将保持为这些线程的当前上下文,并且尝试从这些线程访问ctx将导致错误MUSA_ERROR_CONTEXT_IS_DESTROYED。

参数

ctx - 要销毁的上下文

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetDevice, muCtxGetFlags, muCtxGetLimit, muCtxPopCurrent,
muCtxPushCurrent, muCtxSetCacheConfig, muCtxSetLimit, muCtxSynchronize

muCtxPushCurrent()

MUresult MUSAAPI muCtxPushCurrent (
MUcontext ctx)

将上下文推入当前CPU线程。

将给定的上下文ctx推入CPU线程的当前上下文堆栈。指定的上下文成为CPU线程的当前上下文,因此所有操作当前上下文的MUSA函数都会受到影响。

可以通过调用muCtxDestroy()或muCtxPopCurrent()使之前的当前上下文再次成为当前。

参数

ctx - 要推入的上下文

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxDestroy, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetDevice, muCtxGetFlags, muCtxGetLimit,
muCtxPopCurrent, muCtxSetCacheConfig, muCtxSetLimit, muCtxSynchronize

muCtxPopCurrent()

MUresult MUSAAPI muCtxPopCurrent (
MUcontext * pctx)

从当前CPU线程中弹出当前MUSA上下文。

从CPU线程中弹出当前MUSA上下文,并将旧的上下文句柄传递回∗pctx。然后可以通过调用muCtxPushCurrent()使该上下文成为不同CPU线程的当前上下文。

如果在调用muCtxCreate()或muCtxPushCurrent()之前已经有上下文对CPU线程当前,则此函数将使该上下文再次成为CPU线程的当前上下文。

参数

pctx - 返回新的上下文句柄

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxDestroy, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetDevice, muCtxGetFlags, muCtxGetLimit,
muCtxPushCurrent, muCtxSetCacheConfig, muCtxSetLimit, muCtxSynchronize

muCtxSetCurrent()

MUresult MUSAAPI muCtxSetCurrent (
MUcontext ctx)

将指定的MUSA上下文绑定到调用的CPU线程。

将指定的MUSA上下文绑定到调用的CPU线程。如果ctx为NULL,则之前绑定到调用CPU线程的MUSA上下文将被解绑,并返回MUSA_SUCCESS。

如果调用CPU线程上存在MUSA上下文堆栈,则这将用ctx替换该堆栈的顶部。如果ctx为NULL,则这相当于弹出调用CPU线程的MUSA上下文堆栈的顶部(如果调用CPU线程的MUSA上下文堆栈为空,则为无操作)。

参数

ctx - 要绑定到调用CPU线程的上下文

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxGetCurrent, muCtxCreate, muCtxDestroy, musaSetDevice

muCtxGetCurrent()

MUresult MUSAAPI muCtxGetCurrent (
MUcontext * pctx)

返回绑定到调用CPU线程的MUSA上下文。

返回在∗pctx中绑定到调用CPU线程的MUSA上下文。如果没有上下文绑定到调用CPU线程,则∗pctx设置为NULL,并返回MUSA_SUCCESS。

参数

pctx - 返回的上下文句柄

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED,

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxSetCurrent, muCtxCreate, muCtxDestroy, musaGetDevice

muCtxGetDevice()

MUresult MUSAAPI muCtxGetDevice (
MUdevice * device)

返回当前上下文的设备ID。

返回在∗device中当前上下文的设备的序数。

参数

device - 返回当前上下文的设备ID

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE,

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxDestroy, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetFlags, muCtxGetLimit, muCtxPopCurrent,
muCtxPushCurrent, muCtxSetCacheConfig, muCtxSetLimit, muCtxSynchronize, musaGetDevice

muCtxGetFlags()

MUresult MUSAAPI muCtxGetFlags (
unsigned int * flags)

返回当前上下文的标志。

返回在∗flags中当前上下文的标志。有关标志值,请参阅muCtxCreate。

参数

flags - 存储当前上下文标志的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE,

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetCurrent, muCtxGetDevice, muCtxGetLimit,
muCtxGetSharedMemConfig, muCtxGetStreamPriorityRange, musaGetDeviceFlags

muCtxSetFlags()

MUresult MUSAAPI muCtxSetFlags (
unsigned int flags)

设置当前上下文的标志

设置当前上下文的标志,覆盖先前设置的标志。有关标志值,请参见 muDevicePrimaryCtxSetFlags。

参数

flags - 要在当前上下文上设置的标志

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetCurrent, muCtxGetDevice, muCtxGetLimit,
muCtxGetSharedMemConfig, muCtxGetStreamPriorityRange, muCtxGetFlags, musaGetDeviceFlags,
muDevicePrimaryCtxSetFlags

muCtxGetId()

MUresult MUSAAPI muCtxGetId (
MUcontext ctx,
unsigned long long * ctxId)

返回与提供的上下文关联的唯一Id

返回在 *ctxId 中与给定上下文关联的唯一Id。该Id在程序生命周期内对于此MUSA实例是唯一的。如果提供的上下文为NULL且存在当前上下文,则返回当前上下文的Id。

参数

ctx - 要获取Id的上下文
ctxId - 存储上下文Id的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_CONTEXT_IS_DESTROYED, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_INVALID_CONTEXT, MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxDestroy, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetDevice, muCtxGetFlags,
muCtxGetLimit, muCtxPushCurrent

muCtxSynchronize()

MUresult MUSAAPI muCtxSynchronize (
void )

阻塞上下文的任务完成。

阻塞,直到设备完成所有先前请求的任务。如果其中一个先前任务失败,muCtxSynchronize()返回错误。如果上下文是用MU_CTX_SCHED_BLOCKING_SYNC标志创建的,则CPU线程将阻塞,直到GPU上下文完成其工作。

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxDestroy, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetDevice, muCtxGetFlags, muCtxGetLimit,
muCtxPopCurrent, muCtxPushCurrent, muCtxSetCacheConfig, muCtxSetLimit, musaDeviceSynchronize

muCtxSetLimit()

MUresult MUSAAPI muCtxSetLimit (
MUlimit limit,
size_t value)

设置资源限制。

limit设置为value是应用程序请求更新上下文维护的当前限制。驱动程序可以修改请求的值以满足硬件要求(这可能是限制到最小或最大值,向上取整到最近的元素大小等)。应用程序可以使用muCtxGetLimit()找出限制被设置为多少。

设置每个MUlimit都有其特定的限制,因此每个都在此处讨论。

  • MU_LIMIT_STACK_SIZE控制每个GPU线程的堆栈大小(以字节为单位)。驱动程序会自动增加每个内核启动所需的每个线程的堆栈大小。此大小在每次启动后不会重置为原始值。设置此值将立即生效,如果必要,设备将阻塞,直到所有先前请求的任务完成。
  • MU_LIMIT_PRINTF_FIFO_SIZE控制printf()设备系统调用使用的FIFO的大小(以字节为单位)。设置MU_LIMIT_PRINTF_FIFO_SIZE必须在启动任何使用printf()设备系统调用的内核之前执行,否则将返回MUSA_ERROR_INVALID_VALUE。
  • MU_LIMIT_MALLOC_HEAP_SIZE控制malloc()和free()设备系统调用使用的堆的大小(以字节为单位)。设置MU_LIMIT_MALLOC_HEAP_SIZE必须在启动任何使用malloc()或free()设备系统调用的内核之前执行,否则将返回MUSA_ERROR_INVALID_VALUE。
  • MU_LIMIT_DEV_RUNTIME_SYNC_DEPTH控制线程可以安全地调用musa←-DeviceSynchronize()的网格的最大嵌套深度。设置此限制必须在任何使用设备运行时并调用←-musaDeviceSynchronize()超过默认同步深度的内核启动之前执行,两个网格级别的深度。如果违反此限制,对musaDeviceSynchronize()的调用将失败,并返回错误代码musaErrorSyncDepthExceeded。此限制可以设置为小于默认值或最大启动深度24。在设置此限制时,请记住,额外的同步深度级别要求驱动程序预先保留大量设备内存,这些内存不能再用于用户分配。如果这些设备内存的保留失败,muCtxSetLimit()将返回MUSA_ERROR_OUT_OF_MEMORY,并且可以将限制重置为较低的值。此限制仅适用于计算能力为3.5及更高的设备。尝试在计算能力低于3.5的设备上设置此限制将导致返回错误MUSA_ERROR_UNSUPPORTED_LIMIT。
  • MU_LIMIT_DEV_RUNTIME_PENDING_LAUNCH_COUNT控制可以从当前上下文发出的最大未完成设备运行时启动数量。网格从启动点到已知已完成的点都是未完成的。违反此限制的设备运行时启动失败,并在调用musaGetLast←-Error()后返回musaErrorLaunchPendingCountExceeded。如果模块使用设备运行时并且需要超过默认值(2048个启动)的更多未完成启动,则可以增加此限制。请记住,能够维持额外的未完成启动将要求驱动程序预先保留更大的设备内存,这些内存不能再用于分配。如果这些保留失败,muCtxSetLimit()将返回MUSA_ERROR_OUT_OF_MEMORY,并且可以将限制重置为较低的值。此限制仅适用于计算能力为3.5及更高的设备。尝试在计算能力低于3.5的设备上设置此限制将导致返回错误MUSA_ERROR_UNSUPPORTED_LIMIT。
  • MU_LIMIT_MAX_L2_FETCH_GRANULARITY控制L2缓存获取粒度。值可以从0B到128B。这纯粹是一个性能提示,可以根据平台忽略或限制。
  • MU_LIMIT_PERSISTING_L2_CACHE_SIZE控制持久L2缓存的大小(以字节为单位)。这纯粹是一个性能提示,可以根据平台忽略或限制。

参数

limit - 要设置的限制
value - 限制的大小

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_UNSUPPORTED_LIMIT, MUSA_ERROR_OUT_OF_MEMORY,
MUSA_ERROR_INVALID_CONTEXT

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxDestroy, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetDevice, muCtxGetFlags, muCtxGetLimit,
muCtxPopCurrent, muCtxPushCurrent, muCtxSetCacheConfig, muCtxSynchronize, musaDeviceSetLimit

muCtxGetLimit()

MUresult MUSAAPI muCtxGetLimit (
size_t * pvalue,
MUlimit limit)

返回资源限制。

返回在∗pvalue中当前限制limit的大小。支持的MUlimit值有:

  • MU_LIMIT_STACK_SIZE:每个GPU线程的堆栈大小(以字节为单位)。
  • MU_LIMIT_PRINTF_FIFO_SIZE:printf()设备系统调用使用的FIFO的大小(以字节为单位)。
  • MU_LIMIT_MALLOC_HEAP_SIZE:malloc()和free()设备系统调用使用的堆的大小(以字节为单位)。
  • MU_LIMIT_DEV_RUNTIME_SYNC_DEPTH:线程可以发出设备运行时调用musaDevice←-Synchronize()等待子网格启动完成的最大网格深度。
  • MU_LIMIT_DEV_RUNTIME_PENDING_LAUNCH_COUNT:可以从此上下文发出的最大未完成设备运行时启动数量。
  • MU_LIMIT_MAX_L2_FETCH_GRANULARITY:L2缓存获取粒度。
  • MU_LIMIT_PERSISTING_L2_CACHE_SIZE:持久L2缓存大小(以字节为单位)

参数

limit - 要查询的限制
pvalue - 返回的限制大小

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_UNSUPPORTED_LIMIT

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxDestroy, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetDevice, muCtxGetFlags, muCtxPopCurrent,
muCtxPushCurrent, muCtxSetCacheConfig, muCtxSetLimit, muCtxSynchronize, musaDeviceGetLimit

muCtxGetCacheConfig()

MUresult MUSAAPI muCtxGetCacheConfig (
MUfunc_cache * pconfig)

返回当前上下文的首选缓存配置。

在L1缓存和共享内存使用相同硬件资源的设备上,此函数通过pconfig返回当前上下文的首选缓存配置。这只是偏好。驱动程序如果可能,将使用请求的配置,但如果需要执行函数,它可以选择不同的配置。

这将在L1缓存和共享内存大小固定的设备上返回MU_FUNC_CACHE_PREFER_NONE的pconfig。

支持的缓存配置有:

  • MU_FUNC_CACHE_PREFER_NONE:对共享内存或L1无偏好(默认)
  • MU_FUNC_CACHE_PREFER_SHARED:偏好更大的共享内存和更小的L1缓存
  • MU_FUNC_CACHE_PREFER_L1:偏好更大的L1缓存和更小的共享内存
  • MU_FUNC_CACHE_PREFER_EQUAL:偏好等大小的L1缓存和共享内存

参数

pconfig - 返回的缓存配置

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxDestroy, muCtxGetApiVersion, muCtxGetDevice, muCtxGetFlags, muCtxGetLimit, muCtxPopCurrent,
muCtxPushCurrent, muCtxSetCacheConfig, muCtxSetLimit, muCtxSynchronize, muFuncSetCacheConfig, musaDeviceGetCacheConfig

muCtxSetCacheConfig()

MUresult MUSAAPI muCtxSetCacheConfig (
MUfunc_cache config)

设置当前上下文的首选缓存配置。

在L1缓存和共享内存使用相同硬件资源的设备上,此设置通过config设置当前上下文的首选缓存配置。这只是偏好。驱动程序如果可能,将使用请求的配置,但如果需要执行函数,它可以选择不同的配置。通过muFuncSetCacheConfig()设置的任何函数偏好将优先于此上下文范围设置。将上下文范围缓存配置设置为MU_FUNC_CACHE_PREFER_NONE将导致随后的内核启动偏好不改变缓存配置,除非需要启动内核。

此设置在L1缓存和共享内存大小固定的设备上无效。

使用与最近偏好设置不同的偏好启动内核可能会在这些启动之间插入设备端同步点。

支持的缓存配置有:

  • MU_FUNC_CACHE_PREFER_NONE:对共享内存或L1无偏好(默认)
  • MU_FUNC_CACHE_PREFER_SHARED:偏好更大的共享内存和更小的L1缓存
  • MU_FUNC_CACHE_PREFER_L1:偏好更大的L1缓存和更小的共享内存
  • MU_FUNC_CACHE_PREFER_EQUAL:偏好等大小的L1缓存和共享内存

参数

config - 请求的缓存配置

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxDestroy, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetDevice, muCtxGetFlags, muCtxGetLimit,
muCtxPopCurrent, muCtxPushCurrent, muCtxSetLimit, muCtxSynchronize, muFuncSetCacheConfig, musaDeviceSetCacheConfig

muCtxGetSharedMemConfig()

MUresult MUSAAPI muCtxGetSharedMemConfig (
MUsharedconfig * pConfig)

返回当前上下文的当前共享内存配置。

此函数将在pConfig中返回当前上下文的共享内存银行的当前大小。在可配置共享内存银行的设备上,muCtxSetSharedMemConfig可以用来更改此设置,以便所有随后的内核启动默认使用新的银行大小。当在没有可配置共享内存的设备上调用muCtxGetSharedMemConfig时,它将返回硬件的固定银行大小。

返回的银行配置可以是:

  • MU_SHARED_MEM_CONFIG_FOUR_BYTE_BANK_SIZE:共享内存银行宽度为四个字节。
  • MU_SHARED_MEM_CONFIG_EIGHT_BYTE_BANK_SIZE:共享内存银行宽度为八个字节。

参数

pConfig - 返回的共享内存配置

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxDestroy, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetDevice, muCtxGetFlags, muCtxGetLimit,
muCtxPopCurrent, muCtxPushCurrent, muCtxSetLimit, muCtxSynchronize, muCtxGetSharedMemConfig, muFuncSetCacheConfig,
musaDeviceGetSharedMemConfig

muCtxSetSharedMemConfig()

MUresult MUSAAPI muCtxSetSharedMemConfig (
MUsharedconfig config)

设置当前上下文的共享内存配置。

在可配置共享内存银行的设备上,此函数将设置上下文的共享内存银行大小,用于随后的内核启动。

在启动之间更改共享内存配置可能会在这些启动之间插入设备端同步点。

更改共享内存银行大小不会增加共享内存使用量或影响内核的占用率,但可能会对性能产生重大影响。较大的银行大小将允许更大的潜在带宽到共享内存,但会改变哪些类型的共享内存访问会导致银行冲突。

此函数在固定共享内存银行大小的设备上无效。

支持的银行配置有:

  • MU_SHARED_MEM_CONFIG_DEFAULT_BANK_SIZE:将银行宽度设置为默认初始设置(目前,四个字节)。
  • MU_SHARED_MEM_CONFIG_FOUR_BYTE_BANK_SIZE:将共享内存银行宽度设置为本地四个字节。
  • MU_SHARED_MEM_CONFIG_EIGHT_BYTE_BANK_SIZE:将共享内存银行宽度设置为本地八个字节。

参数

config - 请求的共享内存配置

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxDestroy, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetDevice, muCtxGetFlags, muCtxGetLimit,
muCtxPopCurrent, muCtxPushCurrent, muCtxSetLimit, muCtxSynchronize, muCtxGetSharedMemConfig, muFuncSetCacheConfig,
musaDeviceSetSharedMemConfig

muCtxGetApiVersion()

MUresult MUSAAPI muCtxGetApiVersion (
MUcontext ctx,
unsigned int * version)

获取上下文的API版本。

返回一个版本号反转,对应于上下文的能力(例如3010或3020),库开发人员可以使用它来指导调用者使用特定的API版本。如果ctx为NULL,则返回用于创建当前绑定上下文的API版本。

请注意,只有当上下文能力发生变化,破坏二进制兼容性时,才会引入新的API版本,因此API版本和驱动程序版本可能会不同。例如,API版本为3020,而驱动程序版本为4020是有效的。

参数

ctx - 要检查的上下文
version - 指向版本的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_UNKNOWN

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxDestroy, muCtxGetDevice, muCtxGetFlags, muCtxGetLimit, muCtxPopCurrent, muCtxPushCurrent,
muCtxSetCacheConfig, muCtxSetLimit, muCtxSynchronize

muCtxGetStreamPriorityRange()

MUresult MUSAAPI muCtxGetStreamPriorityRange (
int * leastPriority,
int * greatestPriority)

返回对应于最低和最高流优先级的数值。

返回在∗leastPriority∗greatestPriority中分别对应于最低和最高流优先级的数值。流优先级遵循约定,较低的数字意味着更高的优先级。有意义的流优先级范围由[∗greatestPriority,∗leastPriority]给出。如果用户尝试创建一个优先级值超出此API指定的有意义的范围,优先级将自动向下或向上限制为∗leastPriority或∗greatestPriority。有关创建优先级流的详细信息,请参阅muStreamCreateWithPriority。如果不需要该值,可以传递NULL给∗leastPriority或∗greatestPriority。

如果当前上下文的设备不支持流优先级(请参阅muDeviceGetAttribute),此函数将在∗leastPriority∗greatestPriority中返回'0'。

参数

leastPriority - 指向int的指针,用于返回最低流优先级的数值
greatestPriority - 指向int的指针,用于返回最高流优先级的数值

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE,

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamCreateWithPriority, muStreamGetPriority, muCtxGetDevice, muCtxGetFlags, muCtxSetLimit, muCtxSynchronize, musa←-
DeviceGetStreamPriorityRange

muCtxResetPersistingL2Cache()

MUresult MUSAAPI muCtxResetPersistingL2Cache (
void )

将所有持久行在缓存中重置为正常状态。

muCtxResetPersistingL2Cache将所有持久行在缓存中重置为正常状态。在函数返回时生效。

返回值

MUSA_SUCCESS, MUSA_ERROR_NOT_SUPPORTED

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

MUaccessPolicyWindow

muCtxRecordEvent()

MUresult MUSAAPI muCtxRecordEvent (
MUcontext hCtx,
MUevent hEvent)

记录一个事件。

hEvent 中捕获 hCtx 上下文在此次调用时的所有活动。hEventhCtx 必须来自同一 MUSA 上下文,否则将返回 MUSA_ERROR_INVALID_HANDLE。然后,muEventQuery() 或 muCtxWaitEvent() 等调用将检查或等待捕获的工作完成。在此调用后使用 hCtx 不会修改 hEvent。如果传递给 hCtx 的上下文是主要上下文,hEvent 将捕获主要上下文及其绿色上下文的所有活动。如果传递给 hCtx 的上下文是通过 muCtxFromGreenCtx() 从绿色上下文转换的上下文,hEvent 将只捕获绿色上下文的活动。

注意:

如果指定的上下文 hCtx 中有流处于捕获模式,API 将返回 MUSA_ERROR_STREAM_CAPTURE_UNSUPPORTED。在这种情况下,调用将使所有冲突的捕获无效。

参数

hCtx - 要记录事件的上下文
hEvent - 要记录的事件

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_STREAM_CAPTURE_UNSUPPORTED

另请参阅

muCtxWaitEvent, muGreenCtxRecordEvent, muGreenCtxWaitEvent, muEventRecord

muCtxWaitEvent()

MUresult MUSAAPI muCtxWaitEvent (
MUcontext hCtx,
MUevent hEvent)

使上下文等待事件。

使提交到 hCtx 上下文的所有未来工作等待在 hEvent 中捕获的所有工作完成。同步将在设备上执行,不会阻塞调用的CPU线程。有关事件捕获内容的详细信息,请参见 ::muCtxRecordEvent()。

如果传递给 hCtx 的上下文是主上下文,则主上下文及其绿色上下文将等待 hEvent。如果传递给 hCtx 的上下文是通过 ::muCtxFromGreenCtx() 从绿色上下文转换的上下文,则绿色上下文将等待 hEvent

注意: hEvent 可能来自与 hCtx 不同的上下文或设备。

注意: 如果指定的事件 hEvent 是正在进行的捕获序列的一部分,或者指定的上下文 hCtx 中有流处于捕获模式,API将返回 ::MUSA_ERROR_STREAM_CAPTURE_UNSUPPORTED。在这种情况下,调用将使所有冲突的捕获无效。

参数

hCtx - 要等待的上下文
hEvent - 要等待的事件

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_STREAM_CAPTURE_UNSUPPORTED

另请参阅

muCtxRecordEvent, muGreenCtxRecordEvent, muGreenCtxWaitEvent, muStreamWaitEvent

muCtxAttach()

__MUSA_DEPRECATED MUresult MUSAAPI muCtxAttach (
MUcontext * pctx,
unsigned int flags)

增加上下文的使用计数。

弃用 请注意,此函数已被弃用,不应使用。

增加上下文的使用计数,并在 *pctx 中返回一个上下文句柄,当应用程序完成使用该上下文时,必须将其传递给 ::muCtxDetach()。如果线程当前没有上下文,则 ::muCtxAttach() 失败。

目前,flags 参数必须为 0。

参数

pctx - 返回当前上下文的上下文句柄
flags - 上下文附加标志(必须为 0)

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxDestroy, muCtxDetach, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetDevice, muCtxGetFlags,
muCtxGetLimit, muCtxPopCurrent, muCtxPushCurrent, muCtxSetCacheConfig, muCtxSetLimit, muCtxSynchronize

muCtxDetach()

__MUSA_DEPRECATED MUresult MUSAAPI muCtxDetach (
MUcontext ctx)

减少上下文的使用计数。

弃用 请注意,此函数已被弃用,不应使用。

减少上下文 ctx 的使用计数,如果使用计数变为 0,则销毁该上下文。上下文必须是通过 ::muCtxCreate() 或 ::muCtxAttach() 返回的句柄,并且必须是调用线程的当前上下文。

参数

ctx - 要销毁的上下文

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT

注意: 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxCreate, muCtxDestroy, muCtxGetApiVersion, muCtxGetCacheConfig, muCtxGetDevice, muCtxGetFlags,
muCtxGetLimit, muCtxPopCurrent, muCtxPushCurrent, muCtxSetCacheConfig, muCtxSetLimit, muCtxSynchronize

模块管理函数

增加上下文的使用计数。

muModuleLoad()

MUresult MUSAAPI muModuleLoad (
MUmodule * module,
const char * fname)

加载计算模块。

接受文件名fname并将相应的模块module加载到当前上下文中。MUSA驱动API不会尝试延迟分配模块所需的资源;如果无法为模块分配函数和数据(常量和全局)所需的内存,muModuleLoad()将失败。文件应该是由nvcc输出的mubinfile,或者是nvcc输出的PTX文件,或者是手写的PTX文件,或者是nvcc从工具链4.0或更高版本输出的fatbinfile。

参数

module - 返回的模块
fname - 要加载的模块的文件名

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_PTX, MUSA_ERROR_UNSUPPORTED_PTX_VERSION,
MUSA_ERROR_NOT_FOUND, MUSA_ERROR_OUT_OF_MEMORY, MUSA_ERROR_FILE_NOT_FOUND,
MUSA_ERROR_NO_BINARY_FOR_GPU, MUSA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND,
MUSA_ERROR_SHARED_OBJECT_INIT_FAILED, MUSA_ERROR_JIT_COMPILER_NOT_FOUND

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muModuleGetFunction, muModuleGetGlobal, muModuleGetTexRef, muModuleLoadData, muModuleLoadDataEx,
muModuleLoadFatBinary, muModuleUnload

muModuleLoadData()

MUresult MUSAAPI muModuleLoadData (
MUmodule * module,
const void * image)

加载模块数据。

接受指针image并将相应的模块module加载到当前上下文中。指针可以通过映射mubin或PTX或fatbinfile获得,将mubin或PTX或fatbinfile作为NULL终止的文本字符串传递,或者将mubin或fatbin对象合并到可执行资源中,并使用操作系统调用来获得指针,如Windows FindResource()

参数

module - 返回的模块
image - 要加载的模块数据

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_PTX, MUSA_ERROR_UNSUPPORTED_PTX_VERSION,
MUSA_ERROR_OUT_OF_MEMORY, MUSA_ERROR_NO_BINARY_FOR_GPU, MUSA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND,
MUSA_ERROR_SHARED_OBJECT_INIT_FAILED, MUSA_ERROR_JIT_COMPILER_NOT_FOUND

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muModuleGetFunction, muModuleGetGlobal, muModuleGetTexRef, muModuleLoad, muModuleLoadDataEx, muModuleLoadFatBinary,
muModuleUnload

uModuleLoadDataEx()

MUresult MUSAAPI muModuleLoadDataEx (
MUmodule * module,
const void * image,
unsigned int numOptions,
MUjit_option * options,
void ** optionValues)

用选项加载模块数据。

接受指针image并将相应的模块module加载到当前上下文中。指针可以通过映射mubin或PTX或fatbinfile获得,将mubin或PTX或fatbinfile作为NULL终止的文本字符串传递,或者将mubin或fatbin对象合并到可执行资源中,并使用操作系统调用来获得指针,如Windows FindResource()。选项作为数组通过options传递,任何相应的参数都在optionValues中传递。总选项数通过numOptions提供。任何输出将通过optionValues返回。

参数

module - 返回的模块
image - 要加载的模块数据
numOptions - 选项数量
options - JIT选项
optionValues - JIT选项值

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_PTX, MUSA_ERROR_UNSUPPORTED_PTX_VERSION,
MUSA_ERROR_OUT_OF_MEMORY, MUSA_ERROR_NO_BINARY_FOR_GPU, MUSA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND,
MUSA_ERROR_SHARED_OBJECT_INIT_FAILED, MUSA_ERROR_JIT_COMPILER_NOT_FOUND

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muModuleGetFunction, muModuleGetGlobal, muModuleGetTexRef, muModuleLoad, muModuleLoadData, muModuleLoadFatBinary,
muModuleUnload

muModuleLoadFatBinary()

MUresult MUSAAPI muModuleLoadFatBinary (
MUmodule * module,
const void * fatMubin)

加载模块数据。

接受指针fatMubin并将相应的模块module加载到当前上下文中。指针代表一个fat binary对象,这是一个不同的mubin和/或PTX文件的集合,所有这些都表示相同的设备代码,但为不同的架构编译和优化。

在MUSA 4.0之前,没有文档化的API供程序员构建和使用fat binary对象。从MUSA 4.0开始,可以通过提供-fatbin选项给nvcc来构建fat binary对象。更多信息可以在nvcc文档中找到。

参数

module - 返回的模块
fatMubin - 要加载的fat binary

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_PTX, MUSA_ERROR_UNSUPPORTED_PTX_VERSION,
MUSA_ERROR_NOT_FOUND, MUSA_ERROR_OUT_OF_MEMORY, MUSA_ERROR_NO_BINARY_FOR_GPU,
MUSA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND, MUSA_ERROR_SHARED_OBJECT_INIT_FAILED,
MUSA_ERROR_JIT_COMPILER_NOT_FOUND

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muModuleGetFunction, muModuleGetGlobal, muModuleGetTexRef, muModuleLoad, muModuleLoadData, muModuleLoadDataEx,
muModuleUnload

muModuleUnload()

MUresult MUSAAPI muModuleUnload (
MUmodule hmod)

卸载模块。

从当前上下文中卸载模块hmod。

参数

hmod - 要卸载的模块

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muModuleGetFunction, muModuleGetGlobal, muModuleGetTexRef, muModuleLoad, muModuleLoadData, muModuleLoadDataEx,
muModuleLoadFatBinary

muModuleGetLoadingMode()

MUresult MUSAAPI muModuleGetLoadingMode (
MUmoduleLoadingMode * mode)

查询懒加载模式。

返回懒加载模式。 模块加载模式由 MUSA_MODULE_LOADING 环境变量控制。

参数

mode - 返回懒加载模式

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muModuleLoad

muModuleGetFunction()

MUresult MUSAAPI muModuleGetFunction (
MUfunction * hfunc,
MUmodule hmod,
const char * name)

返回函数句柄。

返回在∗hfunc中位于模块hmod中的名称为name的函数的句柄。如果不存在该名称的函数,muModuleGetFunction()返回MUSA_ERROR_NOT_FOUND。

参数

hfunc - 返回的函数句柄
hmod - 要检索函数的模块
name - 要检索的函数名称

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_FOUND

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muModuleGetGlobal, muModuleGetTexRef, muModuleLoad, muModuleLoadData, muModuleLoadDataEx, muModuleLoadFatBinary,
muModuleUnload

muModuleGetFunctionCount()

MUresult MUSAAPI muModuleGetFunctionCount (
unsigned int * count,
MUmodule mod)

返回模块内的函数数量。

count 中返回模块 mod 中的函数数量。

参数

count - 模块内找到的函数数量
mod - 要查询的模块

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_INVALID_VALUE

另请参阅

muModuleGetFunction, muModuleGetGlobal, muModuleGetTexRef, muModuleLoad, muModuleUnload

muModuleEnumerateFunctions()

MUresult MUSAAPI muModuleEnumerateFunctions (
MUfunction * functions,
unsigned int numFunctions,
MUmodule mod)

返回模块内的函数句柄。

functions 中返回模块 mod 内最多 numFunctions 个函数句柄。当函数加载模式设置为 LAZY 时,检索到的函数可能是部分加载的。可以使用 muFunctionIsLoaded 查询函数的加载状态。当使用部分加载的函数句柄调用 MUSA API 时,可能会自动加载函数,这可能会产生额外的延迟。或者,可以使用 muFunctionLoad 显式加载函数。当模块被卸载时,返回的函数句柄将变得无效。

参数

functions - 返回函数句柄的缓冲区
numFunctions - 可返回到缓冲区的最大函数句柄数
mod - 要查询的模块

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_CONTEXT, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_INVALID_VALUE

另请参阅

muModuleGetFunction, muModuleGetFunctionCount, muFuncIsLoaded, muFuncLoad

muModuleGetGlobal()

MUresult MUSAAPI muModuleGetGlobal (
MUdeviceptr * dptr,
size_t * bytes,
MUmodule hmod,
const char * name)

从模块返回全局指针。

返回在∗dptr∗bytes中位于模块hmod中的名称为name的全局的基指针和大小。如果不存在该名称的变量,muModuleGetGlobal()返回MUSA_ERROR_NOT_FOUND。两个参数dptr和bytes都是可选的。如果其中一个是NULL,则被忽略。

参数

dptr - 返回的全局设备指针
bytes - 返回的全局大小(以字节为单位)
hmod - 要检索全局的模块
name - 要检索的全局名称

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_FOUND

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muModuleGetFunction, muModuleGetTexRef, muModuleLoad, muModuleLoadData, muModuleLoadDataEx, muModuleLoadFatBinary,
muModuleUnload, musaGetSymbolAddress, musaGetSymbolSize

muModuleGetTexRef()

MUresult MUSAAPI muModuleGetTexRef (
MUtexref * pTexRef,
MUmodule hmod,
const char * name)

返回纹理引用的句柄。

返回在∗pTexRef中模块hmod中名称为name的纹理引用的句柄。如果不存在该名称的纹理引用,muModuleGetTexRef()返回MUSA_ERROR_NOT_FOUND。这个纹理引用句柄不应该被销毁,因为它将在模块卸载时被销毁。

参数

pTexRef - 返回的纹理引用
hmod - 要检索纹理引用的模块
name - 要检索的纹理引用名称

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_FOUND

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muModuleGetFunction, muModuleGetGlobal, muModuleGetSurfRef, muModuleLoad, muModuleLoadData, muModuleLoadDataEx,
muModuleLoadFatBinary, muModuleUnload, musaGetTextureReference

muModuleGetSurfRef()

MUresult MUSAAPI muModuleGetSurfRef (
MUsurfref * pSurfRef,
MUmodule hmod,
const char * name)

返回表面引用的句柄。

返回在∗pSurfRef中模块hmod中名称为name的表面引用的句柄。如果不存在该名称的表面引用,muModuleGetSurfRef()返回MUSA_ERROR_NOT_FOUND。

参数

pSurfRef - 返回的表面引用
hmod - 要检索表面引用的模块
name - 要检索的表面引用名称

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_FOUND

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muModuleGetFunction, muModuleGetGlobal, muModuleGetTexRef, muModuleLoad, muModuleLoadData, muModuleLoadDataEx,
muModuleLoadFatBinary, muModuleUnload, musaGetSurfaceReference

内存管理

本节描述了低级 MUSA 驱动应用程序编程接口的内存管理功能。

muMemGetInfo()

MUresult MUSAAPI muMemGetInfo (
size_t ∗ free,
size_t ∗ total)

获取空闲和总内存。

分别返回 ∗free∗total,表示 MUSA 上下文可分配的空闲和总内存量,单位为字节。

参数

free - 返回的空闲内存,单位为字节
total - 返回的总内存,单位为字节

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D16,
muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaMemGetInfo

muMemAlloc()

MUresult MUSAAPI muMemAlloc (
MUdeviceptr ∗ dptr,
size_t bytesize)

分配设备内存。

在设备上分配 bytesize 字节的线性内存,并返回 ∗dptr 指向分配的内存。分配的内存适合任何类型的变量。内存不会被清零。如果 bytesize 为 0,则 muMemAlloc() 返回 MUSA_ERROR_INVALID_VALUE。

参数

dptr - 返回的设备指针
bytesize - 请求的分配大小,单位为字节

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync,
muMemcpyAtoA, muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync,
muMemcpyDtoH, muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync,
muMemFree, muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer,
muMemsetD2D8, muMemsetD2D16, muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaMalloc

muMemAllocPitch()

MUresult MUSAAPI muMemAllocPitch (
MUdeviceptr ∗ dptr,
size_t ∗ pPitch,
size_t WidthInBytes,
size_t Height,
unsigned int ElementSizeBytes)

分配带间距的设备内存。

在设备上分配至少 WidthInBytes ∗ Height 字节的线性内存,并返回 ∗dptr 指向分配的内存。该函数可能会对分配进行填充,以确保在行与行之间更新地址时,给定行中的相应指针将继续满足合并的对齐要求。ElementSizeBytes 指定将在内存范围内执行的最大读取和写入的大小。ElementSizeBytes 可以是 4、8 或 16(因为合并内存事务在其他数据大小上不可能)。如果 ElementSizeBytes 小于内核的实际读写大小,内核将正确运行,但可能速度较慢。muMemAllocPitch() 返回的间距 ∗pPitch 是分配的字节宽度。间距的预期用途是作为分配的单独参数,用于计算 2D 数组内的地址。给定类型为 T 的数组元素的行和列,地址计算如下: TpElement = (T)((char*)BaseAddress + Row*Pitch) + Column;

muMemAllocPitch() 返回的间距保证与 muMemcpy2D() 在所有情况下都能使用。对于 2D 数组的分配,建议程序员考虑使用 muMemAllocPitch() 进行间距分配。由于硬件中的对齐限制,如果应用程序将在设备内存的不同区域之间执行 2D 内存复制(无论是线性内存还是 MUSA 数组),这一点尤其正确。

muMemAllocPitch() 返回的间距的字节对齐保证与使用 muTexRefSetAddress2D() 进行纹理绑定的对齐要求相匹配或更高。

参数

dptr - 返回的设备指针
pPitch - 返回的分配间距,单位为字节
WidthInBytes - 请求的分配宽度,单位为字节
Height - 请求的分配高度,单位为行
ElementSizeBytes - 范围内执行的最大读取/写入的大小

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA, muMemcpyAtoD,
muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D16, muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaMallocPitch

muMemFree()

MUresult MUSAAPI muMemFree (
MUdeviceptr dptr)

释放设备内存。

释放由 dptr 指向的内存空间,该空间必须由之前的 muMemAlloc() 或 muMemAllocPitch() 调用返回。

参数

dptr - 指向要释放的内存的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFreeHost,
muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D16,
muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaFree

muMemGetAddressRange()

MUresult MUSAAPI muMemGetAddressRange (
MUdeviceptr ∗ pbase,
size_t ∗ psize,
MUdeviceptr dptr)

获取内存分配信息。

返回包含输入指针 dptr 的 muMemAlloc() 或 muMemAllocPitch() 分配的基地址 ∗pbase 和大小 ∗psize。两个参数 pbase 和 psize\ 都是可选的。如果其中一个是 NULL,则被忽略。

参数

pbase - 返回的基地址
psize - 返回的设备内存分配大小
dptr - 要查询的设备指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_NOT_FOUND, MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D16,
muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32

muMemAllocHost()

MUresult MUSAAPI muMemAllocHost (
void ∗∗ pp,
size_t bytesize)

分配锁定页面的主机内存。

分配 bytesize 字节的主机内存,该内存被锁定页面,并且可以被设备访问。驱动程序跟踪使用此函数分配的虚拟内存范围,并自动加速对函数(如 muMemcpy())的调用。由于内存可以直接被设备访问,因此它可以被读取或写入的带宽比使用 malloc() 等函数获得的分页内存要高得多。分配过多的锁定内存可能会降低系统性能,因为这会减少系统用于分页的内存量。因此,这个函数最好用于少量分配,用于在主机和设备之间交换数据的暂存区。

注意,使用 muMemHostAlloc() 分配的所有主机内存将自动立即对所有支持统一寻址的上下文和设备(可以使用 MU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING 查询)可用。用于从这些上下文访问此主机内存的设备指针始终等于返回的主机指针 ∗pp。有关更多详细信息,请参见统一寻址。

参数

pp - 返回的锁定页面内存的主机指针
bytesize - 请求的分配大小,单位为字节

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocPitch,
muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA, muMemcpyAtoD,
muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D16, muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaMallocHost

muMemFreeHost()

MUresult MUSAAPI muMemFreeHost (
void ∗ p)

释放锁定页面的主机内存。

释放由 p 指向的内存空间,该空间必须由之前的 muMemAllocHost() 调用返回。

参数

p - 指向要释放的内存的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D16,
muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaFreeHost

muMemHostAlloc()

MUresult MUSAAPI muMemHostAlloc (
void ∗∗ pp,
size_t bytesize,
unsigned int Flags)

分配锁定页面的主机内存。

分配 bytesize 字节的主机内存,该内存被锁定页面,并且可以被设备访问。驱动程序跟踪使用此函数分配的虚拟内存范围,并自动加速对函数(如 muMemcpyHtoD())的调用。由于内存可以直接被设备访问,因此它可以被读取或写入的带宽比使用 malloc() 等函数获得的分页内存要高得多。分配过多的固定内存可能会降低系统性能,因为这会减少系统用于分页的内存量。因此,这个函数最好用于少量分配,用于在主机和设备之间交换数据的暂存区。

Flags 参数启用不同的选项,影响分配,如下所示。

  • MU_MEMHOSTALLOC_PORTABLE:此次调用返回的内存将被视为所有 MUSA 上下文的固定内存,而不仅仅是执行分配的那个上下文。
  • MU_MEMHOSTALLOC_DEVICEMAP:将分配映射到 MUSA 地址空间。可以通过调用 muMemHostGetDevicePointer() 获得内存的设备指针。
  • MU_MEMHOSTALLOC_WRITECOMBINED:将内存分配为写合并(WC)。在某些系统配置上,WC 内存可以更快地通过 PCI Express 总线传输,但不能被大多数 CPU 高效读取。WC 内存是一个很好的选项,用于 CPU 写入和 GPU 通过映射固定内存或主机->设备传输读取的缓冲区。

所有这些标志都是彼此正交的:开发人员可以无限制地分配可移植或映射的内存。

MU_MEMHOSTALLOC_DEVICEMAP 标志可以在不支持映射固定内存的 MUSA 上下文中指定。失败被推迟到 muMemHostGetDevicePointer(),因为内存可以通过 MU_MEMHOSTALLOC_PORTABLE 标志映射到其他 MUSA 上下文中。

通过此函数分配的内存必须用 muMemFreeHost() 释放。

注意,使用 muMemHostAlloc() 分配的所有主机内存将自动立即对所有支持统一寻址的上下文和设备(可以使用 MU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING 查询)可用。除非指定了标志 MU_MEMHOSTALLOC_WRITECOMBINED,否则用于从这些上下文访问此主机内存的设备指针始终等于返回的主机指针 ∗pp。如果指定了 MU_MEMHOSTALLOC_WRITECOMBINED 标志,那么即使上下文支持统一寻址,也必须使用函数 muMemHostGetDevicePointer() 查询设备指针。有关更多详细信息,请参见统一寻址。

参数

pp - 返回的锁定页面内存的主机指针
bytesize - 请求的分配大小,单位为字节
Flags - 分配请求的标志

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D16,
muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaHostAlloc

muMemHostGetDevicePointer()

MUresult MUSAAPI muMemHostGetDevicePointer (
MUdeviceptr ∗ pdptr,
void ∗ p,
unsigned int Flags)

传递映射固定内存的设备指针。

传递由 muMemHostAlloc() 分配的映射、固定主机缓冲区 p 对应的设备指针 pdptr

如果分配内存时没有指定 MU_MEMHOSTALLOC_DEVICEMAP 标志,或者在不支持映射固定内存的 GPU 上调用该函数,muMemHostGetDevicePointer() 将失败。

对于具有非零值的设备属性 MU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 的设备,也可以使用主机指针 p 从设备访问内存。由 muMemHostGetDevicePointer() 返回的设备指针可能与原始主机指针 p 匹配,也可能不匹配,这取决于应用程序可见的设备。如果所有应用程序可见的设备都有非零值的设备属性,则由 muMemHostGetDevicePointer() 返回的设备指针将与原始指针 p 匹配。如果任何应用程序可见的设备对该设备属性的值为零,则由 muMemHostGetDevicePointer() 返回的设备指针将与原始主机指针 p 不匹配,但在启用统一虚拟寻址的情况下,它将适用于所有设备。在此类系统中,使用任一指针在具有非零值的设备属性的设备上访问内存是有效的。但请注意,这些设备应该只使用两个指针中的一个来访问内存,而不是两者都使用。

Flags 为将来的版本提供支持。目前,它必须设置为 0。

参数

pdptr - 返回的设备指针
p - 主机指针
Flags - 选项(必须为 0)

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync,
muMemcpyAtoA, muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync,
muMemcpyDtoH, muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync,
muMemFree, muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemsetD2D8, muMemsetD2D16,
muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaHostGetDevicePointer

muMemHostGetFlags()

MUresult MUSAAPI muMemHostGetFlags (
unsigned int ∗ pFlags,
void ∗ p)

传递固定分配所使用的标志。

传递在分配固定主机缓冲区 p 时指定的标志 pFlags,该缓冲区由 muMemHostAlloc() 分配。

如果指针不位于由 muMemAllocHost() 或 muMemHostAlloc() 执行的分配中,muMemHostGetFlags() 将失败。

参数

pFlags - 返回的标志字
p - 主机指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMemAllocHost, muMemHostAlloc, musaHostGetFlags

muMemAllocManaged()

MUresult MUSAAPI muMemAllocManaged (
MUdeviceptr ∗ dptr,
size_t bytesize,
unsigned int flags)

分配由统一内存系统自动管理的内存。

在设备上分配 bytesize 字节的托管内存,并返回 ∗dptr 指向分配的内存。如果设备不支持分配托管内存,则返回 MUSA_ERROR_NOT_SUPPORTED。可以使用设备属性 MU_DEVICE_ATTRIBUTE_MANAGED_MEMORY 查询对托管内存的支持。分配的内存适合任何类型的变量。内存不会被清零。如果 bytesize 为 0,则 muMemAllocManaged 返回 MUSA_ERROR_INVALID_VALUE。该指针在 CPU 和系统中所有支持托管内存的 GPU 上都有效。所有对此指针的访问都必须遵循统一内存编程模型。

flags 指定了此分配的默认流关联。flags 必须是 MU_MEM_ATTACH_GLOBAL 或 MU_MEM_ATTACH_HOST 之一。如果指定了 MU_MEM_ATTACH_GLOBAL,则此内存可以从任何设备上的任何流访问。如果指定了 MU_MEM_ATTACH_HOST,则分配不应从设备属性 MU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS 的值为零的设备访问;需要显式调用 muStreamAttachMemAsync 来启用此类设备的访问。

如果通过 muStreamAttachMemAsync 更改关联到单个流,则在该流被销毁时恢复 muMemAllocManaged 期间指定的默认关联。对于 托管 变量,默认关联始终是 MU_MEM_ATTACH_GLOBAL。请注意,销毁流是一个异步操作,因此更改为默认关联不会发生,直到流中的所有工作完成。

使用 muMemAllocManaged 分配的内存应该用 muMemFree 释放。

对于具有非零值的设备属性 MU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS 的 GPU,可以对设备内存进行超额订阅。此类 GPU 上的托管内存可能随时被统一内存驱动程序从设备内存驱逐到主机内存,以为其他分配腾出空间。

在所有 GPU 都具有非零值的设备属性 MU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS 的多 GPU 系统中,托管内存可能在该 API 返回时尚未被填充,而是在访问时被填充。在此类系统中,托管内存可以随时迁移到任何处理器的内存中。统一内存驱动程序将采用启发式方法来维护数据局部性,并尽可能防止过多的页面错误。应用程序还可以通过 muMemAdvise 指导驱动程序关于内存使用模式。应用程序还可以通过 muMemPrefetchAsync 显式将内存迁移到所需的处理器内存中。

在所有 GPU 的设备属性 MU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS 的值都为零,并且所有 GPU 都彼此支持对等(peer-to-peer)支持的多 GPU 系统中,托管内存的物理存储是在 muMemAllocManaged 被调用时活动的 GPU 上创建的。所有其他 GPU 将通过 PCIe 总线上的对等映射以降低的带宽引用数据。统一内存驱动程序不会在此类 GPU 之间迁移内存。

在不是所有 GPU 都彼此支持对等(peer-to-peer)支持,并且至少有一个 GPU 的设备属性 MU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS 的值为零的多 GPU 系统中,托管内存的物理存储位置取决于系统。

  • 在 Linux 上,只要当前的活动上下文集合在支持彼此对等(peer-to-peer)支持的设备上,或者具有非零值的设备属性 MU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS,选择的位置将是设备内存。如果有一个活动上下文在 GPU 上,该 GPU 不具有该设备属性的非零值,并且它不支持与具有活动上下文的其他设备对等(peer-to-peer),那么物理存储的位置将是“零拷贝”或主机内存。请注意,这意味着位于设备内存中的托管内存如果新上下文在 GPU 上创建,该 GPU 不具有该设备属性的非零值,并且不支持与至少一个其他具有活动上下文的设备对等(peer-to-peer),则会被迁移到主机内存。这反过来意味着,如果所有托管分配都无法迁移到主机内存,则上下文创建可能会失败。
  • 在 Windows 上,物理存储始终在“零拷贝”或主机内存中创建。所有 GPU 将通过 PCIe 总线以降低的带宽引用数据。在这些情况下,建议使用环境变量 MUSA_VISIBLE_DEVICES 限制 MUSA 仅使用支持对等(peer-to-peer)支持的 GPU。或者,用户也可以将 MUSA_MANAGED_FORCE_DEVICE_ALLOC 设置为非零值,以强制驱动程序始终使用设备内存进行物理存储。当此环境变量设置为非零值时,该进程中创建的所有上下文在支持托管内存的设备上都必须彼此对等(peer-to-peer)兼容。如果在支持托管内存的设备上创建上下文,并且该设备与之前创建的任何其他托管内存支持设备不兼容,则上下文创建将失败,即使这些上下文已被销毁。这些环境变量在 MUSA 编程指南的“MUSA 环境变量”部分中有描述。
  • 在 ARM 上,离散 GPU 上的 Drive PX-2 不提供托管内存。

参数

dptr - 返回的设备指针
bytesize - 请求的分配大小,单位为字节
flags - 必须是 MU_MEM_ATTACH_GLOBAL 或 MU_MEM_ATTACH_HOST 之一

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_NOT_SUPPORTED, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync,
muMemcpyAtoA, muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync,
muMemcpyDtoH, muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync,
muMemFree, muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer,
muMemsetD2D8, muMemsetD2D16, muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, muDeviceGetAttribute,
muStreamAttachMemAsync, musaMallocManaged

muDeviceRegisterAsyncNotification()

MUresult MUSAAPI muDeviceRegisterAsyncNotification (
MUdevice device,
MUasyncCallback callbackFunc,
void * userData,
MUasyncCallbackHandle * callback)

注册回调函数以接收异步通知。

注册 callbackFunc 以接收异步通知。

userData 参数在异步通知时传递给回调函数。同样,callback 也会传递给回调函数,以区分多个已注册的回调。

注册的回调函数应设计为快速返回(约10毫秒)。任何长时间运行的任务应排队在应用程序线程上执行。

回调函数不得调用 muDeviceRegisterAsyncNotificationmuDeviceUnregisterAsyncNotification。这样做将导致返回 MUSA_ERROR_NOT_PERMITTED。异步通知回调以未定义的顺序执行,并且可能被串行化。

*callback 中返回一个代表已注册回调实例的句柄。

参数

device - 要在其上注册回调的设备
callbackFunc - 要注册为回调的函数
userData - 指向用户数据的通用指针。这将传递给回调函数。
callback - 代表已注册回调实例的句柄

返回值

MUSA_SUCCESS, MUSA_ERROR_NOT_SUPPORTED, MUSA_ERROR_INVALID_DEVICE, MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_NOT_PERMITTED, MUSA_ERROR_UNKNOWN

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceUnregisterAsyncNotification

muDeviceUnregisterAsyncNotification()

MUresult MUSAAPI muDeviceUnregisterAsyncNotification (
MUdevice device,
MUasyncCallbackHandle callback)

取消注册异步通知回调。

取消注册 callback,以便相应的回调函数将停止接收异步通知。

参数

device - 要从中移除 `callback` 的设备。
callback - 要取消注册的回调实例,停止接收异步通知。

返回值

MUSA_SUCCESS, MUSA_ERROR_NOT_SUPPORTED, MUSA_ERROR_INVALID_DEVICE, MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_NOT_PERMITTED, MUSA_ERROR_UNKNOWN

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceRegisterAsyncNotification

muDeviceGetByPCIBusId()

MUresult MUSAAPI muDeviceGetByPCIBusId (
MUdevice ∗ dev,
const char ∗ pciBusId)

返回计算设备的句柄。

给定 PCI 总线 ID 字符串,返回 ∗device 中的设备句柄。

参数

dev - 返回的设备句柄
pciBusId - 字符串在以下形式之一:

其中 `domain`,`bus`,`device` 和 `function` 都是十六进制值

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceGet, muDeviceGetAttribute, muDeviceGetPCIBusId, musaDeviceGetByPCIBusId

muDeviceGetPCIBusId()

MUresult MUSAAPI muDeviceGetPCIBusId (
char ∗ pciBusId,
int len,
MUdevice dev )

返回设备的 PCI 总线 ID 字符串。

返回一个 ASCII 字符串,标识设备 dev 在由 pciBusId 指向的 NULL 终止字符串中。len 指定可以返回的字符串的最大长度。

参数

pciBusId 返回的设备标识符字符串,格式如下
len - 存储名称的字符串的最大长度
dev - 要获取标识符字符串的设备

其中 domain,bus,devicefunction 都是十六进制值。 pciBusId 应该足够大,可以存储 13 个字符,包括 NULL 终止符。

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceGet, muDeviceGetAttribute, muDeviceGetByPCIBusId, musaDeviceGetPCIBusId

muIpcGetEventHandle()

MUresult MUSAAPI muIpcGetEventHandle (
MUipcEventHandle ∗ pHandle,
MUevent event)

为先前分配的事件获取进程间句柄。

作为输入,采用先前创建的事件。此事件必须使用 MU_EVENT_INTERPROCESS 和 MU_EVENT_DISABLE_TIMING 标志创建。这个不透明的句柄可以复制到其他进程,并使用 muIpcOpenEventHandle 打开,以允许在不同进程中的 GPU 工作之间进行高效的硬件同步。

在导入进程中打开事件后,可以在任一进程中使用 muEventRecord, muEventSynchronize, muStreamWaitEvent 和 muEventQuery。在导出事件被 muEventDestroy 释放后对导入事件执行操作将导致未定义的行为。

IPC 功能仅限于在 Linux 和 Windows 操作系统上支持统一寻址的设备。Windows 上的 IPC 功能仅限于 TCC 模式的 GPU

参数

pHandle - 用户分配的 MUipcEventHandle 指针,用于返回不透明的事件句柄
event - 使用 MU_EVENT_INTERPROCESS 和 [MU_EVENT_DISABLE_TIMING](#event_disable_timing) 标志分配的事件。

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_OUT_OF_MEMORY, MUSA_ERROR_MAP_FAILED,
MUSA_ERROR_INVALID_VALUE

另请参阅

muEventCreate, muEventDestroy, muEventSynchronize, muEventQuery, muStreamWaitEvent, muIpcOpenEventHandle,
muIpcGetMemHandle, muIpcOpenMemHandle, muIpcCloseMemHandle, musaIpcGetEventHandle

muIpcOpenEventHandle()

MUresult MUSAAPI muIpcOpenEventHandle (
MUevent ∗ phEvent,
MUipcEventHandle handle)

打开进程间事件句柄以在当前进程中使用。

从另一个进程中导出的进程间事件句柄,使用 muIpcGetEventHandle。此函数返回一个 MUevent,其行为类似于本地创建的事件,指定了 MU_EVENT_DISABLE_TIMING 标志。此事件必须用 muEventDestroy 释放。

在导出事件被 muEventDestroy 释放后对导入事件执行操作将导致未定义的行为。

IPC 功能仅限于在 Linux 和 Windows 操作系统上支持统一寻址的设备。Windows 上的 IPC 功能仅限于 TCC 模式的 GPU

参数

phEvent - 返回导入的事件
handle - 要打开的进程间句柄

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_CONTEXT, MUSA_ERROR_MAP_FAILED, MUSA_ERROR_PEER_ACCESS_UNSUPPORTED,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_INVALID_VALUE

另请参阅

muEventCreate, muEventDestroy, muEventSynchronize, muEventQuery, muStreamWaitEvent, muIpcGetEventHandle,
muIpcGetMemHandle, muIpcOpenMemHandle, muIpcCloseMemHandle, musaIpcOpenEventHandle

uIpcGetMemHandle()

MUresult MUSAAPI muIpcGetMemHandle (
MUipcMemHandle ∗ pHandle,
MUdeviceptr dptr)

为现有的设备内存分配获取进程间内存句柄。

采用指向现有设备内存分配基地址的指针,该分配是使用 muMemAlloc 创建的,并将其导出以在另一个进程中使用。这是一个轻量级操作,可以在分配上多次调用,而不会产生不良影响。

如果内存区域被 muMemFree 释放,并且随后对 muMemAlloc 的调用返回了具有相同设备地址的内存,则 muIpcGetMemHandle 将为新内存返回一个唯一的句柄。

IPC 功能仅限于在 Linux 和 Windows 操作系统上支持统一寻址的设备。Windows 上的 IPC 功能仅限于 TCC 模式的 GPU

参数

pHandle - 用户分配的 MUipcMemHandle 指针,用于返回句柄。
dptr - 先前分配的设备内存的基指针

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_INVALID_CONTEXT, MUSA_ERROR_OUT_OF_MEMORY,
MUSA_ERROR_MAP_FAILED, MUSA_ERROR_INVALID_VALUE

另请参阅

muMemAlloc, muMemFree, muIpcGetEventHandle, muIpcOpenEventHandle, muIpcOpenMemHandle, muIpcCloseMemHandle,←-
musaIpcGetMemHandle

muIpcOpenMemHandle()

MUresult MUSAAPI muIpcOpenMemHandle (
MUdeviceptr ∗ pdptr,
MUipcMemHandle handle,
unsigned int Flags)

打开从另一个进程导出的进程间内存句柄,并返回在本地进程中可用的设备指针。

将从另一个进程中导出的内存,使用 muIpcGetMemHandle 映射到当前设备地址空间。对于不同设备上的上下文,muIpcOpenMemHandle 可以尝试启用设备之间的对等访问,就好像用户调用了 muCtxEnablePeerAccess。这种行为由 Flags 控制。

  • MU_IPC_MEM_LAZY_ENABLE_PEER_ACCESS:不交错。MUSA 选择 PCIe 或 MT-Link 路径。
  • MU_IPC_MEM_LAZY_UNIDIR_INTERLEAVE_PEER_ACCESS:在 PCIe 和 MT-Link 之间交错 MUSA 确定单向算法的自适应最优比例。
  • MU_IPC_MEM_LAZY_BIDIR_INTERLEAVE_PEER_ACCESS:在 PCIe 和 MT-Link 之间交错。MUSA 确定双向算法的自适应最优比例。
  • MU_IPC_MEM_LAZY_HETERO_INTERLEAVE_PEER_ACCESS:在 PCIe 和 MT-Link 之间交错 MUSA 确定异构算法的自适应最优比例。
  • MU_IPC_MEM_LAZY_HETERO_BIDIR_INTERLEAVE_PEER_ACCESS:在 PCIe 和 MT-Link 之间交错。MUSA 确定异构双向算法的自适应最优比例。
  • MU_IPC_MEM_LAZY_HALF_BIDIR_INTERLEAVE_PEER_ACCESS:在 PCIe 和 MT-Link 之间交错。MUSA 确定半双向算法的自适应最优比例。
  • MU_IPC_MEM_LAZY_HETERO_BIDIR_INTERLEAVE_PEER_ACCESS:不交错。MUSA 强制通过 PCIe 路径启用对等访问。

muDeviceCanAccessPeer 可以确定是否可能进行映射。

可以打开 CUipcMemHandles 的上下文受到以下限制。每个进程中的每个 MUdevice 的 CUipcMemHandles 只能由每个其他进程中的一个 MUcontext 打开。

如果内存句柄已经被当前上下文打开,则句柄的引用计数增加 1,并且返回现有的设备指针。

从 muIpcOpenMemHandle 返回的内存必须用 muIpcCloseMemHandle 释放。

在导入上下文中调用 muIpcCloseMemHandle 之前,在导出内存区域上调用 muMemFree 将导致未定义的行为。

IPC 功能仅限于在 Linux 和 Windows 操作系统上支持统一寻址的设备。Windows 上的 IPC 功能仅限于 TCC 模式的 GPU

参数

pdptr - 返回的设备指针
handle - 要打开的 MUipcMemHandle
Flags - 确定在此操作中如何打开对等访问内存的标志。

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_CONTEXT, MUSA_ERROR_MAP_FAILED, MUSA_ERROR_INVALID_HANDLE,
MUSA_ERROR_TOO_MANY_PEERS, MUSA_ERROR_INVALID_VALUE

注意

对于∗pdptr 返回的地址没有保证。特别是,不同的进程可能不会为同一个句柄接收到相同的地址。

另请参阅

muMemAlloc, muMemFree, muIpcGetEventHandle, muIpcOpenEventHandle, muIpcGetMemHandle, muIpcCloseMemHandle,
muCtxEnablePeerAccess, muDeviceCanAccessPeer, musaIpcOpenMemHandle

muIpcCloseMemHandle()

MUresult MUSAAPI muIpcCloseMemHandle(MUdeviceptr dptr);

尝试关闭通过 muIpcOpenMemHandle 映射的内存。

将通过 muIpcOpenMemHandle 返回的内存的引用计数减1。当引用计数达到0时,此API将取消映射该内存。导出进程中的原始分配以及其他进程中的导入映射将不受影响。

如果这是使用对等访问资源的最后一个映射,将释放用于启用对等访问的任何资源。

IPC功能仅限于在Linux和Windows操作系统上支持统一寻址的设备。 Windows上的IPC功能是为了兼容性而支持的,但不推荐使用,因为它会带来性能损失。 用户可以通过使用 MU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED 调用 cuapiDeviceGetAttribute 来测试其设备的IPC功能。

参数

dptr - 由 muIpcOpenMemHandle 返回的设备指针

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_CONTEXT, MUSA_ERROR_MAP_FAILED, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_INVALID_VALUE

另请参阅

muMemAlloc, muMemFree,muIpcGetEventHandle, muIpcOpenEventHandle, muIpcGetMemHandle, muIpcOpenMemHandle, musaIpcCloseMemHandle

muMemHostUnregister()

MUresult MUSAAPI muMemHostUnregister(void *p)

注销先前通过 muMemHostRegister 注册的内存范围。

取消映射以基地址 p 指定的内存范围,并使其再次可分页。

基地址必须与传递给 muMemHostRegister() 的地址相同。

参数

p - 要注销的主机内存指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY, MUSA_ERROR_HOST_MEMORY_NOT_REGISTERED

注意: 此函数也可能返回来自先前异步操作的错误码。 此函数是同步的。

另请参阅

muMemHostRegister, musaHostUnregister

muMemcpy()

MUresult MUSAAPI muMemcpy(MUdeviceptr dst, MUdeviceptr src, size_t ByteCount);

\brief 复制内存

在两个指针之间复制数据。dstsrc 分别是目标和源的基指针。ByteCount 指定要复制的字节数。

请注意,此函数从指针值推断传输类型(主机到主机、主机到设备、设备到设备或设备到主机)。此函数仅在支持统一寻址的上下文中允许。

参数

dst - 目标统一虚拟地址空间指针
src - 源统一虚拟地址空间指针
ByteCount - 内存复制的大小(以字节为单位)

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT, MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。 此函数是同步的。 此函数仅在支持统一寻址的上下文中可用。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate,
muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned,
muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA, muMemcpyAtoD,
muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD,
muMemcpyDtoDAsync, muMemcpyDtoH, muMemcpyDtoHAsync, muMemcpyHtoA,
muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc,
muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D16,
muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32,
musaMemcpy, musaMemcpyToSymbol, musaMemcpyFromSymbol

muMemcpyPeer()

MUresult MUSAAPI muMemcpyPeer(MUdeviceptr dstDevice, MUcontext dstContext, MUdeviceptr srcDevice, MUcontext srcContext, size_t ByteCount);

在两个上下文之间复制设备内存

从一个上下文中的设备内存复制到另一个上下文中的设备内存。dstDevice 是目标内存的基设备指针,dstContext 是目标上下文。srcDevice 是源内存的基设备指针,srcContext 是源上下文。ByteCount 指定要复制的字节数。

参数

dstDevice - 目标设备指针
dstContext - 目标上下文
srcDevice - 源设备指针
srcContext - 源上下文
ByteCount - 内存复制的大小(以字节为单位)

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT, MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。 此函数是同步的。

另请参阅

muMemcpyDtoD, muMemcpy3DPeer, muMemcpyDtoDAsync, muMemcpyPeerAsync,
muMemcpy3DPeerAsync, musaMemcpyPeer

muMemcpyHtoD()

MUresult MUSAAPI muMemcpyHtoD(MUdeviceptr dstDevice, const void *srcHost, size_t ByteCount);

从主机复制内存到设备。

从主机内存复制到设备内存。dstDevicesrcHost 分别是目标和源的基地址。ByteCount 指定要复制的字节数。

参数

dstDevice - 目标设备指针
srcHost - 源主机指针
ByteCount - 内存复制的大小(以字节为单位)

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。 此函数是同步的。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoDAsync, muMemFree, muMemFreeHost,
muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D16,
muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaMemcpy, musaMemcpyToSymbol

muMemcpyDtoH()

MUresult MUSAAPI muMemcpyDtoH(void *dstHost, MUdeviceptr srcDevice, size_t ByteCount);

从设备复制内存到主机。

从设备内存复制到主机内存。dstHostsrcDevice 分别是目标和源的基指针。ByteCount 指定要复制的字节数。

参数

dstHost - 目标主机指针
srcDevice - 源设备指针
ByteCount - 内存复制的大小(以字节为单位)

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。 此函数是同步的。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree, muMemFreeHost,
muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D16,
muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaMemcpy, musaMemcpyFromSymbol

muMemcpyDtoD()

MUresult MUSAAPI muMemcpyDtoD(MUdeviceptr dstDevice, MUdeviceptr srcDevice, size_t ByteCount);

从设备复制内存到设备。

从设备内存复制到设备内存。dstDevicesrcDevice 分别是目标和源的基指针。ByteCount 指定要复制的字节数。

参数

dstDevice - 目标设备指针
srcDevice - 源设备指针
ByteCount - 内存复制的大小(以字节为单位)

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。 此函数是同步的。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoH, muMemcpyDtoHAsync, muMemcpyHtoA,
muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree, muMemFreeHost, muMemGetAddressRange,
muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D16, muMemsetD2D32,
muMemsetD8, muMemsetD16, muMemsetD32, musaMemcpy, musaMemcpyToSymbol, musaMemcpyFromSymbol

muMemcpyDtoA()

MUresult MUSAAPI muMemcpyDtoA (
MUarray dstArray,
size_t dstOffset,
MUdeviceptr srcDevice,
size_t ByteCount)

从设备复制内存到数组。

从设备内存复制到一维 MUSA 数组。dstArraydstOffset 指定目标数据的 MUSA 数组句柄和起始索引(以字节为单位)。srcDevice 指定源的基指针。ByteCount 指定要复制的字节数。

参数

dstArray - 目标数组
dstOffset - 目标数组的偏移量(以字节为单位)
srcDevice - 源设备指针
ByteCount - 内存复制的大小(以字节为单位)

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。 此函数是同步的。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH, muMemcpyDtoHAsync,
muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree, muMemFreeHost, muMemGetAddressRange,
muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D16, muMemsetD2D32, muMemsetD8,
muMemsetD16, muMemsetD32, musaMemcpyToArray

muMemcpyAtoD()

MUresult MUSAAPI muMemcpyAtoD (
MUdeviceptr dstDevice,
MUarray srcArray,
size_t srcOffset,
size_t ByteCount)

从数组复制内存到设备。

从一维 MUSA 数组复制到设备内存。dstDevice 指定目标的基指针,必须与 MUSA 数组元素自然对齐。srcArraysrcOffset 指定 MUSA 数组句柄和数组中复制开始的字节偏移量。ByteCount 指定要复制的字节数,必须能被数组元素大小整除。

参数

dstDevice - 目标设备指针
srcArray - 源数组
srcOffset - 源数组的字节偏移量
ByteCount - 内存复制的大小(以字节为单位)

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。 此函数是同步的。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH, muMemcpyDtoHAsync,
muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree, muMemFreeHost, muMemGetAddressRange,
muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D16, muMemsetD2D32, muMemsetD8,
muMemsetD16, muMemsetD32, musaMemcpyFromArray

muMemcpyHtoA()

MUresult MUSAAPI muMemcpyHtoA(MUarray dstArray, size_t dstOffset, const void *srcHost, size_t ByteCount);

从主机复制内存到数组。

从主机内存复制到一维 MUSA 数组。dstArraydstOffset 指定目标数据的 MUSA 数组句柄和起始偏移量(以字节为单位)。srcHost 指定源的基地址。ByteCount 指定要复制的字节数。

参数

dstArray - 目标数组
dstOffset - 目标数组的偏移量(以字节为单位)
srcHost - 源主机指针
ByteCount - 内存复制的大小(以字节为单位)

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。 此函数是同步的。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree, muMemFreeHost,
muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D16,
muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaMemcpyToArray

muMemcpyAtoH()

MUresult MUSAAPI muMemcpyAtoH(void *dstHost, MUarray srcArray, size_t srcOffset, size_t ByteCount);

从数组复制内存到主机。

从一维 MUSA 数组复制到主机内存。dstHost 指定目标的基指针。srcArraysrcOffset 指定源数据的 MUSA 数组句柄和起始偏移量(以字节为单位)。ByteCount 指定要复制的字节数。

参数

dstHost - 目标主机指针
srcArray - 源数组
srcOffset - 源数组的偏移量(以字节为单位)
ByteCount - 内存复制的大小(以字节为单位)

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。 此函数是同步的。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH, muMemcpyDtoHAsync,
muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree, muMemFreeHost, muMemGetAddressRange,
muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D16, muMemsetD2D32, muMemsetD8,
muMemsetD16, muMemsetD32, musaMemcpyFromArray

muMemcpyAtoA()

MUresult MUSAAPI muMemcpyAtoA(MUarray dstArray, size_t dstOffset, MUarray srcArray, size_t srcOffset, size_t ByteCount);

从数组复制内存到数组。

从一个一维 MUSA 数组复制到另一个。dstArraysrcArray 分别指定目标和源 MUSA 数组的句柄。dstOffsetsrcOffset 分别指定目标和源 MUSA 数组中的字节偏移量。ByteCount 是要复制的字节数。MUSA 数组中元素的大小不需要相同格式,但元素必须具有相同的大小;并且计数必须能被该大小整除。

参数

dstArray - 目标数组
dstOffset - 目标数组的偏移量(以字节为单位)
srcArray - 源数组
srcOffset - 源数组的偏移量(以字节为单位)
ByteCount - 内存复制的大小(以字节为单位)

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。 此函数是同步的。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoD,
muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH, muMemcpyDtoHAsync,
muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree, muMemFreeHost, muMemGetAddressRange,
muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D16, muMemsetD2D32, muMemsetD8,
muMemsetD16, muMemsetD32, musaMemcpyArrayToArray

muMemcpy3D()

MUresult MUSAAPI muMemcpy3D (
const MUSA_MEMCPY3D ∗ pCopy)

复制3D数组的内存

根据 pCopy 指定的参数执行3D内存复制。MUSA_MEMCPY3D 结构体定义如下:

typedef struct MUSA_MEMCPY3D_st {
unsigned int srcXInBytes, srcY, srcZ;
unsigned int srcLOD;
MUmemorytype srcMemoryType;
const void*srcHost;
MUdeviceptr srcDevice;
MUarray srcArray;
unsigned int srcPitch; // 当src是数组时忽略
unsigned int srcHeight; // 当src是数组时忽略;如果Depth==1可以为0
unsigned int dstXInBytes, dstY, dstZ;
unsigned int dstLOD;
MUmemorytype dstMemoryType;
void*dstHost;
MUdeviceptr dstDevice;
MUarray dstArray;
unsigned int dstPitch; // 当dst是数组时忽略
unsigned int dstHeight; // 当dst是数组时忽略;如果Depth==1可以为0
unsigned int WidthInBytes;
unsigned int Height;
unsigned int Depth;
} MUSA_MEMCPY3D;

其中:

  • srcMemoryType 和 dstMemoryType 分别指定源和目标的内存类型;MUmemorytype_enum 定义如下:
typedef enum MUmemorytype_enum {
MU_MEMORYTYPE_HOST = 0x01,
MU_MEMORYTYPE_DEVICE = 0x02,
MU_MEMORYTYPE_ARRAY = 0x03,
MU_MEMORYTYPE_UNIFIED = 0x04
} MUmemorytype;

如果 srcMemoryType 是 MU_MEMORYTYPE_UNIFIED,srcDevice 和 srcPitch 指定源数据的(统一虚拟地址空间)基地址和每行的字节数。srcArray 被忽略。这个值只有在调用上下文中支持统一寻址时才能使用。

如果 srcMemoryType 是 MU_MEMORYTYPE_HOST,srcHost、srcPitch 和 srcHeight 指定源数据的(主机)基地址、每行的字节数和3D数组每个2D切片的高度。srcArray 被忽略。

如果 srcMemoryType 是 MU_MEMORYTYPE_DEVICE,srcDevice、srcPitch 和 srcHeight 指定源数据的(设备)基地址、每行的字节数和3D数组每个2D切片的高度。srcArray 被忽略。

如果 srcMemoryType 是 MU_MEMORYTYPE_ARRAY,srcArray 指定源数据的句柄。srcHost、srcDevice、srcPitch 和 srcHeight 被忽略。

如果 dstMemoryType 是 MU_MEMORYTYPE_UNIFIED,dstDevice 和 dstPitch 指定目标数据的(统一虚拟地址空间)基地址和每行的字节数。dstArray 被忽略。这个值只有在调用上下文中支持统一寻址时才能使用。

如果 dstMemoryType 是 MU_MEMORYTYPE_HOST,dstHost 和 dstPitch 指定目标数据的(主机)基地址、每行的字节数和3D数组每个2D切片的高度。dstArray 被忽略。

如果 dstMemoryType 是 MU_MEMORYTYPE_DEVICE,dstDevice 和 dstPitch 指定目标数据的(设备)基地址、每行的字节数和3D数组每个2D切片的高度。dstArray 被忽略。

如果 dstMemoryType 是 MU_MEMORYTYPE_ARRAY,dstArray 指定目标数据的句柄。dstHost、dstDevice、dstPitch 和 dstHeight 被忽略。

  • srcXInBytes、srcY 和 srcZ 指定复制操作的源数据基地址。

对于主机指针,起始地址是 voidStart = (void)((char*)srcHost+(srcZ*srcHeight+srcY)*srcPitch + srcXInBytes);

对于设备指针,起始地址是 MUdeviceptr Start = srcDevice+(srcZ*srcHeight+srcY)*srcPitch+srcXInBytes;

对于 MUSA 数组,srcXInBytes 必须能被数组元素大小整除。

  • dstXInBytes、dstY 和 dstZ 指定复制操作的目标数据基地址。

对于主机指针,基地址是 voiddstStart = (void)((char*)dstHost+(dstZ*dstHeight+dstY)*dstPitch + dstXInBytes);

对于设备指针,起始地址是 MUdeviceptr dstStart = dstDevice+(dstZ*dstHeight+dstY)*dstPitch+dstXInBytes;

对于 MUSA 数组,dstXInBytes 必须能被数组元素大小整除。

  • WidthInBytes、Height 和 Depth 指定执行的3D复制的宽度(字节)、高度和深度。
  • 如果指定,srcPitch 必须大于或等于 WidthInBytes + srcXInBytes,dstPitch 必须大于或等于 WidthInBytes + dstXInBytes。
  • 如果指定,srcHeight 必须大于或等于 Height + srcY,dstHeight 必须大于或等于 Height + dstY。

muMemcpy3D() 如果任何 pitch 大于最大允许值(MU_DEVICE_ATTRIBUTE_MAX_PITCH)则返回错误。

MUSA_MEMCPY3D 结构体的 srcLOD 和 dstLOD 成员必须设置为 0。

参数

pCopy - 内存复制的参数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数是同步的。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D16, muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaMemcpy3D

muMemcpy3DPeer()

MUresult MUSAAPI muMemcpy3DPeer(const MUSA_MEMCPY3D_PEER *pCopy);

在上下文之间复制内存

根据 pCopy 中指定的参数执行3D内存复制。有关其参数的文档,请参见 MUSA_MEMCPY3D_PEER 结构体的定义。

参数

pCopy - 内存复制的参数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。 此函数是同步的。

另请参阅

muMemcpyDtoD, muMemcpyPeer, muMemcpyDtoDAsync, muMemcpyPeerAsync,
muMemcpy3DPeerAsync, musaMemcpy3DPeer

muMemcpyAsync()

MUresult MUSAAPI muMemcpyAsync (
MUdeviceptr dst,
MUdeviceptr src,
size_t ByteCount,
MUstream hStream )

异步复制内存

在两个指针 dstsrc 之间复制数据。dstsrc 分别是目标和源的基指针。ByteCount 指定要复制的字节数。注意,这个函数从指针值推断传输类型(主机到主机、主机到设备、设备到设备或设备到主机)。这个函数只在支持统一寻址的上下文中允许。

参数

dst - 目标统一虚拟地址空间指针
src - 源统一虚拟地址空间指针
ByteCount - 内存复制的大小,以字节为单位
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数是异步的。

支持使用空流。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync,
muMemcpyAtoA, muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D8Async, muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8,
muMemsetD8Async, muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemcpyAsync,
musaMemcpyToSymbolAsync, musaMemcpyFromSymbolAsync

muMemcpyPeerAsync()

MUresult MUSAAPI muMemcpyPeerAsync (
MUdeviceptr dstDevice,
MUcontext dstContext,
MUdeviceptr srcDevice,
MUcontext srcContext,
size_t ByteCount,
MUstream hStream )

异步在两个上下文之间复制设备内存。

从一个上下文的设备内存复制到另一个上下文的设备内存。dstDevice 是目标内存的基设备指针,dstContext 是目标上下文。srcDevice 是源内存的基设备指针,srcContext 是源上下文。ByteCount 指定要复制的字节数。

参数

dstDevice - 目标设备指针
dstContext - 目标上下文
srcDevice - 源设备指针
srcContext - 源上下文
ByteCount - 内存复制的大小,以字节为单位
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数是异步的。

支持使用空流。

另请参阅

muMemcpyDtoD, muMemcpyPeer, muMemcpy3DPeer, muMemcpyDtoDAsync, muMemcpy3DPeerAsync, musaMemcpyPeerAsync

muMemcpyHtoDAsync()

MUresult MUSAAPI muMemcpyHtoDAsync (
MUdeviceptr dstDevice,
const void ∗ srcHost,
size_t ByteCount,
MUstream hStream )

从主机复制内存到设备。

从主机内存复制到设备内存。dstDevicesrcHost 分别是目标和源的基地址。ByteCount 指定要复制的字节数。

参数

dstDevice - 目标设备指针
srcHost - 源主机指针
ByteCount - 内存复制的大小,以字节为单位
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数是异步的。

支持使用空流。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync,
muMemcpyAtoA, muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync,
muMemcpyDtoH, muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemFree, muMemFreeHost,
muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D8Async,
muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8, muMemsetD8Async,
muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemcpyAsync, musaMemcpyToSymbolAsync

muMemcpyDtoHAsync()

MUresult MUSAAPI muMemcpyDtoHAsync (
void ∗ dstHost,
MUdeviceptr srcDevice,
size_t ByteCount,
MUstream hStream )

从设备复制内存到主机。

从设备复制到主机内存。dstHostsrcDevice 指定目标和源的基指针。ByteCount 指定要复制的字节数。

参数

dstHost - 目标主机指针
srcDevice - 源设备指针
ByteCount - 内存复制的大小,以字节为单位
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数是异步的。

支持使用空流。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync,
muMemcpyAtoA, muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync,
muMemcpyDtoH, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree, muMemFreeHost,
muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D8Async,
muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8, muMemsetD8Async,
muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemcpyAsync, musaMemcpyFromSymbolAsync

muMemcpyDtoDAsync()

MUresult MUSAAPI muMemcpyDtoDAsync (
MUdeviceptr dstDevice,
MUdeviceptr srcDevice,
size_t ByteCount,
MUstream hStream )

从设备复制内存到设备。

从设备内存复制到设备内存。dstDevicesrcDevice 分别是目标和源的基指针。ByteCount 指定要复制的字节数。

参数

dstDevice - 目标设备指针
srcDevice - 源设备指针
ByteCount - 内存复制的大小,以字节为单位
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数是异步的。

支持使用空流。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync,
muMemcpyAtoA, muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D8Async, muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8,
muMemsetD8Async, muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemcpyAsync,
musaMemcpyToSymbolAsync, musaMemcpyFromSymbolAsync

muMemcpyHtoAAsync()

MUresult MUSAAPI muMemcpyHtoAAsync (
MUarray dstArray,
size_t dstOffset,
const void ∗srcHost,
size_t ByteCount,
MUstream hStream )

从主机复制内存到数组。

从主机内存复制到1D MUSA数组。dstArraydstOffset 指定目标数据的MUSA数组句柄和起始偏移量(字节)。srcHost 指定源的基地址。ByteCount 指定要复制的字节数。

参数

dstArray - 目标数组
dstOffset - 目标数组的偏移量(字节)
srcHost - 源主机指针
ByteCount - 内存复制的大小,以字节为单位
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数是异步的。

支持使用空流。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync,
muMemcpyAtoA, muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync,
muMemcpyDtoH, muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree, muMemFreeHost,
muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8, muMemsetD2D8Async,
muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8, muMemsetD8Async,
muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemcpyToArrayAsync

muMemcpyAtoHAsync()

MUresult MUSAAPI muMemcpyAtoHAsync (
void ∗ dstHost,
MUarray srcArray,
size_t srcOffset,
size_t ByteCount,
MUstream hStream )

从数组复制内存到主机。

从1D MUSA数组复制到主机内存。dstHost 指定目标的基指针。srcArraysrcOffset 指定源数据的MUSA数组句柄和起始偏移量(字节)。ByteCount 指定要复制的字节数。

参数

dstHost - 目标指针
srcArray - 源数组
srcOffset - 源数组的偏移量(字节)
ByteCount - 内存复制的大小,以字节为单位
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数是异步的。

支持使用空流。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync,
muMemcpyAtoA, muMemcpyAtoD, muMemcpyAtoH, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D8Async, muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8,
muMemsetD8Async, muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemcpyFromArrayAsync

muMemcpy2DAsync()

MUresult MUSAAPI muMemcpy2DAsync (
const MUSA_MEMCPY2D ∗ pCopy,
MUstream hStream )

复制2D数组的内存。

根据 pCopy 指定的参数执行2D内存复制。MUSA_MEMCPY2D 结构体定义如下:

typedef struct MUSA_MEMCPY2D_st {
unsigned int srcXInBytes, srcY;
MUmemorytype srcMemoryType;
const void*srcHost;
MUdeviceptr srcDevice;
MUarray srcArray;
unsigned int srcPitch;

unsigned int dstXInBytes, dstY;
MUmemorytype dstMemoryType;
void*dstHost;
MUdeviceptr dstDevice;
MUarray dstArray;
unsigned int dstPitch;

unsigned int WidthInBytes;
unsigned int Height;
} MUSA_MEMCPY2D;

其中:

  • srcMemoryType 和 dstMemoryType 分别指定源和目标的内存类型;MUmemorytype_enum 定义如下:
typedef enum MUmemorytype_enum {
MU_MEMORYTYPE_HOST = 0x01,
MU_MEMORYTYPE_DEVICE = 0x02,
MU_MEMORYTYPE_ARRAY = 0x03,
MU_MEMORYTYPE_UNIFIED = 0x04
} MUmemorytype;

如果 srcMemoryType 是 MU_MEMORYTYPE_HOST,srcHost 和 srcPitch 指定源数据的(主机)基地址和每行的字节数。srcArray 被忽略。

如果 srcMemoryType 是 MU_MEMORYTYPE_UNIFIED,srcDevice 和 srcPitch 指定源数据的(统一虚拟地址空间)基地址和每行的字节数。srcArray 被忽略。这个值只有在调用上下文中支持统一寻址时才能使用。

如果 srcMemoryType 是 MU_MEMORYTYPE_DEVICE,srcDevice 和 srcPitch 指定源数据的(设备)基地址和每行的字节数。srcArray 被忽略。

如果 srcMemoryType 是 MU_MEMORYTYPE_ARRAY,srcArray 指定源数据的句柄。srcHost、srcDevice 和 srcPitch 被忽略。

如果 dstMemoryType 是 MU_MEMORYTYPE_UNIFIED,dstDevice 和 dstPitch 指定目标数据的(统一虚拟地址空间)基地址和每行的字节数。dstArray 被忽略。这个值只有在调用上下文中支持统一寻址时才能使用。

如果 dstMemoryType 是 MU_MEMORYTYPE_HOST,dstHost 和 dstPitch 指定目标数据的(主机)基地址和每行的字节数。dstArray 被忽略。

如果 dstMemoryType 是 MU_MEMORYTYPE_DEVICE,dstDevice 和 dstPitch 指定目标数据的(设备)基地址和每行的字节数。dstArray 被忽略。

如果 dstMemoryType 是 MU_MEMORYTYPE_ARRAY,dstArray 指定目标数据的句柄。dstHost、dstDevice 和 dstPitch 被忽略。

  • srcXInBytes 和 srcY 指定复制操作的源数据基地址。

对于主机指针,起始地址是 voidStart = (void)((char*)srcHost+srcY*srcPitch + srcXInBytes);

对于设备指针,起始地址是 MUdeviceptr Start = srcDevice+srcY*srcPitch+srcXInBytes;

对于 MUSA 数组,srcXInBytes 必须能被数组元素大小整除。

  • dstXInBytes 和 dstY 指定复制操作的目标数据基地址。

对于主机指针,基地址是 voiddstStart = (void)((char*)dstHost+dstY*dstPitch + dstXInBytes);

对于设备指针,起始地址是 MUdeviceptr dstStart = dstDevice+dstY*dstPitch+dstXInBytes;

对于 MUSA 数组,dstXInBytes 必须能被数组元素大小整除。

  • WidthInBytes 和 Height 指定执行的2D复制的宽度(字节)和高度。
  • 如果指定,srcPitch 必须大于或等于 WidthInBytes + srcXInBytes,dstPitch 必须大于或等于 WidthInBytes + dstXInBytes。
  • 如果指定,srcPitch 必须大于或等于 WidthInBytes + srcXInBytes,dstPitch 必须大于或等于 WidthInBytes + dstXInBytes。
  • 如果指定,srcHeight 必须大于或等于 Height + srcY,dstHeight 必须大于或等于 Height + dstY。

muMemcpy2DAsync() 如果任何 pitch 大于最大允许值(MU_DEVICE_ATTRIBUTE_MAX_PITCH)则返回错误。 muMemAllocPitch() 传回的 pitches 总是可以与 muMemcpy2D() 一起使用。在设备内存复制(设备到设备,MUSA 数组到设备,MUSA 数组到 MUSA 数组)时,muMemcpy2DAsync() 可能会失败,如果 pitches 不是由 muMemAllocPitch() 计算的。

参数

pCopy - 内存复制的参数
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数是异步的。

支持使用空流。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA, muMemcpyAtoD,
muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D8Async, muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8,
muMemsetD8Async, muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemcpy2DAsync,
musaMemcpy2DToArrayAsync, musaMemcpy2DFromArrayAsync

muMemcpy3DAsync()

MUresult MUSAAPI muMemcpy3DAsync (
const MUSA_MEMCPY3D ∗ pCopy,
MUstream hStream )

复制3D数组的内存。

根据 pCopy 指定的参数执行3D内存复制。MUSA_MEMCPY3D 结构体定义如下:

typedef struct MUSA_MEMCPY3D_st {
unsigned int srcXInBytes, srcY, srcZ;
unsigned int srcLOD;
MUmemorytype srcMemoryType;
const void*srcHost;
MUdeviceptr srcDevice;
MUarray srcArray;
unsigned int srcPitch; // 当src是数组时忽略
unsigned int srcHeight; // 当src是数组时忽略;如果Depth==1可以为0

unsigned int dstXInBytes, dstY, dstZ;
unsigned int dstLOD;
MUmemorytype dstMemoryType;
void*dstHost;
MUdeviceptr dstDevice;
MUarray dstArray;
unsigned int dstPitch; // 当dst是数组时忽略
unsigned int dstHeight; // 当dst是数组时忽略;如果Depth==1可以为0

unsigned int WidthInBytes;
unsigned int Height;
unsigned int Depth;
} MUSA_MEMCPY3D;

其中:

  • srcMemoryType 和 dstMemoryType 分别指定源和目标的内存类型;MUmemorytype_enum 定义如下:
typedef enum MUmemorytype_enum {
MU_MEMORYTYPE_HOST = 0x01,
MU_MEMORYTYPE_DEVICE = 0x02,
MU_MEMORYTYPE_ARRAY = 0x03,
MU_MEMORYTYPE_UNIFIED = 0x04
} MUmemorytype;

如果 srcMemoryType 是 MU_MEMORYTYPE_UNIFIED,srcDevice 和 srcPitch 指定源数据的(统一虚拟地址空间)基地址和每行的字节数。srcArray 被忽略。这个值只有在调用上下文中支持统一寻址时才能使用。

如果 srcMemoryType 是 MU_MEMORYTYPE_HOST,srcHost、srcPitch 和 srcHeight 指定源数据的(主机)基地址、每行的字节数和3D数组每个2D切片的高度。srcArray 被忽略。

如果 srcMemoryType 是 MU_MEMORYTYPE_DEVICE,srcDevice、srcPitch 和 srcHeight 指定源数据的(设备)基地址、每行的字节数和3D数组每个2D切片的高度。srcArray 被忽略。

如果 srcMemoryType 是 MU_MEMORYTYPE_ARRAY,srcArray 指定源数据的句柄。srcHost、srcDevice、srcPitch 和 srcHeight 被忽略。

如果 dstMemoryType 是 MU_MEMORYTYPE_UNIFIED,dstDevice 和 dstPitch 指定目标数据的(统一虚拟地址空间)基地址和每行的字节数。dstArray 被忽略。这个值只有在调用上下文中支持统一寻址时才能使用。

如果 dstMemoryType 是 MU_MEMORYTYPE_HOST,dstHost 和 dstPitch 指定目标数据的(主机)基地址、每行的字节数和3D数组每个2D切片的高度。dstArray 被忽略。

如果 dstMemoryType 是 MU_MEMORYTYPE_DEVICE,dstDevice 和 dstPitch 指定目标数据的(设备)基地址、每行的字节数和3D数组每个2D切片的高度。dstArray 被忽略。

如果 dstMemoryType 是 MU_MEMORYTYPE_ARRAY,dstArray 指定目标数据的句柄。dstHost、dstDevice、dstPitch 和 dstHeight 被忽略。

  • srcXInBytes、srcY 和 srcZ 指定复制操作的源数据基地址。

对于主机指针,起始地址是 voidStart = (void)((char*)srcHost+(srcZ*srcHeight+srcY)*srcPitch + srcXInBytes);

对于设备指针,起始地址是 MUdeviceptr Start = srcDevice+(srcZ*srcHeight+srcY)*srcPitch+srcXInBytes;

对于 MUSA 数组,srcXInBytes 必须能被数组元素大小整除。

  • dstXInBytes、dstY 和 dstZ 指定复制操作的目标数据基地址。

对于主机指针,基地址是 voiddstStart = (void)((char*)dstHost+(dstZ*dstHeight+dstY)*dstPitch + dstXInBytes);

对于设备指针,起始地址是 MUdeviceptr dstStart = dstDevice+(dstZ*dstHeight+dstY)*dstPitch+dstXInBytes;

对于 MUSA 数组,dstXInBytes 必须能被数组元素大小整除。

  • WidthInBytes、Height 和 Depth 指定执行的3D复制的宽度(字节)、高度和深度。
  • 如果指定,srcPitch 必须大于或等于 WidthInBytes + srcXInBytes,dstPitch 必须大于或等于 WidthInBytes + dstXInBytes。
  • 如果指定,srcHeight 必须大于或等于 Height + srcY,dstHeight 必须大于或等于 Height + dstY。

muMemcpy3DAsync() 如果任何 pitch 大于最大允许值(MU_DEVICE_ATTRIBUTE_MAX_PITCH)则返回错误。

MUSA_MEMCPY3D 结构体的 srcLOD 和 dstLOD 成员必须设置为 0。

参数

pCopy - 内存复制的参数
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数是异步的。

支持使用空流。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpyAtoA, muMemcpyAtoD,
muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D8Async, muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8,
muMemsetD8Async, muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemcpy3DAsync

muMemcpy3DPeerAsync()

MUresult MUSAAPI muMemcpy3DPeerAsync(const MUSA_MEMCPY3D_PEER *pCopy, MUstream hStream);

异步在上下文之间复制内存。

根据 pCopy 中指定的参数执行3D内存复制。有关其参数的文档,请参见 MUSA_MEMCPY3D_PEER 结构体的定义。

参数

pCopy - 内存复制的参数
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。 此函数是异步的。 支持使用空流。

另请参阅

muMemcpyDtoD, muMemcpyPeer, muMemcpyDtoDAsync, muMemcpyPeerAsync,
muMemcpy3DPeer, musaMemcpy3DPeerAsync

muMemsetD8()

MUresult MUSAAPI muMemsetD8 (
MUdeviceptr dstDevice,
unsigned char uc,
size_t N)

初始化设备内存

将N个8位值的内存范围设置为指定值 uc

参数

dstDevice - 目标设备指针
uc - 要设置的值
N - 元素数量

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数是异步的。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D8Async, muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8Async,
muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemset

muMemsetD16()

MUresult MUSAAPI muMemsetD16 (
MUdeviceptr dstDevice,
unsigned short us,
size_t N)

初始化设备内存。

将N个16位值的内存范围设置为指定值 usdstDevice 指针必须是两字节对齐的。

参数

dstDevice - 目标设备指针
us - 要设置的值
N - 元素数量

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D8Async, muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8,
muMemsetD8Async, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemset

muMemsetD32()

MUresult MUSAAPI muMemsetD32 (
MUdeviceptr dstDevice,
unsigned int ui,
size_t N)

初始化设备内存。

将N个32位值的内存范围设置为指定值 uidstDevice 指针必须是四字节对齐的。

参数

dstDevice - 目标设备指针
ui - 要设置的值
N - 元素数量

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D8Async, muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8,
muMemsetD8Async, muMemsetD16, muMemsetD16Async, muMemsetD32Async, musaMemset

muMemsetD2D8()

MUresult MUSAAPI muMemsetD2D8 (
MUdeviceptr dstDevice,
size_t dstPitch,
unsigned char uc,
size_t Width,
size_t Height)

初始化设备内存。

将Width个8位值的2D内存范围设置为指定值 uc。Height 指定要设置的行数,dstPitch 指定每行之间的字节数。当使用 muMemAllocPitch() 传回的 pitch 时,此函数执行速度最快。

参数

dstDevice - 目标设备指针
dstPitch - 目标设备指针的间距(如果Height为1则不使用)
uc - 要设置的值
Width - 行宽
Height - 行数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync,
muMemcpyAtoA, muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync,
muMemcpyDtoH, muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync,
muMemFree, muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer,
muMemsetD2D8Async, muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8,
muMemsetD8Async, muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemset2D

muMemsetD2D16()

MUresult MUSAAPI muMemsetD2D16 (
MUdeviceptr dstDevice,
size_t dstPitch,
unsigned short us,
size_t Width,
size_t Height)

初始化设备内存。

将Width个16位值的2D内存范围设置为指定值 us。Height 指定要设置的行数,dstPitch 指定每行之间的字节数。dstDevice 指针和 dstPitch 偏移量必须是两字节对齐的。当使用 muMemAllocPitch() 传回的 pitch 时,此函数执行速度最快。

参数

dstDevice - 目标设备指针
dstPitch - 目标设备指针的间距(如果Height为1则不使用)
us - 要设置的值
Width - 行宽
Height - 行数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D8Async, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8, muMemsetD8Async,
muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemset2D

muMemsetD2D32()

MUresult MUSAAPI muMemsetD2D32 (
MUdeviceptr dstDevice,
size_t dstPitch,
unsigned int ui,
size_t Width,
size_t Height)

初始化设备内存。

将Width个32位值的2D内存范围设置为指定值 ui。Height 指定要设置的行数,dstPitch 指定每行之间的字节数。dstDevice 指针和 dstPitch 偏移量必须是四字节对齐的。当使用 muMemAllocPitch() 传回的 pitch 时,此函数执行速度最快。

参数

dstDevice - 目标设备指针
dstPitch - 目标设备指针的间距(如果Height为1则不使用)
ui - 要设置的值
Width - 行宽
Height - 行数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D8Async, muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32Async, muMemsetD8, muMemsetD8Async,
muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemset2D

muMemsetD8Async()

MUresult MUSAAPI muMemsetD8Async (
MUdeviceptr dstDevice,
unsigned char uc,
size_t N,
MUstream hStream )

设置设备内存。

将N个8位值的内存范围设置为指定值 uc

参数

dstDevice - 目标设备指针
uc - 要设置的值
N - 元素数量
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D8Async, muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8,
muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemsetAsync

muMemsetD16Async()

MUresult MUSAAPI muMemsetD16Async (
MUdeviceptr dstDevice,
unsigned short us,
size_t N,
MUstream hStream )

设置设备内存。

将N个16位值的内存范围设置为指定值 usdstDevice 指针必须是两字节对齐的。

参数

dstDevice - 目标设备指针
us - 要设置的值
N - 元素数量
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D8Async, muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8,
muMemsetD8Async, muMemsetD16, muMemsetD32, muMemsetD32Async, musaMemsetAsync

muMemsetD32Async()

MUresult MUSAAPI muMemsetD32Async (
MUdeviceptr dstDevice,
unsigned int ui,
size_t N,
MUstream hStream )

设置设备内存。

将N个32位值的内存范围设置为指定值 uidstDevice 指针必须是四字节对齐的。

参数

dstDevice - 目标设备指针
ui - 要设置的值
N - 元素数量
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D8Async, muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8,
muMemsetD8Async, muMemsetD16, muMemsetD16Async, muMemsetD32, musaMemsetAsync

muMemsetD2D8Async()

MUresult MUSAAPI muMemsetD2D8Async (
MUdeviceptr dstDevice,
size_t dstPitch,
unsigned char uc,
size_t Width,
size_t Height,
MUstream hStream )

设置设备内存。

将Width个8位值的2D内存范围设置为指定值 uc。Height 指定要设置的行数,dstPitch 指定每行之间的字节数。当使用 muMemAllocPitch() 传回的 pitch 时,此函数执行速度最快。

参数

dstDevice - 目标设备指针
dstPitch - 目标设备指针的间距(如果Height为1则不使用)
uc - 要设置的值
Width - 行宽
Height - 行数
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8, muMemsetD8Async,
muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemset2DAsync

muMemsetD2D16Async()

MUresult MUSAAPI muMemsetD2D16Async (
MUdeviceptr dstDevice,
size_t dstPitch,
unsigned short us,
size_t Width,
size_t Height,
MUstream hStream )

设置设备内存。

将Width个16位值的2D内存范围设置为指定值 us。Height 指定要设置的行数,dstPitch 指定每行之间的字节数。dstDevice 指针和 dstPitch 偏移量必须是两字节对齐的。当使用 muMemAllocPitch() 传回的 pitch 时,此函数执行速度最快。

参数

dstDevice - 目标设备指针
dstPitch - 目标设备指针的间距(如果Height为1则不使用)
us - 要设置的值
Width - 行宽
Height - 行数
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D8Async, muMemsetD2D16, muMemsetD2D32, muMemsetD2D32Async, muMemsetD8, muMemsetD8Async,
muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemset2DAsync

muMemsetD2D32Async()

MUresult MUSAAPI muMemsetD2D32Async (
MUdeviceptr dstDevice,
size_t dstPitch,
unsigned int ui,
size_t Width,
size_t Height,
MUstream hStream )

设置设备内存。

将Width个32位值的2D内存范围设置为指定值 ui。Height 指定要设置的行数,dstPitch 指定每行之间的字节数。dstDevice 指针和 dstPitch 偏移量必须是四字节对齐的。当使用 muMemAllocPitch() 传回的 pitch 时,此函数执行速度最快。

参数

dstDevice - 目标设备指针
dstPitch - 目标设备指针的间距(如果Height为1则不使用)
ui - 要设置的值
Width - 行宽
Height - 行数
hStream - 流标识符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

此函数的行为类似于 memset

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA,
muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D8Async, muMemsetD2D16, muMemsetD2D16Async, muMemsetD2D32, muMemsetD8, muMemsetD8Async,
muMemsetD16, muMemsetD16Async, muMemsetD32, muMemsetD32Async, musaMemset2DAsync

muArrayCreate()

MUresult MUSAAPI muArrayCreate (
MUarray ∗ pHandle,
const MUSA_ARRAY_DESCRIPTOR ∗ pAllocateArray)

创建1D或2D MUSA数组。

根据 MUSA_ARRAY_DESCRIPTOR 结构体 pAllocateArray 创建 MUSA 数组,并返回新 MUSA 数组的句柄到 ∗pHandle。MUSA_ARRAY_DESCRIPTOR 定义如下:

typedef struct {
unsigned int Width;
unsigned int Height;
MUarray_format Format;
unsigned int NumChannels;
} MUSA_ARRAY_DESCRIPTOR;

其中:

  • Width 和 Height 是 MUSA 数组的宽度和高度(以元素为单位);如果高度为 0,则 MUSA 数组是一维的,否则是二维的;

  • Format 指定元素的格式;MUarray_format 定义如下:

typedef enum MUarray_format_enum {
MU_AD_FORMAT_UNSIGNED_INT8 = 0x01,
MU_AD_FORMAT_UNSIGNED_INT16 = 0x02,
MU_AD_FORMAT_UNSIGNED_INT32 = 0x03,
MU_AD_FORMAT_SIGNED_INT8 = 0x08,
MU_AD_FORMAT_SIGNED_INT16 = 0x09,
MU_AD_FORMAT_SIGNED_INT32 = 0x0a,
MU_AD_FORMAT_HALF = 0x10,
MU_AD_FORMAT_FLOAT = 0x20
} MUarray_format;
  • NumChannels 指定每个 MUSA 数组元素的打包组件数;可以是 1、2 或 4;

以下是 MUSA 数组描述的示例:

2048 个浮点数的 MUSA 数组描述: MUSA_ARRAY_DESCRIPTOR desc; desc.Format = MU_AD_FORMAT_FLOAT; desc.NumChannels = 1; desc.Width = 2048; desc.Height = 1;

64 x 64 个浮点数的 MUSA 数组描述: MUSA_ARRAY_DESCRIPTOR desc; desc.Format = MU_AD_FORMAT_FLOAT; desc.NumChannels = 1; desc.Width = 64; desc.Height = 64;

width x height 个 64 位,4x16 位浮点数的 MUSA 数组描述: MUSA_ARRAY_DESCRIPTOR desc; desc.FormatFlags = MU_AD_FORMAT_HALF; desc.NumChannels = 4; desc.Width = width; desc.Height = height;

width x height 个 16 位元素,每个元素是两个 8 位无符号字符的 MUSA 数组描述: MUSA_ARRAY_DESCRIPTOR arrayDesc; desc.FormatFlags = MU_AD_FORMAT_UNSIGNED_INT8; desc.NumChannels = 2; desc.Width = width; desc.Height = height;

参数

pHandle - 返回的数组
pAllocateArray - 数组描述符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY, MUSA_ERROR_UNKNOWN

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync,
muMemcpyAtoA, muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync,
muMemcpyDtoH, muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync,
muMemFree, muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer,
muMemsetD2D8, muMemsetD2D16, muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaMallocArray

muArrayGetDescriptor()

MUresult MUSAAPI muArrayGetDescriptor (
MUSA_ARRAY_DESCRIPTOR ∗ pArrayDescriptor,
MUarray hArray)

获取1D或2D MUSA数组描述符。

返回 ∗pArrayDescriptor 包含 MUSA 数组 hArray 的格式和尺寸信息的描述符。对于已经传递了 MUSA 数组但需要知道 MUSA 数组参数以进行验证或其他目的的子程序非常有用。

参数

pArrayDescriptor - 返回的数组描述符
hArray - 要获取描述符的数组

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muMemAlloc, muMemAllocHost, muMemAllocPitch,
muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA, muMemcpyAtoD,
muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D16, muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaArrayGetInfo

muArrayDestroy()

MUresult MUSAAPI muArrayDestroy (
MUarray hArray)

销毁一个 MUSA 数组

销毁 MUSA 数组 hArray

参数

hArray - 要销毁的数组

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_ARRAY_IS_MAPPED, MUSA_ERROR_CONTEXT_IS_DESTROYED

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muArray3DCreate, muArray3DGetDescriptor, muArrayCreate, muArrayGetDescriptor, muMemAlloc, muMemAllocHost,
muMemAllocPitch, muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync,
muMemcpyAtoA, muMemcpyAtoD, muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync,
muMemcpyDtoH, muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync,
muMemFree, muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer,
muMemsetD2D8, muMemsetD2D16, muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaFreeArray

muArray3DCreate()

MUresult MUSAAPI muArray3DCreate (
MUarray ∗pHandle,
const MUSA_ARRAY3D_DESCRIPTOR ∗ pAllocateArray)

创建一个 3D MUSA 数组。

根据 MUSA_ARRAY3D_DESCRIPTOR 结构体 pAllocateArray 创建一个 MUSA 数组,并将新创建的 MUSA 数组的句柄返回在 ∗pHandle 中。MUSA_ARRAY3D_DESCRIPTOR 定义如下:

typedef struct {
unsigned int Width;
unsigned int Height;
unsigned int Depth;
MUarray_format Format;
unsigned int NumChannels;
unsigned int Flags;
} MUSA_ARRAY3D_DESCRIPTOR;

其中:

  • Width, Height, 和 Depth 是 MUSA 数组的宽度、高度和深度(以元素为单位);可以分配以下类型的 MUSA 数组: - 如果 Height 和 Depth 范围都是零,则分配一个 1D 数组。 - 如果只有 Depth 范围是零,则分配一个 2D 数组。 - 如果所有三个范围都非零,则分配一个 3D 数组。 - 如果只有 Height 是零并且设置了 MUSA_ARRAY3D_LAYERED 标志,则分配一个 1D 分层 MUSA 数组。每一层是一个 1D 数组。层数由 Depth 范围决定。 - 如果所有三个范围都非零并且设置了 MUSA_ARRAY3D_LAYERED 标志,则分配一个 2D 分层 MUSA 数组。每一层是一个 2D 数组。层数由 Depth 范围决定。 - 如果所有三个范围都非零并且设置了 MUSA_ARRAY3D_CUBEMAP 标志,则分配一个立方体贴图 MUSA 数组。Width 必须等于 Height,并且 Depth 必须是六。一个立方体贴图是一个特殊的 2D 分层 MUSA 数组,其中六个层代表一个立方体的六个面。六个层在内存中的顺序与 MUarray_cubemap_face 中列出的顺序相同。 - 如果所有三个范围都非零,并且同时设置了 MUSA_ARRAY3D_CUBEMAP 和 MUSA_ARRAY3D_LAYERED 标志,则 Width 必须等于 Height,并且 Depth 必须是六的倍数。一个立方体分层 MUSA 数组是一个特殊的 2D 分层 MUSA 数组,由一系列立方体贴图组成。前六个层代表第一个立方体贴图,接下来的六个层形成第二个立方体贴图,以此类推。
  • Format 指定元素的格式;MUarray_format 定义如下:
typedef enum MUarray_format_enum {
MU_AD_FORMAT_UNSIGNED_INT8 = 0x01,
MU_AD_FORMAT_UNSIGNED_INT16 = 0x02,
MU_AD_FORMAT_UNSIGNED_INT32 = 0x03,
MU_AD_FORMAT_SIGNED_INT8 = 0x08,
MU_AD_FORMAT_SIGNED_INT16 = 0x09,
MU_AD_FORMAT_SIGNED_INT32 = 0x0a,
MU_AD_FORMAT_HALF = 0x10,
MU_AD_FORMAT_FLOAT = 0x20
} MUarray_format;
  • NumChannels 指定每个 MUSA 数组元素的打包组件数量;可以是 1、2 或 4;
  • Flags 可以设置为 - MUSA_ARRAY3D_LAYERED 以启用创建分层 MUSA 数组。如果设置了此标志,Depth 指定层数,而不是 3D 数组的深度。 - MUSA_ARRAY3D_SURFACE_LDST 以启用将表面引用绑定到 MUSA 数组的各个 mipmap 级别。如果未设置此标志,muSurfRefSetArray 在尝试将 MUSA 数组的 mipmap 级别绑定到表面引用时将失败。 - MUSA_ARRAY3D_CUBEMAP 以启用创建立方体贴图。如果设置了此标志,Width 必须等于 Height,并且 Depth 必须是六。如果同时设置了 MUSA_ARRAY3D_LAYERED 标志,则 Depth 必须是六的倍数。 - MUSA_ARRAY3D_TEXTURE_GATHER 表示 MUSA 数组将用于纹理采集。纹理采集只能在 2D MUSA 数组上执行。

Width, Height 和 Depth 必须满足下表中列出的特定大小要求。所有值均以元素为单位指定。注意,为了简洁起见,没有指定设备属性的全名。例如,TEXTURE1D_WIDTH 指的是设备属性 MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH。

请注意,如果设置了 MUSA_ARRAY3D_TEXTURE_GATHER 标志,2D MUSA 数组的大小要求不同。Width 和 Height 分别不得超过 MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH 和 MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT。

MUSA 数组类型必须始终满足的有效范围((元素范围宽度),(高度范围),(深度范围))设置 MUSA_ARRAY3D_SURFACE_LDST 时的有效范围((元素范围宽度),(高度范围),(深度范围))
1D{ (1,TEXTURE1D_WIDTH), 0, 0 }{ (1,SURFACE1D_WIDTH), 0, 0 }
2D{ (1,TEXTURE2D_WIDTH), (1,TEXTURE2D_HEIGHT), 0 }{ (1,SURFACE2D_WIDTH), (1,SURFACE2D_HEIGHT), 0 }
3D{ (1,TEXTURE3D_WIDTH), (1,TEXTURE3D_HEIGHT), (1,TEXTURE3D_DEPTH) } OR{ (1,SURFACE3D_WIDTH), (1,SURFACE3D_HEIGHT), (1,SURFACE3D_DEPTH) }
{ (1,TEXTURE3D_WIDTH_ALTERNATE), (1,TEXTURE3D_HEIGHT_ALTERNATE), (1,TEXTURE3D_DEPTH_ALTERNATE) }
1D Layered{ (1,TEXTURE1D_LAYERED_WIDTH), 0, (1,TEXTURE1D_LAYERED_LAYERS) }{ (1,SURFACE1D_LAYERED_WIDTH), 0, (1,SURFACE1D_LAYERED_LAYERS) }
2D Layered{ (1,TEXTURE2D_LAYERED_WIDTH), (1,TEXTURE2D_LAYERED_HEIGHT), (1,TEXTURE2D_LAYERED_LAYERS) }{ (1,SURFACE2D_LAYERED_WIDTH), (1,SURFACE2D_LAYERED_HEIGHT), (1,SURFACE2D_LAYERED_LAYERS) }
Cubemap{ (1,TEXTURECUBEMAP_WIDTH), (1,TEXTURECUBEMAP_WIDTH), 6 }{ (1,SURFACECUBEMAP_WIDTH), 6 }
Cubemap Layered{ (1,TEXTURECUBEMAP_LAYERED_WIDTH), (1,TEXTURECUBEMAP_LAYERED_WIDTH), (1,TEXTURECUBEMAP_LAYERED_LAYERS) }{ (1,SURFACECUBEMAP_LAYERED_WIDTH), (1,SURFACECUBEMAP_LAYERED_WIDTH), (1,SURFACECUBEMAP_LAYERED_LAYERS) }

以下是 MUSA 数组描述的示例:

2048 个浮点数的 MUSA 数组描述: MUSA_ARRAY3D_DESCRIPTOR desc; desc.Format = MU_AD_FORMAT_FLOAT; desc.NumChannels = 1; desc.Width = 2048; desc.Height = 0; desc.Depth = 0;

64 x 64 个浮点数的 MUSA 数组描述: MUSA_ARRAY3D_DESCRIPTOR desc; desc.Format = MU_AD_FORMAT_FLOAT; desc.NumChannels = 1; desc.Width = 64; desc.Height = 64; desc.Depth = 0;

width x height x depth MUSA 数组,64 位,4 个 16 位半精度浮点数: MUSA_ARRAY3D_DESCRIPTOR desc; desc.FormatFlags = MU_AD_FORMAT_HALF; desc.NumChannels = 4; desc.Width = width; desc.Height = height; desc.Depth = depth;

参数

pHandle - 返回的数组
pAllocateArray - 3D 数组描述符

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY, MUSA_ERROR_UNKNOWN

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muArray3DGetDescriptor, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost, muMemAllocPitch,
muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA, muMemcpyAtoD,
muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D16, muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaMalloc3DArray

muArray3DGetDescriptor()

MUresult MUSAAPI muArray3DGetDescriptor (
MUSA_ARRAY3D_DESCRIPTOR ∗ pArrayDescriptor,
MUarray hArray)

获取 3D MUSA 数组描述符。

∗pArrayDescriptor 中返回一个描述符,包含 MUSA 数组 hArray 的格式和尺寸信息。这对于已经接收到 MUSA 数组但需要知道 MUSA 数组参数以进行验证或其他目的的子程序非常有用。

此函数可以对 1D 和 2D 数组调用,在这种情况下,描述符结构的 Height 和/或 Depth 成员将被设置为 0。

参数

pArrayDescriptor - 返回的 3D 数组描述符
hArray - 要获取描述符的 3D 数组

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_CONTEXT_IS_DESTROYED

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muArray3DCreate, muArrayCreate, muArrayDestroy, muArrayGetDescriptor, muMemAlloc, muMemAllocHost, muMemAllocPitch,
muMemcpy2D, muMemcpy2DAsync, muMemcpy2DUnaligned, muMemcpy3D, muMemcpy3DAsync, muMemcpyAtoA, muMemcpyAtoD,
muMemcpyAtoH, muMemcpyAtoHAsync, muMemcpyDtoA, muMemcpyDtoD, muMemcpyDtoDAsync, muMemcpyDtoH,
muMemcpyDtoHAsync, muMemcpyHtoA, muMemcpyHtoAAsync, muMemcpyHtoD, muMemcpyHtoDAsync, muMemFree,
muMemFreeHost, muMemGetAddressRange, muMemGetInfo, muMemHostAlloc, muMemHostGetDevicePointer, muMemsetD2D8,
muMemsetD2D16, muMemsetD2D32, muMemsetD8, muMemsetD16, muMemsetD32, musaArrayGetInfo

muMipmappedArrayCreate()

MUresult MUSAAPI muMipmappedArrayCreate (
MUmipmappedArray∗pHandle,
const MUSA_ARRAY3D_DESCRIPTOR∗pMipmappedArrayDesc,
unsigned int numMipmapLevels)

创建一个 MUSA 纹理数组。

根据 MUSA_ARRAY3D_DESCRIPTOR 结构体 pMipmappedArrayDesc 创建一个 MUSA 纹理数组,并在 ∗pHandle 中返回新创建的 MUSA 纹理数组的句柄。numMipmapLevels 指定要分配的纹理级别数量。此值被限制在范围 [1, 1 + floor(log2(max(width, height, depth)))]。

MUSA_ARRAY3D_DESCRIPTOR 定义如下:

typedef struct {
unsigned int Width;
unsigned int Height;
unsigned int Depth;
MUarray_format Format;
unsigned int NumChannels;
unsigned int Flags;
} MUSA_ARRAY3D_DESCRIPTOR;

其中:

  • Width, Height, 和 Depth 是 MUSA 数组的宽度、高度和深度(以元素为单位);可以分配以下类型的 MUSA 数组: - 如果 Height 和 Depth 范围都是零,则分配一个 1D 纹理数组。 - 如果只有 Depth 范围是零,则分配一个 2D 纹理数组。 - 如果所有三个范围都非零,则分配一个 3D 纹理数组。 - 如果只有 Height 是零并且设置了 MUSA_ARRAY3D_LAYERED 标志,则分配一个 1D 分层 MUSA 纹理数组。每一层是一个 1D 数组。层数由 Depth 范围决定。 - 如果所有三个范围都非零并且设置了 MUSA_ARRAY3D_LAYERED 标志,则分配一个 2D 分层 MUSA 纹理数组。每一层是一个 2D 数组。层数由 Depth 范围决定。 - 如果所有三个范围都非零并且设置了 MUSA_ARRAY3D_CUBEMAP 标志,则分配一个立方体贴图 MUSA 纹理数组。Width 必须等于 Height,并且 Depth 必须是六。一个立方体贴图是一个特殊的 2D 分层 MUSA 数组,其中六个层代表一个立方体的六个面。六个层在内存中的顺序与 MUarray_cubemap_face 中列出的顺序相同。 - 如果所有三个范围都非零,并且同时设置了 MUSA_ARRAY3D_CUBEMAP 和 MUSA_ARRAY3D_LAYERED 标志,则 Width 必须等于 Height,并且 Depth 必须是六的倍数。一个立方体分层 MUSA 数组是一个特殊的 2D 分层 MUSA 数组,由一系列立方体贴图组成。前六个层代表第一个立方体贴图,接下来的六个层形成第二个立方体贴图,以此类推。
  • Format 指定元素的格式;MUarray_format 定义如下:
typedef enum MUarray_format_enum {
MU_AD_FORMAT_UNSIGNED_INT8 = 0x01,
MU_AD_FORMAT_UNSIGNED_INT16 = 0x02,
MU_AD_FORMAT_UNSIGNED_INT32 = 0x03,
MU_AD_FORMAT_SIGNED_INT8 = 0x08,
MU_AD_FORMAT_SIGNED_INT16 = 0x09,
MU_AD_FORMAT_SIGNED_INT32 = 0x0a,
MU_AD_FORMAT_HALF = 0x10,
MU_AD_FORMAT_FLOAT = 0x20
} MUarray_format;
  • NumChannels 指定每个 MUSA 数组元素的打包组件数量;可以是 1、2 或 4;
  • Flags 可以设置为 - MUSA_ARRAY3D_LAYERED 以启用创建分层 MUSA 纹理数组。如果设置了此标志,Depth 指定层数,而不是 3D 数组的深度。 - MUSA_ARRAY3D_SURFACE_LDST 以启用将表面引用绑定到 MUSA 纹理数组的各个 mipmap 级别。如果未设置此标志,muSurfRefSetArray 在尝试将 MUSA 纹理数组的 mipmap 级别绑定到表面引用时将失败。

*MUSA_ARRAY3D_CUBEMAP 以启用创建纹理立方体贴图。如果设置了此标志,Width 必须等于 Height,并且 Depth 必须是六。如果同时设置了 MUSA_ARRAY3D_LAYERED 标志,则 Depth 必须是六的倍数。

- MUSA_ARRAY3D_TEXTURE_GATHER 表示 MUSA 纹理数组将用于纹理采集。纹理采集只能在 2D MUSA 纹理数组上执行。

Width, Height 和 Depth 必须满足下表中列出的特定大小要求。所有值均以元素为单位指定。注意,为了简洁起见,没有指定设备属性的全名。例如,TEXTURE1D_MIPMAPPED_WIDTH 指的是设备属性 MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH。

MUSA 数组类型必须始终满足的有效范围((元素范围宽度),(高度范围),(深度范围))设置 MUSA_ARRAY3D_SURFACE_LDST 时的有效范围((元素范围宽度),(高度范围),(深度范围))
1D{ (1,TEXTURE1D_WIDTH), 0, 0 }{ (1,SURFACE1D_WIDTH), 0, 0 }
2D{ (1,TEXTURE2D_WIDTH), (1,TEXTURE2D_HEIGHT), 0 }{ (1,SURFACE2D_WIDTH), (1,SURFACE2D_HEIGHT), 0 }
3D{ (1,TEXTURE3D_WIDTH), (1,TEXTURE3D_HEIGHT), (1,TEXTURE3D_DEPTH) } OR{ (1,SURFACE3D_WIDTH), (1,SURFACE3D_HEIGHT), (1,SURFACE3D_DEPTH) }
{ (1,TEXTURE3D_WIDTH_ALTERNATE), (1,TEXTURE3D_HEIGHT_ALTERNATE), (1,TEXTURE3D_DEPTH_ALTERNATE) }
1D Layered{ (1,TEXTURE1D_LAYERED_WIDTH), 0, (1,TEXTURE1D_LAYERED_LAYERS) }{ (1,SURFACE1D_LAYERED_WIDTH), 0, (1,SURFACE1D_LAYERED_LAYERS) }
2D Layered{ (1,TEXTURE2D_LAYERED_WIDTH), (1,TEXTURE2D_LAYERED_HEIGHT), (1,TEXTURE2D_LAYERED_LAYERS) }{ (1,SURFACE2D_LAYERED_WIDTH), (1,SURFACE2D_LAYERED_HEIGHT), (1,SURFACE2D_LAYERED_LAYERS) }
Cubemap{ (1,TEXTURECUBEMAP_WIDTH), (1,TEXTURECUBEMAP_WIDTH), 6 }{ (1,SURFACECUBEMAP_WIDTH), 6 }
Cubemap Layered{ (1,TEXTURECUBEMAP_LAYERED_WIDTH), (1,TEXTURECUBEMAP_LAYERED_WIDTH), (1,TEXTURECUBEMAP_LAYERED_LAYERS) }{ (1,SURFACECUBEMAP_LAYERED_WIDTH), (1,SURFACECUBEMAP_LAYERED_WIDTH), (1,SURFACECUBEMAP_LAYERED_LAYERS) }

参数

pHandle - 返回的纹理数组
pMipmappedArrayDesc - 纹理数组描述符
numMipmapLevels - 纹理级别数量

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY, MUSA_ERROR_UNKNOWN

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMipmappedArrayDestroy, muMipmappedArrayGetLevel, muArrayCreate, musaMallocMipmappedArray

muMipmappedArrayGetLevel()

MUresult MUSAAPI muMipmappedArrayGetLevel (
MUarray ∗ pLevelArray,
MUmipmappedArray hMipmappedArray,
unsigned int level)

获取 MUSA 纹理数组的纹理级别。

∗pLevelArray 中返回一个 MUSA 数组,表示 MUSA 纹理数组 hMipmappedArray 的单个纹理级别。

如果 level 大于此纹理数组中的最大级别数量,将返回 MUSA_ERROR_INVALID_VALUE。

参数

pLevelArray - 返回的纹理级别 MUSA 数组
hMipmappedArray - MUSA 纹理数组
level - 纹理级别

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMipmappedArrayCreate, muMipmappedArrayDestroy, muArrayCreate, musaGetMipmappedArrayLevel

muMipmappedArrayDestroy()

MUresult MUSAAPI muMipmappedArrayDestroy (
MUmipmappedArray hMipmappedArray)

销毁一个 MUSA 纹理数组。

销毁 MUSA 纹理数组 hMipmappedArray

参数

hMipmappedArray - 要销毁的纹理数组

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_ARRAY_IS_MAPPED, MUSA_ERROR_CONTEXT_IS_DESTROYED

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMipmappedArrayCreate, muMipmappedArrayGetLevel, muArrayCreate, musaFreeMipmappedArray

虚拟内存管理

本节描述了低级MUSA驱动应用程序编程接口的虚拟内存管理功能。

muMemAddressReserve()

MUresult MUSAAPI muMemAddressReserve (
MUdeviceptr * ptr,
size_t size,
size_t alignment,
MUdeviceptr addr,
unsigned long long flags)

分配地址范围预留。

根据给定参数预留虚拟地址范围,范围的起始地址在ptr中给出。此API需要支持UVA的系统。size和地址参数必须是主机页面大小的倍数,并且对齐必须是2的幂或零以获得默认alignment

参数

out ptr - 分配的虚拟地址范围的起始指针
in size - 请求预留的虚拟地址范围的大小
in alignment - 请求预留的虚拟地址范围的对齐
in addr - 请求的固定起始地址范围
in flags - 目前未使用,必须为零

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY, MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_PERMITTED, MUSA_ERROR_NOT_SUPPORTED

另请参阅

muMemAddressFree

muMemAddressFree()

MUresult MUSAAPI muMemAddressFree (
MUdeviceptr ptr,
size_t size)

释放地址范围预留。

释放由muMemAddressReserve预留的虚拟地址范围。size必须与memAddressReserve给出的匹配,并且ptr必须与memAddressReserve返回的匹配。

参数

in ptr - 要释放的虚拟地址范围的起始地址
in size - 要释放的虚拟地址区域的大小

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_DEINITIALIZED,
MUSA_ERROR_NOT_PERMITTED, MUSA_ERROR_NOT_SUPPORTED

另请参阅

muMemAddressReserve

muMemCreate()

MUresult MUSAAPI muMemCreate (
MUmemGenericAllocationHandle * handle,
size_t size,
const MUmemAllocationProp * prop,
unsigned long long flags)

创建代表给定大小内存分配的MUSA内存句柄。

此操作在目标设备上创建内存分配,通过prop结构指定。创建的分配将没有任何设备或主机映射。通用内存handle可以通过muMemMap映射到调用进程的地址空间。此句柄不能直接传输到其他进程(另见muMemExportToShareableHandle)。在Windows上,调用者还必须传递LPSECURITYATTRIBUTE到prop以与此句柄关联,限制或允许此句柄的接收进程访问(另见MUmemAllocationPropwin32HandleMetaData了解更多)。此分配的size必须是通过muMemGetAllocationGranularity和MU_MEM_ALLOC_GRANULARITY_MINIMUM标志给出的值的倍数。如果MUmemAllocationPropallocFlagsusage包含MU_MEM_CREATE_USAGE_TILE_POOL标志,则内存分配仅用作稀疏MUSA数组和稀疏MUSA mipmapped数组的后备瓦片池。(另见muMemMapArrayAsync)。

参数

out handle - 返回的句柄值。使用此句柄执行此分配的所有操作。
in size - 请求的分配大小
in prop - 要创建的分配属性。
in flags - 未来使用的标记,现在必须为零。

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY, MUSA_ERROR_INVALID_DEVICE,
MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_PERMITTED,
MUSA_ERROR_NOT_SUPPORTED

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMemRelease, muMemExportToShareableHandle, muMemImportFromShareableHandle

muMemRelease()

MUresult MUSAAPI muMemRelease (
MUmemGenericAllocationHandle handle)

释放代表之前通过muMemCreate分配的内存分配的内存句柄。

释放通过muMemCreate在设备上分配的内存。

当所有未解决的内存映射被取消映射,并且所有未解决的句柄引用(包括其可共享的对应物)也被释放时,内存分配将被释放。通用内存句柄可以在仍有未解决的映射时被释放。每次接收进程导入可共享句柄时,都需要将其与muMemRelease配对以释放句柄。如果handle不是有效的句柄,则行为未定义。

参数

in handle 之前由muMemCreate返回的句柄值。

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_DEINITIALIZED,
MUSA_ERROR_NOT_PERMITTED, MUSA_ERROR_NOT_SUPPORTED

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMemCreate

muMemGetAllocationGranularity()

MUresult MUSAAPI muMemGetAllocationGranularity (
size_t * granularity,
const MUmemAllocationProp * prop,
MUmemAllocationGranularity_flags option)

计算最小或推荐粒度

计算给定分配规格的最小或推荐粒度,并在granularity中返回。此粒度可以作为对齐、大小或地址映射的倍数。

参数

out granularity 返回的粒度。
in prop 确定粒度的属性
in option 确定返回哪种粒度

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_DEINITIALIZED,
MUSA_ERROR_NOT_PERMITTED, MUSA_ERROR_NOT_SUPPORTED

另请参阅

muMemCreate, muMemMap

muMemGetAllocationPropertiesFromHandle()

MUresult MUSAAPI muMemGetAllocationPropertiesFromHandle(MUmemAllocationProp *prop, MUmemGenericAllocationHandle handle);

检索定义此句柄属性的属性结构的内容

参数

prop - 指向属性结构的指针,该结构将保存有关此句柄的信息
handle - 要执行查询的句柄

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_PERMITTED, MUSA_ERROR_NOT_SUPPORTED

另请参阅

muMemCreate, muMemImportFromShareableHandle

muMemRetainAllocationHandle()

MUresult MUSAAPI muMemRetainAllocationHandle(MUmemGenericAllocationHandle *handle, void *addr);

给定一个地址 addr,返回支持该内存分配的分配句柄。

该句柄保证与用于映射内存的句柄值相同。如果请求的地址未映射,则函数将失败。返回的句柄必须通过相应次数调用 muMemRelease 来释放。

注意: 地址 addr 可以是先前通过 muMemMap 映射的范围内的任何地址,而不一定是起始地址。

参数

handle - 支持该内存分配的 MUSA 内存句柄。
addr - 要查询的内存地址,该地址先前已映射。

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_PERMITTED, MUSA_ERROR_NOT_SUPPORTED

另请参阅

muMemCreate, muMemRelease, muMemMap

muMemFreeAsync()

MUresult MUSAAPI muMemFreeAsync(MUdeviceptr dptr, MUstream hStream);

以流有序语义释放内存

将释放操作插入到 hStream 中。在流执行到达释放操作后,不得再访问该分配。此 API 返回后,从 GPU 上启动的任何后续工作访问该内存或查询其指针属性将导致未定义行为。

注意 在流捕获期间,此函数会导致创建一个释放节点,因此必须传递图形分配的地址。

参数

dptr - 要释放的内存
hStream - 建立流排序契约的流

返回值

MUSA_SUCCESS,
MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_INVALID_CONTEXT (未指定当前上下文的默认流),
MUSA_ERROR_NOT_SUPPORTED

muMemAllocAsync()

MUresult MUSAAPI muMemAllocAsync(MUdeviceptr *dptr, size_t bytesize, MUstream hStream);

分配具有流有序语义的内存。

将分配操作插入到 hStream 中。分配的内存指针立即在 *dptr 中返回。在分配操作完成之前,不得访问该分配。分配来自流设备当前的内存池。

注意: 设备的默认内存池包含来自该设备的设备内存。 基本流排序允许在同一流中提交的未来工作使用该分配。 流查询、流同步和 MUSA 事件可用于确保分配操作在单独流中提交的工作运行之前完成。 在流捕获期间,此函数会导致创建分配节点。在这种情况下,分配由图而不是内存池拥有。内存池的属性用于设置节点的创建参数。

参数

dptr - 返回的设备指针
bytesize - 要分配的字节数
hStream - 建立流排序契约和要从中分配的内存池的流

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT (未指定当前上下文的默认流),
MUSA_ERROR_NOT_SUPPORTED, MUSA_ERROR_OUT_OF_MEMORY

另请参阅

muMemAllocFromPoolAsync, muMemFreeAsync, muDeviceSetMemPool, muDeviceGetDefaultMemPool, muDeviceGetMemPool,
muMemPoolCreate, muMemPoolSetAccess, muMemPoolSetAttribute

统一寻址

本节描述了低级MUSA驱动应用程序编程接口的统一寻址功能。

概述

MUSA设备可以与主机共享统一地址空间。对于这些设备,设备指针和主机指针之间没有区别——可以使用相同的指针值从主机程序和设备上运行的内核访问内存(以下特殊情况除外)。

支持的平台

可以通过调用muDeviceGetAttribute()并使用设备属性MU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING来查询设备是否支持统一寻址。

在64位进程中自动启用统一寻址

从指针值查找信息

可以查找有关支持指针值的内存的信息。例如,可能想知道指针是否指向主机或设备内存。另一个例子是,在设备内存的情况下,可能想知道内存位于哪个MUSA设备上。可以使用函数muPointerGetAttribute()查询这些属性。

由于指针是唯一的,因此不需要为MUSA API中的各种复制函数指定有关指针的信息。函数muMemcpy()可以用来在两个指针之间执行复制,忽略它们是否指向主机或设备内存(对于支持统一寻址的设备,使muMemcpyHtoD(), muMemcpyDtoD(), 和 muMemcpyDtoH()不必要)。对于多维复制,可以使用内存类型MU_MEMORYTYPE_UNIFIED指定MUSA驱动程序应从其值推断指针的位置。

自动映射主机分配的主机内存

使用muMemAllocHost()和muMemHostAlloc()在所有上下文中分配的所有主机内存始终直接可从所有支持统一寻址的设备的所有上下文中访问。无论是否指定了MU_MEMHOSTALLOC_PORTABLE和MU_MEMHOSTALLOC_DEVICEMAP标志,都是如此。

在支持统一寻址的所有设备上,可以通过内核访问分配的主机内存的指针值与主机上访问该内存的指针值相同,因此不需要调用muMemHostGetDevicePointer()来获取这些分配的设备指针。

请注意,对于使用标志MU_MEMHOSTALLOC_WRITECOMBINED分配的内存,情况并非如此,如下所述。

自动注册对等内存

在使用muCtxEnablePeerAccess()启用支持统一寻址的上下文直接访问支持统一寻址的另一个对等上下文后,使用muMemAlloc()和muMemAllocPitch()在对等上下文中分配的所有内存将立即可由当前上下文访问。在当前上下文中访问任何对等内存的设备指针值与在对等上下文中访问该内存的指针值相同。

例外,不相交寻址

并非所有内存都可以通过与主机相同的指针值在设备上访问。这些例外包括使用muMemHostRegister()注册的主机内存和使用标志MU_MEMHOSTALLOC_WRITECOMBINED分配的主机内存。对于这些例外,内存存在一个明确的主机和设备地址。保证设备地址不会与任何有效的主机指针范围重叠,并且保证在所有支持统一寻址的上下文中具有相同的值。

可以使用muMemHostGetDevicePointer()查询设备地址,当使用统一寻址的上下文是当前上下文时。可以使用主机或统一设备指针值通过muMemcpy()和类似函数使用MU_MEMORYTYPE_UNIFIED内存类型来引用此内存。

muPointerGetAttribute()

MUresult MUSAAPI muPointerGetAttribute (
void* data,
MUpointer_attribute attribute,
MUdeviceptr ptr)

返回有关指针的信息。

支持的属性有:

  • MU_POINTER_ATTRIBUTE_CONTEXT:

    返回in∗data中的MUcontext,其中ptr被分配或注册。data的类型必须是MUcontext∗。 如果ptr没有被分配、映射或注册到使用统一虚拟寻址的MUcontext,则返回MUSA_ERROR_INVALID_VALUE。

  • MU_POINTER_ATTRIBUTE_MEMORY_TYPE: 返回in∗data中的ptr地址的物理内存类型,作为MUmemorytype枚举值。data的类型必须是unsigned int。 如果ptr指向设备内存,则∗data设置为MU_MEMORYTYPE_DEVICE。内存所在的特定MUdevice是ptr的MU_POINTER_ATTRIBUTE_CONTEXT属性返回的MUcontext的MUdevice。 如果ptr指向主机内存,则∗data设置为MU_MEMORYTYPE_HOST。 如果ptr没有被分配、映射或注册到使用统一虚拟寻址的MUcontext,则返回MUSA_ERROR_INVALID_VALUE。 如果当前MUcontext不支持统一虚拟寻址,则返回MUSA_ERROR_INVALID_CONTEXT。

  • MU_POINTER_ATTRIBUTE_DEVICE_POINTER:

    返回in∗data中的设备指针值,通过该值,当前MUcontext中运行的内核可以访问ptr。data的类型必须是MUdeviceptr∗。 如果没有设备指针值可以通过当前MUcontext中运行的内核访问ptr,则返回MUSA_ERROR_INVALID_VALUE。 如果没有当前MUcontext,则返回MUSA_ERROR_INVALID_CONTEXT。 除了在下面讨论的不相交寻址的特殊情况外,返回给∗data的值将等于输入值ptr。

  • MU_POINTER_ATTRIBUTE_HOST_POINTER: 返回in∗data中的主机指针值,通过该值,主机程序可以直接访问ptr。data的类型必须是void ∗∗。如果没有主机指针值可以通过主机程序直接访问ptr,则返回MUSA_ERROR_INVALID_VALUE。 除了在下面讨论的不相交寻址的特殊情况外,返回给∗data的值将等于输入值ptr。

  • MU_POINTER_ATTRIBUTE_P2P_TOKENS: 返回in∗data中的两个令牌,用于nv-p2p.h Linux内核接口。data必须是一个类型为MUSA_POINTER_ATTRIBUTE_P2P_TOKENS的结构体。 ptr必须是从:muMemAlloc()获得的内存的指针。请注意,p2pToken和vaSpaceToken仅在源分配的生命周期内有效。在同一地址的后续分配可能返回完全不同的令牌。查询此属性有一个副作用,即为ptr指向的内存区域设置MU_POINTER_ATTRIBUTE_SYNC_MEMOPS属性。

  • MU_POINTER_ATTRIBUTE_SYNC_MEMOPS: 布尔属性,当设置时,确保在ptr指向的内存区域上发起的同步内存操作始终会同步。有关同步内存操作可能表现出异步行为的更多情况,请参见标题为“API同步行为”的节。

  • MU_POINTER_ATTRIBUTE_BUFFER_ID: 返回in∗data中的缓冲区ID,该ID在进程中是唯一的。data必须指向一个unsigned long long。 ptr必须是从MUSA内存分配API获得的内存的指针。从任何MUSA内存分配API的每次内存分配都将在进程生命周期中有一个唯一的ID。后续分配不重复使用之前释放的分配的ID。ID仅在单个进程中唯一。

  • MU_POINTER_ATTRIBUTE_IS_MANAGED: 返回in∗data中的布尔值,指示指针是否指向托管内存。 如果ptr不是有效的MUSA指针,则返回MUSA_ERROR_INVALID_VALUE。

  • MU_POINTER_ATTRIBUTE_DEVICE_ORDINAL: 返回in∗data中的整数,表示分配或注册内存的设备的序数。

  • MU_POINTER_ATTRIBUTE_IS_LEGACY_MUSA_IPC_CAPABLE: 返回in∗data中的布尔值,指示此指针是否映射到适合musaIpcGetMemHandle的分配。

  • MU_POINTER_ATTRIBUTE_RANGE_START_ADDR: 返回in∗data中的设备指针ptr引用的分配的起始地址。注意,这不一定是映射区域的地址,而是ptr引用的可映射地址范围的地址(例如,来自muMemAddressReserve)。

  • MU_POINTER_ATTRIBUTE_RANGE_SIZE: 返回in∗data中的设备指针ptr引用的分配的大小。注意,这不一定是映射区域的大小,而是ptr引用的可映射地址范围的大小(例如,来自muMemAddressReserve)。要检索映射区域的大小,请参阅muMemGetAddressRange

  • MU_POINTER_ATTRIBUTE_MAPPED: 返回in∗data中的布尔值,指示此指针是否在映射到后备分配的有效地址范围内。

  • MU_POINTER_ATTRIBUTE_ALLOWED_HANDLE_TYPES: 返回可分配的允许句柄类型的位掩码,可以传递给muMemExportToShareableHandle。

  • MU_POINTER_ATTRIBUTE_MEMPOOL_HANDLE: 返回in∗data中的句柄,该句柄是从mempool获得的分配。

请注意,对于统一虚拟地址空间中的大多数分配,访问分配的主机和设备指针将相同。以下情况例外:

  • 使用muMemHostRegister注册的用户内存
  • 使用MU_MEMHOSTALLOC_WRITECOMBINED标志分配的主机内存对于这些类型的分配 将存在单独的、不相交的主机和设备地址来访问分配。特别是
    • 主机地址将对应于一个无效的未映射的设备地址(如果从设备访问,将导致异常)
    • 设备地址将对应于一个无效的未映射的主机地址(如果从主机访问,将导致异常)。对于这些类型的分配,可以使用查询MU_POINTER_ATTRIBUTE_HOST_POINTER和MU_POINTER_ATTRIBUTE_DEVICE_POINTER来从任一地址检索主机和设备地址。

参数

data - 返回的指针属性值
attribute - 要查询的指针属性
ptr - 指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muPointerSetAttribute, muMemAlloc, muMemFree, muMemAllocHost, muMemFreeHost, muMemHostAlloc, muMemHostRegister,
muMemHostUnregister, musaPointerGetAttributes

muMemAdvise()

MUresult MUSAAPI muMemAdvise (
MUdeviceptr devPtr,
size_t count,
MUmem_advise advice,
MUdevice device)

建议有关给定内存范围的使用

向统一内存子系统建议从devPtr开始的count字节内存范围的使用模式。在应用建议之前,内存范围的起始地址和结束地址将分别向下舍入和向上舍入以与CPU页面大小对齐。内存范围必须引用通过muMemAllocManaged分配的管理内存或通过managed变量声明的内存。 内存范围也可以引用系统分配的分页内存,只要它代表一个有效的、主机可访问的内存区域,并且满足advice强加的所有额外约束,如下所述。指定一个无效的系统分配的分页内存范围将导致返回错误。

建议参数可以取以下值:

  • MU_MEM_ADVISE_SET_READ_MOSTLY:这意味着数据主要是被读取,偶尔被写入。任何处理器对此区域的读取访问将在该处理器的内存中创建至少被访问页面的只读副本。此外,如果在该区域调用muMemPrefetchAsync,它将在目标处理器上创建数据的只读副本。如果任何处理器对此区域进行写入,除了发生写入的页面外,所有副本的相应页面将被使无效。device参数对于此建议被忽略。请注意,要使页面被读取复制,访问处理器必须是CPU或具有非零值的设备属性MU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS的GPU。此外,如果在没有设置设备属性MU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS的设备上创建了上下文,则直到销毁所有此类上下文之前,读取复制不会发生。如果内存区域引用有效的系统分配的分页内存,则访问设备必须具有非零值的设备属性MU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS,才能在该设备上创建只读副本。但请注意,如果访问设备还具有非零值的设备属性MU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES,则设置此建议将不会在该设备访问此内存区域时创建只读副本。

  • MU_MEM_ADVISE_UNSET_READ_MOSTLY:撤销MU_MEM_ADVISE_SET_READ_MOSTLY的效果,还防止统一内存驱动程序尝试对内存范围进行启发式读取复制。任何读取复制的数据副本将被折叠成单个副本。折叠副本的位置如果有页面的首选位置,并且一个读取复制的副本在该位置驻留,则为首选位置。否则,选择的位置是任意的。

  • MU_MEM_ADVISE_SET_PREFERRED_LOCATION:此建议将数据的首选位置设置为属于device的内存。传入MU_DEVICE_CPU作为device将首选位置设置为主机内存。如果device是GPU,则它必须具有非零值的设备属性MU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS。设置首选位置不会立即导致数据迁移到该位置。相反,它指导了在该内存区域发生故障时的迁移策略。如果数据已经在其首选位置,并且故障处理器可以在不要求迁移数据的情况下建立映射,则将避免数据迁移。另一方面,如果数据不在其首选位置,或者无法直接建立映射,则它将被迁移到访问它的处理器。重要的是要注意,设置首选位置不会阻止使用muMemPrefetchAsync进行的数据预取。拥有首选位置可以覆盖统一内存驱动程序中的页面抖动检测和解决逻辑。通常,如果检测到页面不断在例如主机和设备内存之间抖动,页面最终可能被统一内存驱动程序固定在主机内存中。但如果首选位置设置为设备内存,则页面将继续无限抖动。如果在此内存区域或其任何子集上还设置了MU_MEM_ADVISE_SET_READ_MOSTLY,则与该建议相关的策略将覆盖此建议的策略,除非从device的读取访问不会导致在该设备上创建只读副本,如建议MU_MEM_ADVISE_SET_READ_MOSTLY的描述中所述。如果内存区域引用有效的系统分配的分页内存,则device必须具有非零值的设备属性MU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS。此外,如果device具有非零值的设备属性MU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES,则此调用无效。但请注意,这种行为可能会在未来改变。

  • MU_MEM_ADVISE_UNSET_PREFERRED_LOCATION:撤销MU_MEM_ADVISE_SET_PREFERRED_LOCATION的效果,并将首选位置更改为无。

  • MU_MEM_ADVISE_SET_ACCESSED_BY:此建议意味着数据将被device访问。传入MU_DEVICE_CPU作为device将建议设置为CPU。如果device是GPU,则设备属性MU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS必须非零。此建议不会导致数据迁移,并且对数据的位置没有影响。相反,它导致数据始终在指定处理器的页面表中映射,只要数据的位置允许建立映射。如果数据因任何原因被迁移,则映射将相应更新。此建议建议在数据局部性不重要但避免故障很重要的场景中使用。考虑例如,包含多个GPU的系统,启用了点对点访问,其中一个GPU上的数据偶尔被对等GPU访问。在这种情况下,将数据迁移到其他GPU并不重要,因为访问不频繁,迁移的开销可能过高。但避免故障仍然可以帮助提高性能,因此提前设置映射是有用的。请注意,在CPU访问此数据时,数据可能会被迁移到主机内存,因为CPU通常不能直接访问设备内存。任何为此数据设置了MU_MEM_ADVISE_SET_ACCESSED_BY标志的GPU现在将其映射更新为指向主机内存中的页面。如果在此内存区域或其任何子集上还设置了MU_MEM_ADVISE_SET_READ_MOSTLY,则与该建议相关的策略将覆盖此建议的策略。此外,如果此内存区域的首选位置或其任何子集也是设备,则与MU_MEM_ADVISE_SET_PREFERRED_LOCATION相关的策略将覆盖此建议的策略。如果内存区域引用有效的系统分配的分页内存,则device必须具有非零值的设备属性MU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS。此外,如果device具有非零值的设备属性MU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES,则此调用无效。

  • MU_MEM_ADVISE_UNSET_ACCESSED_BY:撤销MU_MEM_ADVISE_SET_ACCESSED_BY的效果。从device到数据的任何映射可能随时被移除,导致访问结果为非致命页面错误。如果内存区域引用有效的系统分配的分页内存,则device必须具有非零值的设备属性MU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS。此外,如果device具有非零值的设备属性MU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES,则此调用无效。

参数

devPtr - 要设置建议的内存指针
count - 内存范围的大小(字节)
advice - 要应用于指定内存范围的建议
device - 要应用建议的设备

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数是异步的。

支持使用空流。

另请参阅

muMemcpy, muMemcpyPeer, muMemcpyAsync, muMemcpy3DPeerAsync, muMemPrefetchAsync, musaMemAdvise

muMemRangeGetAttribute()

MUresult MUSAAPI muMemRangeGetAttribute (
void∗ data,
size_t dataSize,
MUmem_range_attribute attribute,
MUdeviceptr devPtr,
size_t count)

查询给定内存范围的属性。

查询从devPtr开始的count字节内存范围的属性。内存范围必须引用通过muMemAllocManaged分配的管理内存或通过managed变量声明的内存。

attribute参数可以取以下值:

  • MU_MEM_RANGE_ATTRIBUTE_READ_MOSTLY:如果指定此属性,data将被解释为32位整数,dataSize必须是4。返回的结果如果是所有页面在给定内存范围内启用了读取复制,则为1,否则为0。
  • MU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION:如果指定此属性,data将被解释为32位整数,dataSize必须是4。返回的结果如果是所有页面在内存范围内将该GPU作为其首选位置,则为GPU设备ID,或者如果所有页面在内存范围内将CPU作为其首选位置,则为MU_DEVICE_CPU,或者如果页面没有相同的首选位置或某些页面根本没有首选位置,则为MU_DEVICE_INVALID。请注意,内存范围内页面的实际位置可能与首选位置不同。
  • MU_MEM_RANGE_ATTRIBUTE_ACCESSED_BY:如果指定此属性,data将被解释为32位整数数组,dataSize必须是4的非零倍数。返回的结果将是设置了MU_MEM_ADVISE_SET_ACCESSED_BY的设备ID列表,用于整个内存范围。如果任何设备对于整个内存范围没有设置该建议,则该设备将不被包括在内。如果data大于设置了该建议的设备数量,则在提供的所有额外空间中返回MU_DEVICE_INVALID。例如,如果dataSize是12(即data有3个元素),而只有设备0设置了建议,则返回的结果将是{0, MU_DEVICE_INVALID, MU_DEVICE_INVALID}。如果data小于设置了该建议的设备数量,则只返回数组中可以容纳的设备数量。然而,没有保证将返回哪些特定设备。
  • MU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION:如果指定此属性,data将被解释为32位整数,dataSize必须是4。返回的结果将是所有页面通过muMemPrefetchAsync显式预取到最后位置的最后位置。这将是一个GPU ID或MU_DEVICE_CPU,取决于最后一次预取的位置是在GPU还是CPU。如果内存范围内的任何页面从未显式预取,或者所有页面没有预取到相同的位置,则返回MU_DEVICE_INVALID。请注意,这只是返回了应用程序请求将内存范围预取到的位置。它没有指示预取操作是否已完成或甚至开始。

参数

data - 指向内存位置的指针,每个属性查询的结果将被写入到该位置。
dataSize - 包含data大小的数组
attribute - 要查询的属性
devPtr - 要查询的范围的开始
count - 要查询的范围的大小

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

此函数是异步的。

支持使用空流。

另请参阅

muMemRangeGetAttributes, muMemPrefetchAsync, muMemAdvise, musaMemRangeGetAttribute

muMemRangeGetAttributes()

MUresult MUSAAPI muMemRangeGetAttributes (
void** data,
size_t* dataSizes,
MUmem_range_attribute* attributes,
size_t numAttributes,
MUdeviceptr devPtr,
size_t count)

查询给定内存范围的属性。

查询从devPtr开始的count字节内存范围的属性。内存范围必须引用通过muMemAllocManaged分配的管理内存或通过managed变量声明的内存。attributes数组将被解释为有numAttributes个条目。dataSizes数组也将被解释为有numAttributes个条目。查询结果将存储在data中。

支持的属性列表如下。有关属性描述和限制,请参阅muMemRangeGetAttribute。

• MU_MEM_RANGE_ATTRIBUTE_READ_MOSTLY • MU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION • MU_MEM_RANGE_ATTRIBUTE_ACCESSED_BY • MU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION

参数

data - 包含指向内存位置的指针的二维数组,每个属性查询的结果将被写入到这些位置。
dataSizes - 包含每个结果大小的数组
attributes - 要查询的属性数组(numAttributes和此数组中的属性数量应该匹配)
numAttributes - 要查询的属性数量
devPtr - 要查询的范围的开始
count - 要查询的范围的大小

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_INVALID_CONTEXT, MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMemRangeGetAttribute, muMemAdvise, muMemPrefetchAsync, musaMemRangeGetAttributes

muPointerGetAttributes()

MUresult MUSAAPI muPointerGetAttributes (
unsigned int numAttributes,
MUpointer_attribute* attributes,
void** data,
MUdeviceptr ptr)

在先前分配的内存区域上设置属性。

支持的属性有:

• MU_POINTER_ATTRIBUTE_SYNC_MEMOPS:

可以设置(1)或取消设置(0)的布尔属性。当设置时,ptr指向的内存区域保证始终同步内存操作是同步的。如果在此属性设置时有一些之前发起的同步内存操作待处理,函数将不会返回,直到这些内存操作完成。有关同步内存操作可能表现出异步行为的更多情况,请参见标题为“API同步行为”的节。value将被视为指向unsigned integer的指针,该属性将被设置。

参数

value - 包含要设置值的内存的指针
attribute - 要设置的指针属性
ptr - 使用MUSA内存分配API分配的内存区域的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muPointerGetAttribute, muPointerGetAttributes, muMemAlloc, muMemFree, muMemAllocHost, muMemFreeHost, muMemHostAlloc,
muMemHostRegister, muMemHostUnregister

返回有关指针的信息。

支持的属性有(有关属性描述和限制,请参阅muPointerGetAttribute):

• MU_POINTER_ATTRIBUTE_CONTEXT • MU_POINTER_ATTRIBUTE_MEMORY_TYPE • MU_POINTER_ATTRIBUTE_DEVICE_POINTER • MU_POINTER_ATTRIBUTE_HOST_POINTER • MU_POINTER_ATTRIBUTE_SYNC_MEMOPS • MU_POINTER_ATTRIBUTE_BUFFER_ID • MU_POINTER_ATTRIBUTE_IS_MANAGED • MU_POINTER_ATTRIBUTE_DEVICE_ORDINAL • MU_POINTER_ATTRIBUTE_RANGE_START_ADDR • MU_POINTER_ATTRIBUTE_RANGE_SIZE • MU_POINTER_ATTRIBUTE_MAPPED • MU_POINTER_ATTRIBUTE_IS_LEGACY_MUSA_IPC_CAPABLE • MU_POINTER_ATTRIBUTE_ALLOWED_HANDLE_TYPES • MU_POINTER_ATTRIBUTE_MEMPOOL_HANDLE

参数

numAttributes - 要查询的属性数量
attributes - 要查询的属性数组(numAttributes和此数组中的属性数量应该匹配)
data - 包含指向内存位置的指针的二维数组,每个属性查询的结果将被写入到这些位置。
ptr - 要查询的指针

与muPointerGetAttribute不同,此函数在遇到的ptr不是有效的MUSA指针时不会返回错误。相反,属性被赋予默认的NULL值,并且返回MUSA_SUCCESS。

如果ptr没有被分配、映射或注册到使用UVA(统一虚拟寻址)的MUcontext,将返回MUSA_ERROR_INVALID_CONTEXT。

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_INVALID_CONTEXT, MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muPointerGetAttribute, muPointerSetAttribute, musaPointerGetAttributes

流管理

本节描述了低级MUSA驱动应用程序编程接口的流管理功能。

muStreamCreate()

MUresult MUSAAPI muStreamCreate (
MUstream* phStream,
unsigned int Flags)

创建流。

创建流并在phStream中返回句柄。Flags参数确定流的行为。

Flags的有效值有:

  • MU_STREAM_DEFAULT:默认流创建标志。
  • MU_STREAM_NON_BLOCKING:指定在创建的流中运行的工作可能与流0(空流)中运行的工作并发执行,并且创建的流不应与流0执行隐式同步。

参数

phStream - 返回新创建的流
Flags - 流创建参数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamDestroy, muStreamCreateWithPriority, muStreamGetPriority, muStreamGetFlags, muStreamWaitEvent, muStreamQuery,
muStreamSynchronize, muStreamAddCallback, musaStreamCreate, musaStreamCreateWithFlags

muStreamCreateWithPriority()

MUresult MUSAAPI muStreamCreateWithPriority (
MUstream* phStream,
unsigned int flags,
int priority )

创建具有给定优先级的流。

创建具有指定优先级的流,并在phStream中返回句柄。此API改变了流中工作的调度优先级。较高优先级流中的工作可能会抢占已经在较低优先级流中执行的工作。

priority遵循约定,其中较低的数字代表较高的优先级。'0'代表默认优先级。有意义的数值优先级范围可以使用muCtxGetStreamPriorityRange查询。如果指定的优先级超出了muCtxGetStreamPriorityRange返回的数值范围,则它将自动被限制在范围内的最低或最高数字。

参数

phStream - 返回新创建的流
flags - 流创建标志。有关有效标志的列表,请参阅muStreamCreate
priority - 流优先级。较低的数字代表较高的优先级。有关可以传递的有意义的流优先级的更多信息,请参阅muCtxGetStreamPriorityRange。

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY

注意:

此函数也可能返回来自先前异步操作的错误码。

注意

仅在计算能力为3.5或更高的GPU上支持流优先级。
在当前实现中,只有优先级流中启动的计算内核受到流优先级的影响。流优先级对主机到设备和设备到主机的内存操作没有影响。

另请参阅

muStreamDestroy, muStreamCreate, muStreamGetPriority, muCtxGetStreamPriorityRange, muStreamGetFlags, muStreamWaitEvent,
muStreamQuery, muStreamSynchronize, muStreamAddCallback, musaStreamCreateWithPriority

muStreamGetPriority()

MUresult MUSAAPI muStreamGetPriority (
MUstream hStream,
int* priority )

查询给定流的优先级。

查询使用muStreamCreate或muStreamCreateWithPriority创建的流的优先级,并在priority中返回优先级。请注意,如果流是使用优先级范围之外的优先级创建的,则此函数返回限制后的优先级。有关优先级限制的详细信息,请参阅muStreamCreateWithPriority。

参数

hStream - 要查询的流的句柄
priority - 指向整数的指针,其中返回流的优先级

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_OUT_OF_MEMORY

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamDestroy, muStreamCreate, muStreamCreateWithPriority, muCtxGetStreamPriorityRange, muStreamGetFlags, musa←-
StreamGetPriority

muStreamGetDevice()

MUresult MUSAAPI muStreamGetDevice(MUstream hStream, MUdevice *device);

返回流的设备句柄。

*device 中返回流 hStream 的设备句柄。

参数

hStream - 要查询的流的句柄
device - 返回流所属的设备

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_OUT_OF_MEMORY

注意: 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamDestroy, muStreamCreate, muGreenCtxStreamCreate, muStreamGetFlags

muStreamGetFlags()

MUresult MUSAAPI muStreamGetFlags (
MUstream hStream,
unsigned int *flags)

查询给定流的标志。

查询使用muStreamCreate或muStreamCreateWithPriority创建的流的标志,并在flags中返回标志。

参数

hStream - 要查询的流的句柄
flags - 指向无符号整数的指针,其中返回流的标志。返回在flags中的值是创建此流时使用的所有标志的逻辑'OR'。有关有效标志的列表,请参阅muStreamCreate

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_OUT_OF_MEMORY

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamDestroy, muStreamCreate, muStreamGetPriority, musaStreamGetFlags

muStreamGetId()

MUresult MUSAAPI muStreamGetId(MUstream hStream, unsigned long long *streamId);

返回与提供的流句柄关联的唯一ID。

*streamId 中返回与给定流句柄关联的唯一ID。该ID在程序的生命周期内是唯一的。

流句柄 hStream 可以引用以下任何内容:

  • 通过任何MUSA驱动API创建的流,例如 muStreamCreatemuStreamCreateWithPriority,或它们的运行时API等价物,例如 musaStreamCreatemusaStreamCreateWithFlagsmusaStreamCreateWithPriority。传递无效句柄将导致未定义行为。
  • 任何特殊流,例如NULL流、MU_STREAM_LEGACYMU_STREAM_PER_THREAD。这些流的运行时API等价物也被接受,分别是 NULL、musaStreamLegacymusaStreamPerThread

参数

hStream - 要查询的流的句柄
streamId - 指向存储流ID的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意: 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamDestroy, muStreamCreate, muStreamGetPriority, musaStreamGetId

muStreamGetCtx()

MUresult MUSAAPI muStreamGetCtx (
MUstream hStream,
MUcontext* pctx)

查询与流关联的上下文。

返回流与之关联的MUSA上下文。

流句柄hStream可以引用以下任何内容:

  • 通过任何MUSA驱动API创建的流,例如muStreamCreate和muStreamCreateWithPriority,或它们的运行时API等价物,例如musaStreamCreate, musaStreamCreateWithFlags和musaStreamCreateWithPriority。返回的上下文是在创建流时调用线程中活动的上下文。传递无效句柄将导致未定义行为。
  • 任何特殊流,例如NULL流,MU_STREAM_LEGACY和MU_STREAM_PER_THREAD。这些的特殊句柄的运行时API等价物也被接受,它们分别是NULL, musaStreamLegacy和musaStreamPerThread。指定任何特殊句柄将返回调用线程当前的上下文。如果没有上下文当前在调用线程中,将返回MUSA_ERROR_INVALID_CONTEXT。

参数

hStream - 要查询的流的句柄
pctx - 返回与流关联的上下文

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE,

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamDestroy, muStreamCreateWithPriority, muStreamGetPriority, muStreamGetFlags, muStreamWaitEvent, muStreamQuery,
muStreamSynchronize, muStreamAddCallback, musaStreamCreate, musaStreamCreateWithFlags

muStreamWaitEvent()

MUresult MUSAAPI muStreamWaitEvent (
MUstream hStream,
MUevent hEvent,
unsigned int Flags)

使计算流等待事件。

使所有提交给hStream的未来工作等待hEvent中捕获的所有工作。有关事件捕获的内容的详细信息,请参阅muEventRecord()。如果适用,同步将在设备上高效执行。hevent可能来自与hStream不同的上下文或设备。

flags包括:

  • MU_EVENT_WAIT_DEFAULT:默认事件创建标志。
  • MU_EVENT_WAIT_EXTERNAL:当执行流捕获时,事件在图中被捕获为外部事件节点。此标志在流捕获之外无效。

参数

hStream - 要等待的流
hEvent - 要等待的事件(不能为NULL)
Flags - 请参阅CUevent_capture_flags

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

另请参阅

muStreamCreate, muEventRecord, muStreamQuery, muStreamSynchronize, muStreamAddCallback, muStreamDestroy, musaStreamWaitEvent

muStreamAddCallback()

MUresult MUSAAPI muStreamAddCallback (
MUstreamhStream,
MUstreamCallbackcallback,
void* userData,
unsigned int flags)

向计算流添加回调。

注意

此函数计划最终弃用和移除。如果您不需要在设备错误的情况下执行回调,请考虑使用muLaunchHostFunc。此外,此函数不受muStreamBeginCapture和muStreamEndCapture支持,与muLaunchHostFunc不同。

在所有当前排队的项目完成后,在主机上添加一个回调以被调用。对于每个muStreamAddCallback调用,回调将被执行一次。回调将阻塞流中的后续工作,直到它完成。

回调可能会收到MUSA_SUCCESS或错误代码。在设备错误的情况下,所有随后执行的回调将接收到适当的MUresult。

回调不得进行任何MUSA API调用。尝试使用MUSA API将导致MUSA_ERROR_NOT_PERMITTED。回调不得执行任何可能依赖于未完成的设备工作或其他回调的同步,这些回调没有被强制要求更早运行。没有强制顺序的回调(在独立流中)以未定义的顺序执行,并且可能被序列化。

就统一内存而言,回调执行提供了一系列保证:

  • 回调流在回调期间被认为是空闲的。因此,例如,回调总是可以使用附加到回调流的内存。
  • 回调的开始执行具有与在回调之前立即记录的事件同步相同的效果。因此,它同步了之前“加入”回调的流。
  • 向任何流添加设备工作不会使流变为活动状态,直到所有前面的主机函数和流回调都已执行。因此,例如,即使在另一个流中添加了工作,如果工作被安排在回调之后,并且有事件,回调也可以使用全局附加的内存。
  • 回调的完成不会使流变为活动状态,除非如上所述。如果回调之后没有设备工作,回调流将保持空闲状态,并且在没有设备工作的情况下,连续回调之间也将保持空闲状态。因此,例如,可以通过在流末尾的回调发出信号来完成流同步。

参数

hStream - 要添加回调的流
callback - 一旦前面的流操作完成,将被调用的函数
userData - 传递给回调函数的用户指定数据
flags - 保留供将来使用,必须为0

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_NOT_SUPPORTED

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

另请参阅

muStreamCreate, muStreamQuery, muStreamSynchronize, muStreamWaitEvent, muStreamDestroy, muMemAllocManaged,
muStreamAttachMemAsync, cuStreamLaunchHostFunc, musaStreamAddCallback

muStreamBeginCapture()

MUresult MUSAAPI muStreamBeginCapture (
MUstream hStream,
MUstreamCaptureMode mode)

开始在流上捕获图。

在hStream上开始图捕获。当流处于捕获模式时,所有推送到流的操作不会被执行,而是被捕获到图中,该图将通过muStreamEndCapture返回。如果流是MU_STREAM_LEGACY,则不能启动捕获。捕获必须在启动捕获的同一个流上结束,并且只有在流不在捕获模式时才能启动。可以通过muStreamIsCapturing查询捕获模式。可以通过muStreamGetCaptureInfo查询代表捕获序列的唯一ID。

如果模式不是MU_STREAM_CAPTURE_MODE_RELAXED,则必须从同一个线程调用此流上的muStreamEndCapture。

参数

hStream - 要启动捕获的流
mode - 控制此捕获序列与其他潜在不安全的API调用的交互。有关更多详细信息,请参阅muThreadExchangeStreamCaptureMode。

注意

使用此API捕获的内核不能使用纹理和表面引用。通过任何纹理或表面引用读取或写入是未定义行为。此限制不适用于纹理和表面对象。

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamCreate, muStreamIsCapturing, muStreamEndCapture, muThreadExchangeStreamCaptureMode

muStreamEndCapture()

MUresult MUSAAPI muStreamEndCapture (
MUstream hStream,
MUgraph *phGraph)

交换线程的流捕获交互模式。

将调用线程的流捕获交互模式设置为∗mode中包含的值,并将线程的先前模式覆盖为∗mode。为了在函数或模块边界之间促进确定性行为,鼓励调用者以推-弹方式使用此API:

MUstreamCaptureMode mode = desiredMode;
muThreadExchangeStreamCaptureMode(&mode);
...
muThreadExchangeStreamCaptureMode(&mode); // 恢复先前模式

在流捕获期间(参见muStreamBeginCapture),某些操作,例如对musaMalloc的调用,可能是不安全的。在musaMalloc的情况下,操作不是异步地排队到流中,并且不会被流捕获观察到。因此,如果通过muStreamBeginCapture捕获的操作序列依赖于在每次启动图时重放分配,被捕获的图将无效。

因此,流捕获对可以在muStreamBeginCapture-muStreamEndCapture序列内或并发进行的API调用施加了限制。此行为可以通过此API和muStreamBeginCapture的标志进行控制。

线程的模式是以下之一:

  • MU_STREAM_CAPTURE_MODE_GLOBAL:这是默认模式。如果本地线程有一个正在进行的捕获序列,该序列不是用MU_STREAM_CAPTURE_MODE_RELAXED在muStreamBeginCapture中启动的,或者如果任何其他线程有一个并发的捕获序列,用MU_STREAM_CAPTURE_MODE_GLOBAL启动,这个线程被禁止进行潜在不安全的API调用。
  • MU_STREAM_CAPTURE_MODE_THREAD_LOCAL:如果本地线程有一个正在进行的捕获序列,不是用MU_STREAM_CAPTURE_MODE_RELAXED启动的,它被禁止进行潜在不安全的API调用。其他线程中的并发捕获序列被忽略。
  • MU_STREAM_CAPTURE_MODE_RELAXED:本地线程不被禁止进行潜在不安全的API调用。请注意,线程仍然被禁止进行与流捕获必然冲突的API调用,例如,尝试对在捕获序列中最后记录的事件执行muEventQuery。

参数

mode - 指向要与当前模式交换的模式值的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。 注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamBeginCapture

结束流的捕获,返回捕获的图

在hStream上结束捕获,通过phGraph返回捕获的图。捕获必须已经在hStream上通过调用muStreamBeginCapture启动。如果由于违反流捕获规则而使捕获无效,则返回NULL图。

如果muStreamBeginCapture的mode参数不是MU_STREAM_CAPTURE_MODE_RELAXED,则此调用必须来自与muStreamBeginCapture相同的线程。

参数

hStream - 要查询的流
phGraph - 捕获的图

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_STREAM_CAPTURE_WRONG_THREAD

注意:

此函数也可能返回来自先前异步操作的错误码。 注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamCreate, muStreamBeginCapture, muStreamIsCapturing

uStreamAttachMemAsync()

MUresult MUSAAPI muStreamAttachMemAsync (
MUstream hStream,
MUdeviceptr dptr,
size_t length,
unsigned int flags)

异步将内存附加到流

hStream中排队一个操作,指定从dptr开始的length字节内存的流关联。此函数是流有序操作,这意味着它依赖于,并且只有在流中前面的工作完成后才会生效。任何先前的关联将被自动替换。

dptr必须指向以下类型的内存之一:

  • 使用managed关键字声明的管理内存或使用muMemAllocManaged分配的管理内存。
  • 一个有效的主机可访问的系统分配的分页内存区域。如果与流关联的设备报告设备属性MU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS的非零值,则只能指定这种类型的内存。

对于管理分配,length必须是零或整个分配的大小。两者都表示整个分配的流关联正在改变。目前,不可能改变管理分配的一部分的流关联。

对于分页主机分配,length必须非零。

使用flags指定流关联,flags必须是MUmemAttach_flags之一。如果指定了MU_MEM_ATTACH_GLOBAL标志,则任何流上的任何设备都可以访问内存。如果指定了MU_MEM_ATTACH_HOST标志,则程序保证它不会从任何设备上的任何流访问设备上的内存,该设备对于设备属性MU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS的值为零。如果指定了MU_MEM_ATTACH_SINGLE标志,并且hStream与设备属性MU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS的值为零的设备关联,则程序保证它只会从hStream访问设备上的内存。向NULL流附加单独的是非法的,因为NULL流是一个虚拟全局流,而不是特定的流。在这种情况下将返回错误。

当内存与单个流关联时,统一内存系统将允许CPU访问此内存区域,只要hStream中的所有操作都已完成,无论其他流是否活跃。实际上,这将活动GPU对管理内存区域的独占所有权从整个GPU活动限制为每个流活动。

从与之无关的流访问设备上的内存将产生未定义的结果。统一内存系统不会执行任何错误检查,以确保启动到其他流的内核不访问此区域。

程序有责任通过事件、同步或其他方式对muStreamAttachMemAsync的调用进行排序,以确保在所有时间合法访问内存。数据可见性和一致性将为所有跟随流关联更改的内核适当更改。

如果hStream被销毁,而数据与之关联,则关联将被移除,关联将恢复到muMemAllocManaged指定的分配的默认可见性。对于managed变量,默认关联始终是MU_MEM_ATTACH_GLOBAL。请注意,销毁流是一个异步操作,因此,更改为默认关联不会发生,直到流中的所有工作都已完成。

参数

hStream - 在此流中排队附加操作
dptr - 内存的指针(必须是管理内存的指针,或指向有效的主机可访问的系统分配的分页内存区域)
length - 内存的长度
flags - 必须是MUmemAttach_flags之一

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_NOT_SUPPORTED

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

另请参阅

muStreamCreate, muStreamQuery, muStreamSynchronize, muStreamWaitEvent, muStreamDestroy, muMemAllocManaged, musa←-
StreamAttachMemAsync

muStreamQuery()

MUresult MUSAAPI muStreamQuery (
MUstream hStream )

确定计算流的状态。

如果由hStream指定的流中的所有操作都已完成,则返回MUSA_SUCCESS,如果没有完成,则返回MUSA_ERROR_NOT_READY。

就统一内存而言,MUSA_SUCCESS的返回值等同于调用muStreamSynchronize()。

参数

hStream - 要查询状态的流

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_NOT_READY

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

另请参阅

muStreamCreate, muStreamWaitEvent, muStreamDestroy, muStreamSynchronize, muStreamAddCallback, musaStreamQuery

muStreamSynchronize()

MUresult MUSAAPI muStreamSynchronize (
MUstream hStream )

等待流的任务完成。

等待设备完成由hStream指定的流中的所有操作。如果上下文是使用MU_CTX_SCHED_BLOCKING_SYNC标志创建的,则CPU线程将阻塞,直到流完成所有任务。

参数

hStream - 要等待的流

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

另请参阅

muStreamCreate, muStreamDestroy, muStreamWaitEvent, muStreamQuery, muStreamAddCallback, musaStreamSynchronize

muStreamDestroy()

MUresult MUSAAPI muStreamDestroy (
MUstreamhStream )

销毁流。

销毁由hStream指定的流。

如果设备仍在流hStream中执行工作时调用muStreamDestroy(),则函数将立即返回,并且与hStream相关的资源将在设备完成流hStream中的所有工作后自动释放。

参数

hStream - 要销毁的流

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamCreate, muStreamWaitEvent, muStreamQuery, muStreamSynchronize, muStreamAddCallback, musaStreamDestroy

muStreamCopyAttributes()

MUresult MUSAAPI muStreamCopyAttributes (
MUstream dst,
MUstream src )

从源流复制属性到目标流。

从源流src复制属性到目标流dst。两个流必须具有相同的上下文。

参数

out dst 目标流
in src 源流 属性列表请参阅MUstreamAttrID

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

MUaccessPolicyWindow

muStreamGetAttribute()

MUresult MUSAAPI muStreamGetAttribute (
MUstream hStream,
MUstreamAttrID attr,
MUstreamAttrValue∗ value_out)

查询流属性。

hStream查询属性attr并将其存储在value_out的相应成员中。

参数

in hStream
in attr
out value_out

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

MUaccessPolicyWindow

muStreamSetAttribute()

MUresult MUSAAPI muStreamSetAttribute (
MUstream hStream,
MUstreamAttrID attr,
const MUstreamAttrValue∗ value)

设置流属性。

根据value的相应属性设置hStream上的属性attr。更新的属性将应用于后续提交到流的工作。它不会影响之前提交的工作。

参数

out hStream
in attr
in value

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

MUaccessPolicyWindow

事件管理

muEventCreate()

MUresult MUSAAPI muEventCreate (
MUevent * phEvent,
unsigned int Flags)

创建一个事件。

为当前上下文创建一个事件 *phEvent,并通过 Flags 指定标志。有效标志包括:

  • MU_EVENT_DEFAULT: 默认事件创建标志。
  • MU_EVENT_BLOCKING_SYNC: 指定创建的事件应使用阻塞同步。使用 muEventSynchronize() 等待此标志创建的事件的 CPU 线程将阻塞,直到事件实际被记录。
  • MU_EVENT_DISABLE_TIMING: 指定创建的事件不需要记录时间数据。使用此标志创建的事件,并且没有指定 MU_EVENT_BLOCKING_SYNC 标志的,将在使用 muStreamWaitEvent() 和 muEventQuery() 时提供最佳性能。
  • MU_EVENT_INTERPROCESS: 指定创建的事件可以被用作进程间事件,由 muIpcGetEventHandle() 使用。 必须与 MU_EVENT_DISABLE_TIMING 一起指定 MU_EVENT_INTERPROCESS。

参数

phEvent - 返回新创建的事件
Flags - 事件创建标志

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muEventRecord, muEventQuery, muEventSynchronize, muEventDestroy, muEventElapsedTime, musaEventCreate, musaEvent←-
CreateWithFlags

muEventRecord()

MUresult MUSAAPI muEventRecord (
MUevent hEvent,
MUstream hStream )

记录一个事件。

hEvent 中捕获 hStream 在此次调用时的内容。hEventhStream 必须来自同一上下文。然后,muEventQuery() 或 muStreamWaitEvent() 等调用将检查或等待捕获的工作完成。在此调用后使用 hStream 不会修改 hEvent。有关默认流行为的说明,请参见捕获的内容。

muEventRecord() 可以多次调用同一事件,并覆盖先前捕获的状态。其他 API(如 muStreamWaitEvent())使用 API 调用时最近捕获的状态,并且不受后来对 muEventRecord() 的调用影响。在第一次调用 muEventRecord() 之前,事件表示一个空的工作集,例如,muEventQuery() 将返回 MUSA_SUCCESS。

参数

hEvent - 要记录的事件
hStream - 要记录事件的流

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

另请参阅

muEventCreate, muEventQuery, muEventSynchronize, muStreamWaitEvent, muEventDestroy, muEventElapsedTime, musaEvent←-
Record, muEventRecordWithFlags

muEventRecordWithFlags()

MUresult MUSAAPI muEventRecordWithFlags (
MUevent hEvent,
MUstream hStream,
unsigned int flags)

记录一个事件。

hEvent 中捕获 hStream 在此次调用时的内容。hEventhStream 必须来自同一上下文。然后,muEventQuery() 或 muStreamWaitEvent() 等调用将检查或等待捕获的工作完成。在此调用后使用 hStream 不会修改 hEvent。有关默认流行为的说明,请参见捕获的内容。

muEventRecordWithFlags() 可以多次调用同一事件,并覆盖先前捕获的状态。其他 API(如 muStreamWaitEvent())使用 API 调用时最近捕获的状态,并且不受后来对 muEventRecordWithFlags() 的调用影响。在第一次调用 muEventRecordWithFlags() 之前,事件表示一个空的工作集,例如,muEventQuery() 将返回 MUSA_SUCCESS。

标志包括:

  • MU_EVENT_RECORD_DEFAULT: 默认事件创建标志。
  • MU_EVENT_RECORD_EXTERNAL: 在执行流捕获时,事件被捕获为图中的外部事件节点。此标志在流捕获之外无效。

参数

hEvent - 要记录的事件
hStream - 要记录事件的流
flags - 参见 CUevent_capture_flags

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

另请参阅

muEventCreate, muEventQuery, muEventSynchronize, muStreamWaitEvent, muEventDestroy, muEventElapsedTime, muEventRecord,
musaEventRecord

muEventQuery()

MUresult MUSAAPI muEventQuery (
MUevent hEvent)

查询事件的状态。

查询 hEvent 当前捕获的所有工作的状态。有关事件捕获的内容的详细信息,请参见 muEventRecord()。

如果所有捕获的工作已完成,则返回 MUSA_SUCCESS,如果任何捕获的工作未完成,则返回 MUSA_ERROR_NOT_READY。

就统一内存而言,MUSA_SUCCESS 的返回值等同于已调用 muEventSynchronize()。

参数

hEvent - 要查询的事件

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_HANDLE,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_READY

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muEventCreate, muEventRecord, muEventSynchronize, muEventDestroy, muEventElapsedTime, musaEventQuery

muEventSynchronize()

MUresult MUSAAPI muEventSynchronize (
MUevent hEvent)

等待事件完成。

等待 hEvent 当前捕获的所有工作的完成。有关事件捕获的内容的详细信息,请参见 muEventRecord()。

等待使用 MU_EVENT_BLOCKING_SYNC 标志创建的事件将导致调用 CPU 线程阻塞,直到事件被设备完成。如果未设置 MU_EVENT_BLOCKING_SYNC 标志,则 CPU 线程将忙等待,直到事件被设备完成。

参数

hEvent - 要等待的事件

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muEventCreate, muEventRecord, muEventQuery, muEventDestroy, muEventElapsedTime, musaEventSynchronize

muEventDestroy()

MUresult MUSAAPI muEventDestroy (
MUevent hEvent)

销毁一个事件。

销毁由 hEvent 指定的事件。

事件可能在完成之前被销毁(即,当 muEventQuery() 返回 MUSA_ERROR_NOT_READY 时)。在这种情况下,调用不会阻塞事件的完成,任何相关资源将在完成后异步自动释放。

参数

hEvent - 要销毁的事件

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muEventCreate, muEventRecord, muEventQuery, muEventSynchronize, muEventElapsedTime, musaEventDestroy

muEventElapsedTime()

MUresult MUSAAPI muEventElapsedTime (
float * pMilliseconds,
MUevent hStart,
MUevent hEnd)

计算两个事件之间的经过时间。

计算两个事件之间的经过时间(以毫秒为单位,分辨率约为 0.5 微秒)。

如果任一事件最后记录在非 NULL 流中,则结果时间可能大于预期(即使两个事件都使用了相同的流句柄)。这是因为 muEventRecord() 操作是异步进行的,并且不能保证测量的延迟实际上只是在两个事件之间。在两个测量事件之间可能执行任何数量的其他不同流操作,从而显著改变时间。

如果 muEventRecord() 未在任一事件上调用,则返回 MUSA_ERROR_INVALID_HANDLE。如果 muEventRecord() 已在两个事件上调用,但至少有一个事件尚未完成(即,muEventQuery() 至少在一个事件上返回 MUSA_ERROR_NOT_READY),则返回 MUSA_ERROR_NOT_READY。如果任一事件是使用 MU_EVENT_DISABLE_TIMING 标志创建的,则此函数将返回 MUSA_ERROR_INVALID_HANDLE。

参数

pMilliseconds - hStart 和 hEnd 之间的时间(毫秒)
hStart - 开始事件
hEnd - 结束事件

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_NOT_READY

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muEventCreate, muEventRecord, muEventQuery, muEventSynchronize, muEventDestroy, musaEventElapsedTime

muImportExternalSemaphore()

MUresult MUSAAPI muImportExternalSemaphore (
MUexternalSemaphore *extSem_out,
const MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC *semHandleDesc)

导入外部信号量。

导入外部分配的同步对象,并在 extSem_out 中返回该对象的句柄。

被导入的句柄的属性必须在 semHandleDesc 中描述。MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC 定义如下:

typedef struct MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC_st {
MUexternalSemaphoreHandleType type;
union {
int fd;
struct {
void *handle;
const void *name;
} win32;
const void* NvSciSyncObj;
} handle;
unsigned int flags;
} MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC;

其中 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type 指定被导入的句柄类型。MUexternalSemaphoreHandleType 定义如下:

typedef enum MUexternalSemaphoreHandleType_enum {
MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD = 1,
MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32 = 2,
MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT = 3,
MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE = 4,
MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE = 5,
MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_MTSCISYNC = 6,
MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX = 7,
MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT = 8,
MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD = 9,
MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32 = 10
} MUexternalSemaphoreHandleType;

如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::typeMU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD,那么 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::fd 必须是一个有效的文件描述符,引用一个同步对象。文件描述符的所有权在句柄成功导入后转移给 MUSA 驱动。在导入后对文件描述符执行任何操作都会导致未定义行为。

如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::typeMU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32,那么 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handleMUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name 中必须恰好有一个不为 NULL。如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle 不为 NULL,那么它必须表示一个引用同步对象的有效共享 NT 句柄。此句柄的所有权不会转移给 MUSA,因此应用程序必须使用适当的系统调用来释放句柄。如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name 不为 NULL,那么它必须命名一个有效的同步对象。

如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::typeMU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT,那么 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle 必须非空,而 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name 必须为 NULL。指定的句柄必须是一个全局共享的 KMT 句柄。此句柄不持有对底层对象的引用,因此当对同步对象的所有引用都被销毁时,该句柄将无效。

如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::typeMU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE,那么 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handleMUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name 中必须恰好有一个不为 NULL。如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle 不为 NULL,那么它必须表示一个由 ID3D12Device::CreateSharedHandle 返回的有效共享 NT 句柄,该句柄引用 ID3D12Fence 对象。此句柄持有对底层对象的引用。如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name 不为 NULL,那么它必须命名一个引用有效 ID3D12Fence 对象的有效同步对象。

如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::typeMU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE,那么 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle 表示一个由 ID3D11Fence::CreateSharedHandle 返回的有效共享 NT 句柄。如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name 不为 NULL,那么它必须命名一个引用有效 ID3D11Fence 对象的有效同步对象。

如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::typeMU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_MTSCISYNC,那么 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::mtSciSyncObj 表示一个有效的 NvSciSyncObj。

如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::typeMU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX,那么 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle 表示一个由 IDXGIResource1::CreateSharedHandle 返回的有效共享 NT 句柄,该句柄引用 IDXGIKeyedMutex 对象。如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name 不为 NULL,那么它必须命名一个引用有效 IDXGIKeyedMutex 对象的有效同步对象。

如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::typeMU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT,那么 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle 表示一个由 IDXGIResource::GetSharedHandle 返回的有效共享 KMT 句柄,该句柄引用 IDXGIKeyedMutex 对象,而 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name 必须为 NULL。

如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::typeMU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD,那么 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::fd 必须是一个有效的文件描述符,引用一个同步对象。文件描述符的所有权在句柄成功导入后转移给 MUSA 驱动。在导入后对文件描述符执行任何操作都会导致未定义行为。

如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::typeMU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32,那么 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handleMUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name 中必须恰好有一个不为 NULL。如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle 不为 NULL,那么它必须表示一个引用同步对象的有效共享 NT 句柄。此句柄的所有权不会转移给 MUSA,因此应用程序必须使用适当的系统调用来释放句柄。如果 MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name 不为 NULL,那么它必须命名一个有效的同步对象。

参数

extSem_out - 返回的外部信号量句柄
semHandleDesc - 信号量导入句柄描述符

返回值

MUSA_SUCCESS, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_NOT_SUPPORTED, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_OPERATING_SYSTEM

注意: 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDestroyExternalSemaphore, muSignalExternalSemaphoresAsync, muWaitExternalSemaphoresAsync

muSignalExternalSemaphoresAsync()

MUresult MUSAAPI muSignalExternalSemaphoresAsync (
const MUexternalSemaphore *extSemArray,
const MUSA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS *paramsArray,
unsigned int numExtSems,
MUstream stream)

信号一组外部信号量对象。

在指定的流中对外部分配的信号量对象集合进行信号操作排队。当流中的所有先前操作完成时,将执行这些操作。

信号量的确切语义取决于对象的类型。

如果信号量对象是以下任何一种类型:

  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD
  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32
  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT

那么信号量将被设置为已信号状态。

如果信号量对象是以下任何一种类型:

  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE
  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE
  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD
  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32

那么信号量将被设置为在 MUSA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS::params::fence::value 中指定的值。

如果信号量对象的类型是 MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_MTSCISYNC,此API将 MUSA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS::params::mtSciSync::fence 设置为一个值,后续使用相同NvSciSync对象的等待者可以使用该值来对当前在 stream 中提交的操作进行排序。这样的更新将覆盖 MUSA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS::params::mtSciSync::fence 的先前内容。默认情况下,对外部信号量对象进行信号操作会导致对所有作为 MU_EXTERNAL_MEMORY_HANDLE_TYPE_MTSCIBUF 导入的外部内存对象执行适当的内存同步操作。这确保了由同一组NvSciBuf内存对象的其他导入者进行的任何后续访问是一致的。通过指定标志 MUSA_EXTERNAL_SEMAPHORE_SIGNAL_SKIP_MTSCIBUF_MEMSYNC 可以跳过这些操作,这可以在不需要数据一致性时用作性能优化。但在需要数据一致性的情况下指定此标志会导致未定义行为。此外,对于类型为 MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_MTSCISYNC 的信号量对象,如果用于创建NvSciSyncObj的NvSciSyncAttrList未将 muDeviceGetMtSciSyncAttributes 中的标志设置为 MUSA_MTSCISYNC_ATTR_SIGNAL,此API将返回 MUSA_ERROR_NOT_SUPPORTED

与类型为 MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_MTSCISYNC 的信号量对象关联的NvSciSyncFence可以是确定性的。为此,用于创建信号量对象的NvSciSyncAttrList必须将 NvSciSyncAttrKey_RequireDeterministicFences 键的值设置为true。确定性围栏允许用户甚至在相应的信号入队之前就在信号量对象上入队等待。对于这样的信号量对象,MUSA保证每个信号操作都会将围栏值增加'1'。用户需要跟踪在信号量对象上入队的信号计数,并相应地插入等待。当这样的信号量对象从多个流中发出信号时,由于并发流执行,信号量被发出信号的顺序可能是不确定的。这可能导致信号量的等待者被错误地解除阻塞。用户需要处理这种情况,要么不在启用确定性围栏支持的不同流中使用相同的信号量对象,要么在这些流之间添加显式的依赖关系,以便信号量按顺序发出信号。

如果信号量对象是以下任何一种类型:

  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX
  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT

那么将使用在 MUSA_EXTERNAL_SEMAPHORE_PARAMS::params::keyedmutex::key 中指定的键释放键控互斥体。

参数

extSemArray - 要信号的一组外部信号量
paramsArray - 信号量参数数组
numExtSems - 要信号的信号量数量
stream - 在其中排队信号操作的流

返回值

MUSA_SUCCESS, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_NOT_SUPPORTED

注意: 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muImportExternalSemaphore, muDestroyExternalSemaphore, muWaitExternalSemaphoresAsync

muWaitExternalSemaphoresAsync()

MUresult MUSAAPI muWaitExternalSemaphoresAsync (
const MUexternalSemaphore *extSemArray,
const MUSA_EXTERNAL_SEMAPHORE_WAIT_PARAMS *paramsArray,
unsigned int numExtSems,
MUstream stream)

等待一组外部信号量对象。

在指定的流中对外部分配的信号量对象集合进行等待操作排队。当流中的所有先前操作完成时,将执行这些操作。

等待信号量的确切语义取决于对象的类型。

如果信号量对象是以下任何一种类型:

  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD
  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32
  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT

那么等待信号量将等待信号量达到已信号状态。然后信号量将被重置为未信号状态。因此,对于每个信号操作,只能有一个等待操作。

如果信号量对象是以下任何一种类型:

  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE
  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE
  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD
  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32

那么等待信号量将等待信号量的值大于或等于 MUSA_EXTERNAL_SEMAPHORE_WAIT_PARAMS::params::fence::value

如果信号量对象的类型是 MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_MTSCISYNC,那么等待信号量将等待 MUSA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS::params::mtSciSync::fence 被与此信号量对象关联的NvSciSyncObj的信号者发出信号。默认情况下,等待这样的外部信号量对象会导致对所有作为 MU_EXTERNAL_MEMORY_HANDLE_TYPE_MTSCIBUF 导入的外部内存对象执行适当的内存同步操作。这确保了由同一组NvSciBuf内存对象的其他导入者进行的任何后续访问是一致的。通过指定标志 MUSA_EXTERNAL_SEMAPHORE_WAIT_SKIP_MTSCIBUF_MEMSYNC 可以跳过这些操作,这可以在不需要数据一致性时用作性能优化。但在需要数据一致性的情况下指定此标志会导致未定义行为。此外,对于类型为 MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_MTSCISYNC 的信号量对象,如果用于创建NvSciSyncObj的NvSciSyncAttrList未将 muDeviceGetMtSciSyncAttributes 中的标志设置为 MUSA_MTSCISYNC_ATTR_WAIT,此API将返回 MUSA_ERROR_NOT_SUPPORTED

如果信号量对象是以下任何一种类型:

  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX
  • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT

那么键控互斥体将在其以 MUSA_EXTERNAL_SEMAPHORE_WAIT_PARAMS::params::keyedmutex::key 中指定的键释放时获取,或直到 MUSA_EXTERNAL_SEMAPHORE_WAIT_PARAMS::params::keyedmutex::timeoutMs 中指定的超时时间过去。超时间隔可以是毫秒中指定的有限值或无限值。如果指定无限值,则超时永远不会过去。Windows INFINITE宏必须用于指定无限超时。

参数

extSemArray - 要等待的外部信号量
paramsArray - 信号量参数数组
numExtSems - 要等待的信号量数量
stream - 在其中排队等待操作的流

返回值

MUSA_SUCCESS, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_NOT_SUPPORTED, MUSA_ERROR_TIMEOUT

注意: 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muImportExternalSemaphore, muDestroyExternalSemaphore, muSignalExternalSemaphoresAsync

muDestroyExternalSemaphore()

MUresult MUSAAPI muDestroyExternalSemaphore (
MUexternalSemaphore extSem)

销毁外部信号量。

销毁外部信号量对象并释放对底层资源的任何引用。在销毁信号量之前,所有未完成的信号或等待操作必须已完成。

参数

extSem - 要销毁的外部信号量

返回值

MUSA_SUCCESS, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_HANDLE

注意: 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muImportExternalSemaphore, muSignalExternalSemaphoresAsync, muWaitExternalSemaphoresAsync

流内存操作

本节描述了低级 MUSA 驱动应用程序编程接口的流内存操作。

默认情况下,整个操作集被禁用。用户需要显式启用它们,例如在 Linux 上通过传递内核模块参数如下:modprobe mthreads NVreg_EnableStreamMemOPs=1 目前还没有办法在其他操作系统上启用这些操作。

用户可以通过 muDeviceGetAttribute() 和 MU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_MEM_OPS 来查询设备是否支持这些操作。

对 MU_STREAM_WAIT_VALUE_NOR 标志的支持可以通过 MU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR 来查询。

对 muStreamWriteValue64() 和 muStreamWaitValue64() 函数,以及对 MU_STREAM_MEM_OP_WAIT_VALUE_64 和 MU_STREAM_MEM_OP_WRITE_VALUE_64 标志的支持,可以通过 MU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS 来查询。

对 MU_STREAM_WAIT_VALUE_FLUSH 和 MU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES 的支持需要专用的平台硬件特性,可以通过 muDeviceGetAttribute() 和 MU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES 来查询。

请注意,作为参数传递给这些操作的所有内存指针都是设备指针。如有必要,应获取设备指针,例如使用 muMemHostGetDevicePointer()。

这些操作不接受指向托管内存缓冲区(muMemAllocManaged)的指针。

muStreamWaitValue32()

MUresult MUSAAPI muStreamWaitValue32 (
MUstream stream,
MUdeviceptr addr,
muuint32_t value,
unsigned int flags)

等待内存位置。

在给定的内存位置上对流进行同步。在内存上满足给定条件后,排在操作后的任何工作将被阻塞。默认情况下,条件是等待 (int32_t)(*addr - value) >= 0,一个循环大于或等于。可以通过 flags 指定其他条件类型。

如果内存是通过 muMemHostRegister() 注册的,应使用 muMemHostGetDevicePointer() 获取设备指针。此函数不能与托管内存(muMemAllocManaged)一起使用。

对 MU_STREAM_WAIT_VALUE_NOR 的支持可以通过 muDeviceGetAttribute() 和 MU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR_V2 来查询。

警告: 不当使用此API可能会导致应用程序死锁。通过此API建立的同步顺序对MUSA不可见。由该API(即使是间接地)排序的MUSA任务也应该使用MUSA可见的依赖关系(如事件)来表达该顺序。这确保了调度程序不会以不正确的顺序将它们序列化。

参数

stream - 要同步的流
addr - 要等待的内存位置
value - 与内存位置比较的值
flags - 参见 MUstreamWaitValue_flags

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_SUPPORTED

注意: 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamWaitValue64, muStreamWriteValue32, muStreamWriteValue64, muStreamBatchMemOp, muMemHostRegister,
muStreamWaitEvent

muStreamWaitValue64()

MUresult MUSAAPI muStreamWaitValue64 (
MUstream stream,
MUdeviceptr addr,
muuint64_t value,
unsigned int flags)

等待内存位置。

在给定的内存位置上对流进行同步。在内存上满足给定条件后,排在操作后的任何工作将被阻塞。默认情况下,条件是等待 (int32_t)(∗addr - value)>= 0,一个循环大于或等于。可以通过 flags 指定其他条件类型。

如果内存是通过 muMemHostRegister() 注册的,应使用 muMemHostGetDevicePointer() 获取设备指针。此函数不能与托管内存(muMemAllocManaged)一起使用。

支持此操作可以通过 muDeviceGetAttribute() 和 MU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_MEM_OPS 来查询。

对 MU_STREAM_WAIT_VALUE_NOR 的支持可以通过 muDeviceGetAttribute() 和 MU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR 来查询。

参数

stream 要同步的流
addr 要等待的内存位置
value 与内存位置比较的值
flags 参见 MUstreamWaitValue_flags

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_SUPPORTED

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamWaitValue64, muStreamWriteValue32, muStreamWriteValue64, muStreamBatchMemOp, muMemHostRegister,
muStreamWaitEvent

muStreamWriteValue64()

MUresult MUSAAPI muStreamWriteValue64 (
MUstream stream,
MUdeviceptr addr,
muuint64_t value,
unsigned int flags)

向内存写入值。

向内存写入值。除非传递了 MU_STREAM_WRITE_VALUE_NO_MEMORY_BARRIER 标志,否则写入操作之前会有一个系统范围的内存栅栏,相当于 __threadfence_system(),但范围限定在流而不是 MUSA 线程。

如果内存是通过 muMemHostRegister() 注册的,应使用 muMemHostGetDevicePointer() 获取设备指针。此函数不能与托管内存(muMemAllocManaged)一起使用。

支持此操作可以通过 muDeviceGetAttribute() 和 MU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_MEM_OPS 来查询。

参数

stream 要写入的流
addr 要写入的设备地址
value 要写入的值
flags 参见 MUstreamWriteValue_flags

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_SUPPORTED

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamWriteValue64, muStreamWaitValue32, muStreamWaitValue64, muStreamBatchMemOp, muMemHostRegister,
muEventRecord

执行控制

本节描述了低级 MUSA 驱动应用程序编程接口的执行控制函数。

muFuncGetAttribute()

MUresult MUSAAPI muFuncGetAttribute (
int * pi,
MUfunction_attribute attrib,
MUfunction hfunc)

返回有关函数的信息。

*pi 中返回由 hfunc 给出的内核上的属性 attrib 的整数值。支持的属性包括:

  • MU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK: 每个块的最大线程数,超过这个数字将导致函数启动失败。这个数字取决于函数和当前加载函数的设备。
  • MU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES: 此函数每个块所需的静态分配共享内存大小(字节)。这不包括用户在运行时动态请求的共享内存。
  • MU_FUNC_ATTRIBUTE_CONST_SIZE_BYTES: 此函数所需的用户分配常量内存大小(字节)。
  • MU_FUNC_ATTRIBUTE_LOCAL_SIZE_BYTES: 此函数的每个线程使用的本地内存大小(字节)。
  • MU_FUNC_ATTRIBUTE_NUM_REGS: 此函数的每个线程使用的寄存器数量。
  • MU_FUNC_ATTRIBUTE_PTX_VERSION: 编译此函数的 PTX 虚拟架构版本。这个值是主 PTX 版本 × 10 - 次 PTX 版本,因此 PTX 版本 1.3 的函数将返回值 13。请注意,对于 MUSA 3.0 之前编译的 cubins,这可能返回未定义值 0。
  • MU_FUNC_ATTRIBUTE_BINARY_VERSION: 编译此函数的二进制架构版本。这个值是主二进制版本 × 10 + 次二进制版本,因此二进制版本 1.3 的函数将返回值 13。请注意,这将为没有正确编码的二进制架构版本的旧版 cubins 返回值 10。
  • CU_FUNC_CACHE_MODE_CA: 表示函数是否已使用用户指定选项 ̈-Xptxas --dlcm=ca ̈ 编译的属性。
  • MU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES: 动态分配共享内存的最大大小(字节)。
  • MU_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT: 首选共享内存-L1 缓存分割比例,占总共享内存的百分比。

参数

pi - 返回的属性值
attrib - 请求的属性
hfunc - 查询属性的函数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxGetCacheConfig, muCtxSetCacheConfig, muFuncSetCacheConfig, muLaunchKernel, musaFuncGetAttributes, musaFuncSet←-
Attribute

muFuncSetAttribute()

MUresult MUSAAPI muFuncSetAttribute (
MUfunction hfunc,
MUfunction_attribute attrib,
int value)

设置有关函数的信息。

此调用将由 hfunc 给出的内核上的指定属性 attrib 的值设置为由 value 指定的整数值。如果属性的新值可以成功设置,此函数将返回 MUSA_SUCCESS。如果设置失败,此调用将返回错误。并非所有属性都可以设置值。尝试在只读属性上设置值将导致错误(MUSA_ERROR_INVALID_VALUE)。

muFuncSetAttribute 调用支持的属性包括:

  • MU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES: 动态分配共享内存的最大大小(字节)。该值应包含请求的动态分配共享内存的最大大小。这个值和函数属性 MU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES 的总和不能超过设备属性 MU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN。请求的动态共享内存的最大大小可能因 GPU 架构而异。
  • MU_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT: 在 L1 缓存和共享内存使用相同硬件资源的设备上,这设置了共享内存分割偏好,占总共享内存的百分比。参见 MU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR。这只是个提示,如果需要执行函数,驱动程序可以选择不同的比例。

参数

hfunc - 查询属性的函数
attrib - 请求的属性
value - 要设置的值

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxGetCacheConfig, muCtxSetCacheConfig, muFuncSetCacheConfig, muLaunchKernel, musaFuncGetAttributes, musaFuncSet←-
Attribute

muFuncSetCacheConfig()

MUresult MUSAAPI muFuncSetCacheConfig (
MUfunction hfunc,
MUfunc_cache config)

设置设备函数的首选缓存配置。

在 L1 缓存和共享内存使用相同硬件资源的设备上,此设置通过 config 为设备函数 hfunc 设置首选缓存配置。这只是个偏好。驱动程序将尽可能使用请求的配置,但如果需要执行 hfunc,则可以自由选择不同的配置。任何通过 muCtxSetCacheConfig() 设置的上下文范围偏好将被此每个函数设置覆盖,除非每个函数设置为 MU_FUNC_CACHE_PREFER_NONE。在这种情况下,将使用当前的上下文范围设置。

在设备上,此设置对 L1 缓存和共享内存大小固定的设备上无效。

使用与最近偏好设置不同的偏好启动内核可能会插入设备端同步点。

支持的缓存配置包括:

  • MU_FUNC_CACHE_PREFER_NONE: 对共享内存或 L1 无偏好(默认)
  • MU_FUNC_CACHE_PREFER_SHARED: 偏好更大的共享内存和更小的 L1 缓存
  • MU_FUNC_CACHE_PREFER_L1: 偏好更大的 L1 缓存和更小的共享内存
  • MU_FUNC_CACHE_PREFER_EQUAL: 偏好等大小的 L1 缓存和共享内存

参数

hfunc - 要配置缓存的内核
config - 请求的缓存配置

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_INVALID_CONTEXT

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxGetCacheConfig, muCtxSetCacheConfig, muFuncGetAttribute, muLaunchKernel, musaFuncSetCacheConfig

muFuncSetSharedMemConfig()

MUresult MUSAAPI muFuncSetSharedMemConfig (
MUfunction hfunc,
MUsharedconfig config)

设置设备函数的共享内存配置。

在可配置共享内存银行的设备上,此函数将强制所有后续启动的指定设备函数具有给定的共享内存银行大小配置。在任何给定的函数启动中,如果需要,设备将临时更改共享内存配置以适应函数的首选配置。在后续函数启动之间更改共享内存配置可能会引入设备端同步点。

通过 muFuncSetSharedMemConfig 设置的任何每个函数共享内存银行大小设置将覆盖通过 muCtxSetSharedMemConfig 设置的上下文范围设置。

更改共享内存银行大小不会增加共享内存使用量或影响内核的占用率,但可能会对性能产生重大影响。较大的银行大小将允许更大的潜在带宽到共享内存,但会改变哪些类型的共享内存访问会导致银行冲突。

此函数在共享内存银行大小固定的设备上无效。

支持的银行配置包括:

  • MU_SHARED_MEM_CONFIG_DEFAULT_BANK_SIZE: 在启动此函数时使用上下文的共享内存配置。
  • MU_SHARED_MEM_CONFIG_FOUR_BYTE_BANK_SIZE: 在启动此函数时将共享内存银行宽度设置为本地四字节。
  • MU_SHARED_MEM_CONFIG_EIGHT_BYTE_BANK_SIZE: 在启动此函数时将共享内存银行宽度设置为本地八字节。

参数

hfunc - 要赋予共享内存配置的内核
config - 请求的共享内存配置

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_INVALID_CONTEXT

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxGetCacheConfig, muCtxSetCacheConfig, muCtxGetSharedMemConfig, muCtxSetSharedMemConfig, muFuncGetAttribute,
muLaunchKernel, musaFuncSetSharedMemConfig

5.19.2.5 muFuncGetModule()

MUresult MUSAAPI muFuncGetModule (
MUmodule * hmod,
MUfunction hfunc)

返回模块句柄。

*hmod 中返回函数 hfunc 所在的模块句柄。模块的生命周期对应于它被加载的上下文的生命周期,或者直到模块被显式卸载。

MUSA 运行时管理其自己的模块加载到主上下文中。如果此 API 返回的句柄引用的模块是由 MUSA 运行时加载的,那么在该模块上调用 muModuleUnload() 将导致未定义行为。

参数

hmod - 返回的模块句柄
hfunc - 要检索模块的函数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_FOUND

注意:

此函数也可能返回来自先前异步操作的错误码。

muFuncGetName()

MUresult MUSAAPI muFuncGetName (
const char **name,
MUfunction hfunc)

返回 MUfunction 句柄的函数名。

*name 中返回与函数句柄 hfunc 关联的函数名。函数名作为以空字符结尾的字符串返回。返回的名称仅在函数句柄有效时有效。如果模块被卸载或重新加载,则必须再次调用该 API 以获取更新后的名称。如果函数未声明为具有 C 链接,则此 API 可能返回修饰后的名称。如果 *namehfunc 为 NULL,则返回 MUSA_ERROR_INVALID_VALUE

参数

name - 返回的函数名称
hfunc - 要检索名称的函数句柄

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。

muFuncGetParamInfo()

MUresult MUSAAPI muFuncGetParamInfo (
MUfunction func,
size_t paramIndex,
size_t *paramOffset,
size_t *paramSize)

返回设备端参数布局中内核参数的偏移量和大小。

查询 func 的参数列表中位于 paramIndex 的内核参数,并在 paramOffsetparamSize 中分别返回该参数在设备端参数布局中的偏移量和大小。此信息可用于通过 musaGraphKernelNodeSetParam()musaGraphKernelNodeUpdatesApply() 从设备端更新内核节点参数。paramIndex 必须小于 func 接受的参数数量。如果只需要参数偏移量,则 paramSize 可以设置为 NULL。

参数

func - 要查询的函数
paramIndex - 要查询的参数索引
paramOffset - 返回参数在设备端参数布局中的偏移量
paramSize - 可选地返回参数在设备端参数布局中的大小

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意: 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muKernelGetParamInfo

muFuncIsLoaded()

MUresult MUSAAPI muFuncIsLoaded (
MUfunctionLoadingState *state,
MUfunction function)

返回函数是否已加载。

state 中返回 function 的加载状态。

参数

state - 返回的加载状态
function - 要检查的函数

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_INVALID_VALUE

另请参阅

muFuncLoad, muModuleEnumerateFunctions

muFuncLoad()

MUresult MUSAAPI muFuncLoad (
MUfunction function)

加载函数。

完成 function 的函数加载。使用已完全加载的函数调用此 API 没有效果。

参数

function - 要加载的函数

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_INVALID_VALUE

另请参阅

muModuleEnumerateFunctions, muFuncIsLoaded

muLaunchKernel()

MUresult MUSAAPI muLaunchKernel (
MUfunction f,
unsigned int gridDimX,
unsigned int gridDimY,
unsigned int gridDimZ,
unsigned int blockDimX,
unsigned int blockDimY,
unsigned int blockDimZ,
unsigned int sharedMemBytes,
MUstream hStream,
void ** kernelParams,
void ** extra)

启动 MUSA 函数。

在 gridDimX × gridDimY × gridDimZ 网格的块上调用内核 f。每个块包含 blockDimX × blockDimY × blockDimZ 线程。

sharedMemBytes 设置每个线程块可用的动态共享内存量。

内核参数 f 可以通过以下两种方式之一指定:

  1. 可以通过 kernelParams 指定内核参数。如果 f 有 N 个参数,那么 kernelParams 需要是一个 N 个指针的数组。每个 kernelParams[0] 到 kernelParams[N-1] 必须指向一个区域,从该区域复制实际的内核参数。不需要指定内核参数的数量及其偏移量和大小,因为这些信息直接从内核的映像中检索。

  2. 内核参数也可以由应用程序打包到一个单一的缓冲区中,并通过 extra 参数传递。这将应用程序的责任放在了解每个内核参数的大小和缓冲区内的对齐/填充上。以下是使用 extra 参数的示例:

size_t argBufferSize;
char argBuffer[256];

// 填充 argBuffer 和 argBufferSize

void* config[] = {
MU_LAUNCH_PARAM_BUFFER_POINTER, argBuffer,
MU_LAUNCH_PARAM_BUFFER_SIZE, &argBufferSize,
MU_LAUNCH_PARAM_END
};
status = muLaunchKernel(f, gx, gy, gz, bx, by, bz, sh, s, NULL, config);

extra 参数存在于允许 muLaunchKernel 接受其他较少使用的参数。extra 指定额外设置的名称列表及其相应的值。每个额外设置名称后面紧跟相应的值。列表必须以 NULL 或 MU_LAUNCH_PARAM_END 结尾。

  • MU_LAUNCH_PARAM_END,表示 extra 数组的结束;
  • MU_LAUNCH_PARAM_BUFFER_POINTER,指定 extra 中的下一个值将是一个指向包含所有内核参数的缓冲区的指针,用于启动内核 f;
  • MU_LAUNCH_PARAM_BUFFER_SIZE,指定 extra 中的下一个值将是一个指向 size_t 的指针,包含与 MU_LAUNCH_PARAM_BUFFER_POINTER 指定的缓冲区的大小;

如果内核参数同时使用 kernelParamsextra 指定(即 kernelParamsextra 都不为 NULL),将返回错误 MUSA_ERROR_INVALID_VALUE。

调用 muLaunchKernel() 将使通过以下弃用的 API 设置的持久函数状态失效:muFuncSetBlockShape(),←- muFuncSetSharedSize(), muParamSetSize(), muParamSeti(), muParamSetf(), muParamSetv()。

请注意,要使用 muLaunchKernel(),内核 f 必须要么使用工具链版本 3.2 或更高版本编译,以便它包含内核参数信息,要么没有内核参数。如果这两个条件都不满足,那么 muLaunchKernel() 将返回 MUSA_ERROR_INVALID_IMAGE。

参数

f - 要启动的内核
gridDimX - 网格的宽度(块)
gridDimY - 网格的高度(块)
gridDimZ - 网格的深度(块)
blockDimX - 每个线程块的 X 维度
blockDimY - 每个线程块的 Y 维度
blockDimZ - 每个线程块的 Z 维度
sharedMemBytes - 每个线程块的动态共享内存大小(字节)
hStream - 流标识符
kernelParams - 指向内核参数的指针数组
extra - 额外选项

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_INVALID_IMAGE, MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_LAUNCH_FAILED, MUSA_ERROR_LAUNCH_OUT_OF_RESOURCES, MUSA_ERROR_LAUNCH_TIMEOUT,
MUSA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING, MUSA_ERROR_SHARED_OBJECT_INIT_FAILED

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

另请参阅

muCtxGetCacheConfig, muCtxSetCacheConfig, muFuncSetCacheConfig, muFuncGetAttribute, musaLaunchKernel

muLaunchKernelEx()

MUresult MUSAAPI muLaunchKernelEx (
const MUlaunchConfig * config,
MUfunction f,
void ** kernelParams,
void ** extra)

使用启动时配置启动 MUSA 函数 MUfunction 或 MUSA 内核 MUkernel。

使用指定的启动时配置 config 调用函数 MUfunction 或内核 MUkernel f。

MUlaunchConfig 结构定义如下:

typedef struct MUlaunchConfig_st {
unsigned int gridDimX;
unsigned int gridDimY;
unsigned int gridDimZ;
unsigned int blockDimX;
unsigned int blockDimY;
unsigned int blockDimZ;
unsigned int sharedMemBytes;
MUstream hStream;
MUlaunchAttribute * attrs;
unsigned int numAttrs;
} MUlaunchConfig;

其中:

  • MUlaunchConfiggridDimX 是网格的宽度(块)。

  • MUlaunchConfiggridDimY 是网格的高度(块)。

  • MUlaunchConfiggridDimZ 是网格的深度(块)。

  • MUlaunchConfigblockDimX 是每个线程块的 X 维度。

  • MUlaunchConfigblockDimX 是每个线程块的 Y 维度。

  • MUlaunchConfigblockDimZ 是每个线程块的 Z 维度。

  • MUlaunchConfigsharedMemBytes 是每个线程块的动态共享内存大小(字节)。

  • MUlaunchConfighStream 是要执行启动的流的句柄。与此流关联的 MUSA 上下文必须与函数 f 相关联。

  • MUlaunchConfigattrs 是 MUlaunchConfignumAttrs 个连续的 MUlaunchAttribute 元素的数组。如果 MUlaunchConfignumAttrs 为零,则不考虑此指针的值。然而,在这种情况下,建议将指针设置为 NULL。

  • MUlaunchConfignumAttrs 是填充 MUlaunchConfigattrs 数组前 MUlaunchConfignumAttrs 位置的属性数量。

通过向 MUlaunchConfigattrs 添加条目来指定启动时配置。每个条目是一个属性 ID 和相应的属性值。

MUlaunchAttribute 结构定义如下:

typedef struct MUlaunchAttribute_st {
MUlaunchAttributeID id;
MUlaunchAttributeValue value;
} MUlaunchAttribute;

其中:

  • MUlaunchAttributeid 是唯一枚举,标识属性。
  • MUlaunchAttributevalue 是一个联合,保存属性值。

使用 config 参数的示例:

MUlaunchAttribute coopAttr = {.id = MU_LAUNCH_ATTRIBUTE_COOPERATIVE,
.value = 1};
MUlaunchConfig config = {... // 设置块和网格维度
.attrs = &coopAttr,
.numAttrs = 1};

muLaunchKernelEx(&config, kernel, NULL, NULL);

MUlaunchAttributeID 枚举定义如下:

typedef enum MUlaunchAttributeID_enum {
MU_LAUNCH_ATTRIBUTE_IGNORE = 0,
MU_LAUNCH_ATTRIBUTE_ACCESS_POLICY_WINDOW = 1,
MU_LAUNCH_ATTRIBUTE_COOPERATIVE = 2,
MU_LAUNCH_ATTRIBUTE_SYNCHRONIZATION_POLICY = 3,
MU_LAUNCH_ATTRIBUTE_CLUSTER_DIMENSION = 4,
MU_LAUNCH_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE = 5,
MU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_STREAM_SERIALIZATION = 6,
MU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_EVENT = 7,
} MUlaunchAttributeID;

以及相应的 MUlaunchAttributeValue 联合:

typedef union MUlaunchAttributeValue_union {
muuint64_t pad[8];
MUaccessPolicyWindow accessPolicyWindow;
int cooperative;
MUsynchronizationPolicy syncPolicy;
struct {
unsigned int x;
unsigned int y;
unsigned int z;
} clusterDim;
MUclusterSchedulingPolicy clusterSchedulingPolicyPreference;
int programmaticStreamSerializationAllowed;
struct {
MUevent event;
int flags;
int triggerAtBlockStart;
} programmaticEvent;
} MUlaunchAttributeValue;

将 MU_LAUNCH_ATTRIBUTE_COOPERATIVE 设置为非零值会导致内核启动成为合作启动,使用与 muLaunchCooperativeKernel 相同的使用和语义。

将 MU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_STREAM_SERIALIZATION 设置为非零值会导致内核使用程序化手段解决其流依赖性 - 使 MUSA 运行时有机会允许网格的执行与流中的前一个内核重叠,如果该内核请求重叠。

MU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_EVENT 记录了一个事件以及内核启动。通过此启动属性记录的事件保证只在所有块在关联的内核触发事件后才触发。一个块可以通过 PTX launchdep.release 或 MUSA 内置函数 musaTriggerProgrammaticLaunchCompletion() 触发事件。如果将 triggerAtBlockStart 设置为非 0,则还可以在每个块的执行开始时插入触发。请注意,依赖项(包括调用 muEventSynchronize() 的 CPU 线程)不能保证在释放时精确观察到释放。例如,muEventSynchronize() 可能在关联的内核完成后很长时间才观察到事件触发。这种记录类型主要用于建立设备任务之间的程序化依赖性。提供的事件不能是进程间或互操作事件。事件必须禁用计时(即,创建时设置了 MU_EVENT_DISABLE_TIMING 标志)。

其他属性的效果与通过持久 API 设置时的效果一致。

参见 muStreamSetAttribute 了解

• MU_LAUNCH_ATTRIBUTE_ACCESS_POLICY_WINDOW
• MU_LAUNCH_ATTRIBUTE_SYNCHRONIZATION_POLICY

参见 muFunctionSetAttribute 了解

• MU_LAUNCH_ATTRIBUTE_CLUSTER_DIMENSION
• MU_LAUNCH_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE

内核参数 f 可以以使用 muLaunchKernel 的相同方式指定。

请注意,该 API 还可以用来启动无上下文内核 MUkernel,通过使用 muLibraryGetKernel() 查询句柄,然后将其转换为 MUfunction 传递给 API。在这里,启动内核的上下文将从指定的流 MUlaunchConfighStream 获得,或者在 NULL 流的情况下从当前上下文获得。

参数

config - 启动配置
f - 要启动的函数 MUfunction 或内核 MUkernel
kernelParams - 指向内核参数的指针数组
extra - 额外选项

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_INVALID_IMAGE, MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_LAUNCH_FAILED, MUSA_ERROR_LAUNCH_OUT_OF_RESOURCES, MUSA_ERROR_LAUNCH_TIMEOUT,
MUSA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING, MUSA_ERROR_COOPERATIVE_LAUNCH_TOO_LARGE,
MUSA_ERROR_SHARED_OBJECT_INIT_FAILED, MUSA_ERROR_NOT_FOUND

注意:

此函数也可能返回来自先前异步操作的错误码。

支持使用空流。

另请参阅

muCtxGetCacheConfig, muCtxSetCacheConfig, muFuncSetCacheConfig, muFuncGetAttribute, musaLaunchKernel, musaLaunch←-
KernelEx, muLibraryGetKernel, muKernelSetCacheConfig, muKernelGetAttribute, muKernelSetAttribute

muLaunchHostFunc()

MUresult MUSAAPI muLaunchHostFunc (
MUstream hStream,
MUhostFn fn,
void* userData)

启动 MUSA 函数,其中线程块可以在执行过程中合作和同步。

在 gridDimX × gridDimY × gridDimZ 网格的块上调用内核 f。每个块包含 blockDimX × blockDimY × blockDimZ 线程。

sharedMemBytes 设置每个线程块可用的动态共享内存量。

调用此内核的设备必须对设备属性 MU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH 有非零值。

启动的块总数不能超过 muOccupancyMaxActiveBlocksPerMultiprocessor(或 muOccupancyMaxActiveBlocksPerMultiprocessorWithFlags)返回的每个多处理器的最大块数乘以设备属性 MU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT 指定的多处理器数量。

内核不能使用 MUSA 动态并行性。

内核参数必须通过 kernelParams 指定。如果 f 有 N 个参数,那么 kernelParams 需要是一个 N 个指针的数组。每个 kernelParams[0] 到 kernelParams[N-1] 必须指向一个区域,从该区域复制实际的内核参数。不需要指定内核参数的数量及其偏移量和大小,因为这些信息直接从内核的映像中检索。

调用 muLaunchCooperativeKernel() 将设置与通过 muLaunchKernel API 设置的持久函数状态相同的持久函数状态。

当通过 muLaunchCooperativeKernel() 启动内核 f 时,与 f 相关的先前的块形状、共享大小和参数信息将被覆盖。

请注意,要使用 muLaunchCooperativeKernel(),内核 f 必须要么使用工具链版本 3.2 或更高版本编译,以便它包含内核参数信息,要么没有内核参数。如果这两个条件都不满足,那么 muLaunchCooperativeKernel() 将返回 MUSA_ERROR_INVALID_IMAGE。

参数

f - 要启动的内核
gridDimX - 网格的宽度(块)
gridDimY - 网格的高度(块)
gridDimZ - 网格的深度(块)
blockDimX - 每个线程块的 X 维度
blockDimY - 每个线程块的 Y 维度
blockDimZ - 每个线程块的 Z 维度
sharedMemBytes - 每个线程块的动态共享内存大小(字节)
hStream - 流标识符
kernelParams - 指向内核参数的指针数组

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_INVALID_IMAGE, MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_LAUNCH_FAILED, MUSA_ERROR_LAUNCH_OUT_OF_RESOURCES, MUSA_ERROR_LAUNCH_TIMEOUT,
MUSA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING, MUSA_ERROR_COOPERATIVE_LAUNCH_TOO_LARGE,
MUSA_ERROR_SHARED_OBJECT_INIT_FAILED

注意:

此函数也可能返回来自先前异步操作的错误码。 支持使用空流。

另请参阅

muCtxGetCacheConfig, muCtxSetCacheConfig, muFuncSetCacheConfig, muFuncGetAttribute, muLaunchCooperativeKernelMulti←-
Device, musaLaunchCooperativeKernel

在多个设备上启动 MUSA 函数,其中线程块可以在执行过程中合作和同步

弃用 从 MUSA 11.3 开始,此函数已被弃用。

在 launchParamsList 数组中指定的内核将被调用,数组的每个元素都指定了执行单个内核启动所需的所有参数。这些内核可以在执行过程中合作和同步。数组的大小由 numDevices 指定。

不能在同一设备上启动两个内核。所有目标设备必须相同。所有设备必须对设备属性 MU_DEVICE_ATTRIBUTE_COOPERATIVE_MULTI_DEVICE_LAUNCH 有非零值。

启动的所有内核在编译代码方面必须相同。请注意,模块中存在的任何 设备常量托管 变量在每个设备上独立实例化。应用程序有责任确保这些变量被适当初始化和使用。

以块指定的网格大小、块本身的大小以及每个线程块使用的共享内存量也必须在所有启动的内核中匹配。

用于启动这些内核的流必须通过 muStreamCreate 或 muStreamCreateWithPriority 创建。不能使用 NULL 流或 MU_STREAM_LEGACY 或 MU_STREAM_PER_THREAD。

每个内核启动的块总数不能超过 muOccupancyMaxActiveBlocksPerMultiprocessor(或 muOccupancyMaxActiveBlocksPerMultiprocessorWithFlags)返回的每个多处理器的最大块数乘以设备属性 MU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT 指定的多处理器数量。由于每个设备的块总数必须在所有设备中匹配,因此可以启动的块的最大数量将受到多处理器数量最少的设备的限制。

内核不能使用 MUSA 动态并行性。

MUSA_LAUNCH_PARAMS 结构定义如下:

typedef struct MUSA_LAUNCH_PARAMS_st
{
MUfunction function;
unsigned int gridDimX;
unsigned int gridDimY;
unsigned int gridDimZ;
unsigned int blockDimX;
unsigned int blockDimY;
unsigned int blockDimZ;
unsigned int sharedMemBytes;
MUstream hStream;
void** kernelParams;
} MUSA_LAUNCH_PARAMS;

其中:

  • MUSA_LAUNCH_PARAMSfunction 指定要启动的内核。所有函数在编译代码方面必须相同。
  • MUSA_LAUNCH_PARAMSgridDimX 是网格的宽度(块)。这必须在所有启动的内核中匹配。
  • MUSA_LAUNCH_PARAMSgridDimY 是网格的高度(块)。这必须在所有启动的内核中匹配。
  • MUSA_LAUNCH_PARAMSgridDimZ 是网格的深度(块)。这必须在所有启动的内核中匹配。
  • MUSA_LAUNCH_PARAMSblockDimX 是每个线程块的 X 维度。这必须在所有启动的内核中匹配。
  • MUSA_LAUNCH_PARAMSblockDimX 是每个线程块的 Y 维度。这必须在所有启动的内核中匹配。
  • MUSA_LAUNCH_PARAMSblockDimZ 是每个线程块的 Z 维度。这必须在所有启动的内核中匹配。
  • MUSA_LAUNCH_PARAMSsharedMemBytes 是每个线程块的动态共享内存大小(字节)。这必须在所有启动的内核中匹配。
  • MUSA_LAUNCH_PARAMShStream 是要执行启动的流的句柄。不能是 NULL 流或 MU_STREAM_LEGACY 或 MU_STREAM_PER_THREAD。与此流关联的 MUSA 上下文必须与 MUSA_LAUNCH_PARAMSfunction 相关联。
  • MUSA_LAUNCH_PARAMSkernelParams 是指向内核参数的指针数组。如果 MUSA_LAUNCH_PARAMSfunction 有 N 个参数,那么 MUSA_LAUNCH_PARAMSkernelParams 需要是一个 N 个指针的数组。每个 MUSA_LAUNCH_PARAMSkernelParams[0] 到 MUSA_LAUNCH_PARAMSkernelParams[N-1] 必须指向一个区域,从该区域复制实际的内核参数。不需要指定内核参数的数量及其偏移量和大小,因为这些信息直接从内核的映像中检索。

默认情况下,内核不会在任何 GPU 上开始执行,直到所有指定流中的先前工作完成。通过指定标志 MUSA_COOPERATIVE_LAUNCH_MULTI_DEVICE_NO_PRE_LAUNCH_SYNC 可以覆盖此行为。当指定此标志时,每个内核只会等待相应 GPU 的流中的先前工作完成后才开始执行。

同样,默认情况下,任何后续工作被推送到任何指定流中都不会开始执行,直到所有 GPU 上的内核完成。通过指定标志 MUSA_COOPERATIVE_LAUNCH_MULTI_DEVICE_NO_POST_LAUNCH_SYNC 可以覆盖此行为。当指定此标志时,任何后续工作被推送到任何指定流中只会等待相应 GPU 上的内核完成后才开始执行。

调用 muLaunchCooperativeKernelMultiDevice() 将设置与通过 muLaunchKernel API 单独调用每个 launchParamsList 中的元素时设置的持久函数状态相同的持久函数状态。

当通过 muLaunchCooperativeKernelMultiDevice() 启动内核时,与每个 MUSA_LAUNCH_PARAMSfunction 在 launchParamsList 中相关的先前的块形状、共享大小和参数信息将被覆盖。

请注意,要使用 muLaunchCooperativeKernelMultiDevice(),内核必须要么使用工具链版本 3.2 或更高版本编译,以便它包含内核参数信息,要么没有内核参数。如果这两个条件都不满足,那么 muLaunch←-CooperativeKernelMultiDevice() 将返回 MUSA_ERROR_INVALID_IMAGE。

参数

launchParamsList - 每个设备的启动参数列表
numDevices - launchParamsList 数组的大小
flags - 控制启动行为的标志

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_INVALID_IMAGE, MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_LAUNCH_FAILED, MUSA_ERROR_LAUNCH_OUT_OF_RESOURCES, MUSA_ERROR_LAUNCH_TIMEOUT,
MUSA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING, MUSA_ERROR_COOPERATIVE_LAUNCH_TOO_LARGE,
MUSA_ERROR_SHARED_OBJECT_INIT_FAILED

注意:

此函数也可能返回来自先前异步操作的错误码。 支持使用空流。 另请参阅

muCtxGetCacheConfig, muCtxSetCacheConfig, muFuncSetCacheConfig, muFuncGetAttribute, muLaunchCooperativeKernel, musaLaunchCooperativeKernelMultiDevice

在流中排队主机函数调用

在流中排队主机函数以运行。该函数将在当前排队的工作完成后被调用,并将阻塞其后添加的工作。

主机函数不能进行任何 MUSA API 调用。尝试使用 MUSA API 可能导致 MUSA_ERROR_NOT_PERMITTED,但这不是必需的。主机函数不能执行任何可能依赖于未强制先于执行的 MUSA 工作的同步。没有强制顺序的主机函数(例如,在独立流中)以未定义的顺序执行,并且可能被序列化。

就统一内存而言,执行提供了以下保证:

  • 流在函数执行期间被认为是空闲的。因此,例如,该函数始终可以使用附加到其被排队的流的内存。
  • 函数执行的开始具有与在函数之前立即记录的事件同步相同的效果。因此,它同步了之前 “加入” 函数的流。
  • 向任何流添加设备工作不会使流变为活动状态,直到所有前面的主机函数和流回调执行完毕。因此,例如,一个函数可能即使在另一个流中添加了工作,也可以使用全局附加内存,如果工作被事件排在函数调用之后。
  • 函数的完成不会使流变为活动状态,除非如上所述。如果没有设备工作跟随函数,流将保持空闲状态,并在连续的主机函数或流回调之间保持空闲状态,而它们之间没有设备工作。因此,例如,可以通过在流的末尾的主机函数发出信号来完成流同步。

请注意,与 muStreamAddCallback 相比,如果 MUSA 上下文中出现错误,函数将不会被调用。

参数

hStream - 要在其中排队函数调用的流
fn - 一旦前面的流操作完成,要调用的函数
userData - 要传递给函数的用户指定数据

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_NOT_SUPPORTED

注意:

此函数也可能返回来自先前异步操作的错误码。 支持使用空流。

另请参阅

muStreamCreate, muStreamQuery, muStreamSynchronize, muStreamWaitEvent, muStreamDestroy, muMemAllocManaged,
muStreamAttachMemAsync, muStreamAddCallback

图形管理

本节描述了低级 MUSA 驱动应用程序编程接口的图形管理功能。

muGraphCreate()

MUresult MUSAAPI muGraphCreate (
MUgraph *phGraph,
unsigned int flags)

创建一个图形。

创建一个空的图形,通过 phGraph 返回。

参数

phGraph - 返回新创建的图形
flags - 图形创建标志,必须为 0

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_OUT_OF_MEMORY

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddChildGraphNode, muGraphAddEmptyNode, muGraphAddKernelNode, muGraphAddHostNode, muGraphAddMemcpyNode,
muGraphAddMemsetNode, muGraphInstantiate, muGraphDestroy, muGraphGetNodes, muGraphGetRootNodes, muGraphGetEdges,
muGraphClone

muGraphAddKernelNode()

MUresult MUSAAPI muGraphAddKernelNode (
MUgraphNode *phGraphNode,
MUgraph hGraph,
const MUgraphNode *dependencies,
size_t numDependencies,
const MUSA_KERNEL_NODE_PARAMS *nodeParams)

创建一个内核执行节点并将其添加到图形中。

创建一个新的内核执行节点,并将其添加到 hGraph 中,通过 dependencies 指定的 numDependencies 依赖项和在 nodeParams 中指定的参数。 numDependencies 可以为 0,在这种情况下,节点将被放置在图形的根目录下。dependencies 不能有任何重复条目。新节点的句柄将在 phGraphNode 中返回。

MUSA_KERNEL_NODE_PARAMS 结构体定义如下:

typedef struct MUSA_KERNEL_NODE_PARAMS_st {
MUfunction func;
unsigned int gridDimX;
unsigned int gridDimY;
unsigned int gridDimZ;
unsigned int blockDimX;
unsigned int blockDimY;
unsigned int blockDimZ;
unsigned int sharedMemBytes;
void ** kernelParams;
void ** extra;
} MUSA_KERNEL_NODE_PARAMS;

当图形被启动时,节点将在 (gridDimXxgridDimYxgridDimZ) 网格的块上调用 kernelfunc。每个块包含 (blockDimXxblockDimYxblockDimZ) 线程。

sharedMemBytes 设置每个线程块可用的动态共享内存量。

内核参数 func 可以通过以下两种方式之一指定:

  1. 可以通过 kernelParams 指定内核参数。如果内核有 N 个参数,那么 kernelParams 需要是一个 N 个指针的数组。每个指针,从 kernelParams[0] 到 kernelParams[N-1],指向将被复制的实际参数所在的内存区域。不需要指定内核参数的数量及其偏移量和大小,因为这些信息可以直接从内核的图像中检索。

  2. 非合作内核的内核参数也可以由应用程序打包到一个单一的缓冲区中,通过 extra 传递。这将责任放在应用程序上,需要知道每个内核参数的大小和在缓冲区内的对齐/填充。extra 参数存在于允许此函数接受额外较少使用的参数。extra 指定额外设置的名称列表及其相应的值。每个额外设置的名称紧跟着相应的值。列表必须以 NULL 或 MU_LAUNCH_PARAM_END 结尾。

  • MU_LAUNCH_PARAM_END,表示 extra 数组的结束;
  • MU_LAUNCH_PARAM_BUFFER_POINTER,指定 extra 中的下一个值将是一个指向包含所有内核参数的缓冲区的指针,用于启动 kernelfunc;
  • MU_LAUNCH_PARAM_BUFFER_SIZE,指定 extra 中的下一个值将是一个指向 size_t 的指针,包含与 MU_LAUNCH_PARAM_BUFFER_POINTER 指定的缓冲区的大小;

如果同时使用 kernelParamsextra 指定内核参数(即 kernelParamsextra 都不为 NULL),将返回错误 MUSA_ERROR_INVALID_VALUE。如果 extra 用于合作内核,将返回 MUSA_ERROR_INVALID_VALUE。

kernelParamsextra 数组以及它指向的参数值在此调用期间被复制。

注意

使用图形启动的内核不能使用纹理和表面引用。通过任何纹理或表面引用进行读取或写入是未定义行为。此限制不适用于纹理和表面对象。

参数

phGraphNode - 返回新创建的节点
hGraph - 要添加节点的图形
dependencies - 节点的依赖项
numDependencies - 依赖项数量
nodeParams - GPU 执行节点的参数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muLaunchKernel, muLaunchCooperativeKernel, muGraphKernelNodeGetParams, muGraphKernelNodeSetParams, muGraphCreate,
muGraphDestroyNode, muGraphAddChildGraphNode, muGraphAddEmptyNode, muGraphAddHostNode, muGraphAddMemcpyNode,
muGraphAddMemsetNode

muGraphKernelNodeGetParams()

MUresult MUSAAPI muGraphKernelNodeGetParams (
MUgraphNode hNode,
MUSA_KERNEL_NODE_PARAMS *nodeParams)

返回内核节点的参数。

nodeParams 中返回内核节点 hNode 的参数。返回的 kernelParamsextra 数组以及它指向的参数值属于节点。此内存在节点被销毁或其参数被修改之前保持有效,不应直接修改。使用 muGraphKernelNodeSetParams 更新此节点的参数。

参数将包含 kernelParamsextra,根据最近在节点上设置的项。

参数

hNode - 要获取参数的节点
nodeParams - 返回参数的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muLaunchKernel, muGraphAddKernelNode, muGraphKernelNodeSetParams

muGraphKernelNodeSetParams()

MUresult MUSAAPI muGraphKernelNodeSetParams (
MUgraphNode hNode,
const MUSA_KERNEL_NODE_PARAMS *nodeParams)

设置内核节点的参数。

将内核节点 hNode 的参数设置为 nodeParams

参数

hNode - 要设置参数的节点
nodeParams - 要复制的参数

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_OUT_OF_MEMORY

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muLaunchKernel, muGraphAddKernelNode, muGraphKernelNodeGetParams

muGraphAddMemcpyNode()

MUresult MUSAAPI muGraphAddMemcpyNode (
MUgraphNode*phGraphNode,
MUgraph hGraph,
const MUgraphNode*dependencies,
size_t numDependencies,
const MUSA_MEMCPY3D*copyParams,
MUcontext ctx)

创建一个 memcpy 节点并将其添加到图形中。

创建一个新的 memcpy 节点,并将其添加到 hGraph 中,通过 dependencies 指定的 numDependencies 依赖项。可以 numDependencies 为 0,在这种情况下,节点将被放置在图形的根目录下。dependencies 不能有任何重复条目。新节点的句柄将在 phGraphNode 中返回。

当图形被启动时,节点将执行由 copyParams 描述的 memcpy。有关结构及其限制的描述,请参见 muMemcpy3D()。

Memcpy 节点对托管内存有一些额外的限制,如果系统中至少有一个设备的设备属性 MU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS 的值为零。如果一个或多个操作数引用托管内存,则不允许使用内存类型 MU_MEMORYTYPE_UNIFIED 对于这些操作数。托管内存将被视为位于主机或设备上,具体取决于指定的内存类型。

参数

phGraphNode - 返回新创建的节点
hGraph - 要添加节点的图形
dependencies - 节点的依赖项
numDependencies - 依赖项数量
copyParams - 内存复制的参数
ctx - 运行节点的上下文

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMemcpy3D, muGraphMemcpyNodeGetParams, muGraphMemcpyNodeSetParams, muGraphCreate, muGraphDestroyNode,
muGraphAddChildGraphNode, muGraphAddEmptyNode, muGraphAddKernelNode, muGraphAddHostNode, muGraphAddMemsetNode

muGraphMemcpyNodeGetParams()

MUresult MUSAAPI muGraphMemcpyNodeGetParams (
MUgraphNode hNode,
MUSA_MEMCPY3D * nodeParams)

返回 memcpy 节点的参数。

nodeParams 中返回 memcpy 节点 hNode 的参数。

参数

hNode - 要获取参数的节点
nodeParams - 返回参数的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMemcpy3D, muGraphAddMemcpyNode, muGraphMemcpyNodeSetParams

muGraphMemcpyNodeSetParams()

MUresult MUSAAPI muGraphMemcpyNodeSetParams (
MUgraphNode hNode,
const MUSA_MEMCPY3D * nodeParams)

设置 memcpy 节点的参数。

将 memcpy 节点 hNode 的参数设置为 nodeParams

参数

hNode - 要设置参数的节点
nodeParams - 要复制的参数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMemcpy3D, muGraphAddMemcpyNode, muGraphMemcpyNodeGetParams

muGraphAddMemsetNode()

MUresult MUSAAPI muGraphAddMemsetNode (
MUgraphNode*phGraphNode,
MUgraph hGraph,
const MUgraphNode ∗ dependencies,
size_t numDependencies,
const MUSA_MEMSET_NODE_PARAMS ∗ memsetParams,
MUcontext ctx)

创建一个 memset 节点并将其添加到图形中。

创建一个新的 memset 节点,并将其添加到 hGraph 中,通过 dependencies 指定的 numDependencies 依赖项。可以 numDependencies 为 0,在这种情况下,节点将被放置在图形的根目录下。dependencies 不能有任何重复条目。新节点的句柄将在 phGraphNode 中返回。

元素大小必须为 1、2 或 4 字节。当图形被启动时,节点将执行由 memsetParams 描述的 memset。

参数

phGraphNode - 返回新创建的节点
hGraph - 要添加节点的图形
dependencies - 节点的依赖项
numDependencies - 依赖项数量
memsetParams - 内存设置的参数
ctx - 运行节点的上下文

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_INVALID_CONTEXT

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMemsetD2D32, muGraphMemsetNodeGetParams, muGraphMemsetNodeSetParams, muGraphCreate, muGraphDestroyNode,
muGraphAddChildGraphNode, muGraphAddEmptyNode, muGraphAddKernelNode, muGraphAddHostNode, muGraphAddMemcpyNode

muGraphMemsetNodeGetParams()

MUresult MUSAAPI muGraphMemsetNodeGetParams (
MUgraphNode hNode,
MUSA_MEMSET_NODE_PARAMS ∗ nodeParams)

返回 memset 节点的参数。

nodeParams 中返回 memset 节点 hNode 的参数。

参数

hNode - 要获取参数的节点
nodeParams - 返回参数的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMemsetD2D32, muGraphAddMemsetNode, muGraphMemsetNodeSetParams

muGraphMemsetNodeSetParams()

MUresult MUSAAPI muGraphMemsetNodeSetParams (
MUgraphNode hNode,
const MUSA_MEMSET_NODE_PARAMS ∗ nodeParams)

设置 memset 节点的参数。

将 memset 节点 hNode 的参数设置为 nodeParams

参数

hNode - 要设置参数的节点
nodeParams - 要复制的参数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMemsetD2D32, muGraphAddMemsetNode, muGraphMemsetNodeGetParams

muGraphAddHostNode()

MUresult MUSAAPI muGraphAddHostNode (
MUgraphNode ∗ phGraphNode,
MUgraph hGraph,
const MUgraphNode ∗ dependencies,
size_t numDependencies,
const MUSA_HOST_NODE_PARAMS∗nodeParams)

创建一个主机执行节点并将其添加到图形中。

创建一个新的 CPU 执行节点,并将其添加到 hGraph 中,通过 dependencies 指定的 numDependencies 依赖项和在 nodeParams 中指定的参数。可以 numDependencies 为 0,在这种情况下,节点将被放置在图形的根目录下。dependencies 不能有任何重复条目。新节点的句柄将在 phGraphNode 中返回。

当图形被启动时,节点将调用指定的 CPU 函数。在预 Volta GPU 下的 MPS 中不支持主机节点。

参数

phGraphNode - 返回新创建的节点
hGraph - 要添加节点的图形
dependencies - 节点的依赖项
numDependencies - 依赖项数量
nodeParams - 主机节点的参数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_NOT_SUPPORTED,
MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muLaunchHostFunc, muGraphHostNodeGetParams, muGraphHostNodeSetParams, muGraphCreate, muGraphDestroyNode,
muGraphAddChildGraphNode, muGraphAddEmptyNode, muGraphAddKernelNode, muGraphAddMemcpyNode,
muGraphAddMemsetNode

muGraphHostNodeGetParams()

MUresult MUSAAPI muGraphHostNodeGetParams (
MUgraphNode hNode,
MUSA_HOST_NODE_PARAMS ∗ nodeParams)

返回主机节点的参数。

nodeParams 中返回主机节点 hNode 的参数。

参数

hNode - 要获取参数的节点
nodeParams - 返回参数的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muLaunchHostFunc, muGraphAddHostNode, muGraphHostNodeSetParams

muGraphHostNodeSetParams()

MUresult MUSAAPI muGraphHostNodeSetParams (
MUgraphNode hNode,
const MUSA_HOST_NODE_PARAMS ∗ nodeParams)

设置主机节点的参数。

将主机节点 hNode 的参数设置为 nodeParams

参数

hNode - 要设置参数的节点
nodeParams - 要复制的参数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muLaunchHostFunc, muGraphAddHostNode, muGraphHostNodeGetParams

muGraphAddChildGraphNode()

MUresult MUSAAPI muGraphAddChildGraphNode (
MUgraphNode ∗ phGraphNode,
MUgraph hGraph,
const MUgraphNode ∗ dependencies,
size_t numDependencies,
MUgraph childGraph)

创建一个子图形节点并将其添加到图形中。

创建一个新的节点,该节点执行一个嵌入的图形,并将其添加到 hGraph 中,通过 dependencies 指定的 numDependencies 依赖项。可以 numDependencies 为 0,在这种情况下,节点将被放置在图形的根目录下。dependencies 不能有任何重复条目。新节点的句柄将在 phGraphNode 中返回。

如果 hGraph 包含分配或释放节点,此调用将返回错误。

节点执行一个嵌入的子图形。在此调用中克隆子图形。

参数

phGraphNode - 返回新创建的节点
hGraph - 要添加节点的图形
dependencies - 节点的依赖项
numDependencies - 依赖项数量
childGraph - 要克隆到此节点的图形

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphChildGraphNodeGetGraph, muGraphCreate, muGraphDestroyNode, muGraphAddEmptyNode, muGraphAddKernelNode,
muGraphAddHostNode, muGraphAddMemcpyNode, muGraphAddMemsetNode, muGraphClone

muGraphChildGraphNodeGetGraph()

MUresult MUSAAPI muGraphChildGraphNodeGetGraph (
MUgraphNode hNode,
MUgraph ∗ phGraph)

获取子图形节点的嵌入图形的句柄。

获取子图形节点中的嵌入图形的句柄。此调用不会克隆图形。对图形的更改将反映在节点中,节点保留对图形的所有权。

不能向返回的图形添加分配和释放节点。尝试这样做将返回错误。

参数

hNode - 要获取嵌入图形的节点
phGraph - 存储图形句柄的位置

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddChildGraphNode, muGraphNodeFindInClone

muGraphAddEmptyNode()

MUresult MUSAAPI muGraphAddEmptyNode (
MUgraphNode ∗ phGraphNode,
MUgraph hGraph,
const MUgraphNode ∗ dependencies,
size_t numDependencies)

创建一个空节点并将其添加到图形中。

创建一个新的节点,该节点不执行任何操作,并将其添加到 hGraph 中,通过 dependencies 指定的 numDependencies 依赖项。可以 numDependencies 为 0,在这种情况下,节点将被放置在图形的根目录下。dependencies 不能有任何重复条目。新节点的句柄将在 phGraphNode 中返回。

空节点在执行期间不执行任何操作,但可以用于传递顺序。例如,可以使用空节点和 2∗n 依赖边表示具有 2 组 n 节点和它们之间的屏障的分阶段执行图形,而不是没有空节点和 n^2 依赖边。

参数

phGraphNode - 返回新创建的节点
hGraph - 要添加节点的图形
dependencies - 节点的依赖项
numDependencies - 依赖项数量

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphCreate, muGraphDestroyNode, muGraphAddChildGraphNode, muGraphAddKernelNode, muGraphAddHostNode,
muGraphAddMemcpyNode, muGraphAddMemsetNode

muGraphAddEventRecordNode()

MUresult MUSAAPI muGraphAddEventRecordNode (
MUgraphNode ∗ phGraphNode,
MUgraph hGraph,
const MUgraphNode ∗ dependencies,
size_t numDependencies,
MUevent event)

创建一个事件记录节点并将其添加到图形中。

创建一个新的事件记录节点,并将其添加到 hGraph 中,通过 dependencies 指定的 numDependencies 依赖项和在 event 中指定的事件。可以 numDependencies 为 0,在这种情况下,节点将被放置在图形的根目录下。dependencies 不能有任何重复条目。新节点的句柄将在 phGraphNode 中返回。

每次启动图形时,都会记录 event 以捕获节点依赖项的执行。

参数

phGraphNode - 返回新创建的节点
hGraph - 要添加节点的图形
dependencies - 节点的依赖项
numDependencies - 依赖项数量
event - 节点的事件

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_NOT_SUPPORTED,
MUSA_ERROR_INVALID_VALUE

注意:

Graph 对象不是线程安全的。

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddEventWaitNode, muEventRecordWithFlags, muStreamWaitEvent, muGraphCreate, muGraphDestroyNode,
muGraphAddChildGraphNode, muGraphAddEmptyNode, muGraphAddKernelNode, muGraphAddMemcpyNode,
muGraphAddMemsetNode,

muGraphEventRecordNodeGetEvent()

MUresult MUSAAPI muGraphEventRecordNodeGetEvent (
MUgraphNode hNode,
MUevent ∗ event_out)

返回与事件记录节点关联的事件。

event_out 中返回事件记录节点 hNode 的事件。

参数

hNode - 要获取事件的节点
event_out - 返回事件的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddEventRecordNode, muGraphEventRecordNodeSetEvent, muGraphEventWaitNodeGetEvent, muEventRecordWithFlags,
muStreamWaitEvent

muGraphEventRecordNodeSetEvent()

MUresult MUSAAPI muGraphEventRecordNodeSetEvent (
MUgraphNode hNode,
MUevent event)

设置事件记录节点的事件。

将事件记录节点 hNode 的事件设置为 event

参数

hNode - 要设置事件的节点
event - 要使用的事件

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_OUT_OF_MEMORY

注意: Graph 对象不是线程安全的。

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddEventRecordNode, muGraphEventRecordNodeGetEvent, muGraphEventWaitNodeSetEvent, muEventRecordWithFlags,
muStreamWaitEvent

muGraphAddEventWaitNode()

MUresult MUSAAPI muGraphAddEventWaitNode (
MUgraphNode ∗ phGraphNode,
MUgraph hGraph,
const MUgraphNode ∗ dependencies,
size_t numDependencies,
MUevent event)

创建一个事件等待节点并将其添加到图形中。

创建一个新的事件等待节点,并将其添加到 hGraph 中,通过 dependencies 指定的 numDependencies 依赖项和在 event 中指定的事件。可以 numDependencies 为 0,在这种情况下,节点将被放置在图形的根目录下。dependencies 不能有任何重复条目。新节点的句柄将在 phGraphNode 中返回。

图形节点将等待 event 中捕获的所有工作。有关事件捕获的内容的详细信息,请参见 muEventRecord()。event 可以来自与启动流不同的上下文或设备。

参数

phGraphNode - 返回新创建的节点
hGraph - 要添加节点的图形
dependencies - 节点的依赖项
numDependencies - 依赖项数量
event - 节点的事件

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_NOT_SUPPORTED,
MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddEventRecordNode, muEventRecordWithFlags, muStreamWaitEvent, muGraphCreate, muGraphDestroyNode,
muGraphAddChildGraphNode, muGraphAddEmptyNode, muGraphAddKernelNode, muGraphAddMemcpyNode,
muGraphAddMemsetNode,

muGraphEventWaitNodeGetEvent()

MUresult MUSAAPI muGraphEventWaitNodeGetEvent (
MUgraphNode hNode,
MUevent ∗ event_out)

返回与事件等待节点关联的事件。

event_out 中返回事件等待节点 hNode 的事件。

参数

hNode - 要获取事件的节点
event_out - 返回事件的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddEventWaitNode, muGraphEventWaitNodeSetEvent, muGraphEventRecordNodeGetEvent, muEventRecordWithFlags,
muStreamWaitEvent

muGraphEventWaitNodeSetEvent()

MUresult MUSAAPI muGraphEventWaitNodeSetEvent (
MUgraphNode hNode,
MUevent event)

设置事件等待节点的事件。

将事件等待节点 hNode 的事件设置为 event

参数

hNode - 要设置事件的节点
event - 要使用的事件

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_OUT_OF_MEMORY

注意: Graph 对象不是线程安全的。

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddEventWaitNode, muGraphEventWaitNodeGetEvent, muGraphEventRecordNodeSetEvent, muEventRecordWithFlags,
muStreamWaitEvent

muGraphAddExternalSemaphoresSignalNode()

MUresult MUSAAPI muGraphAddExternalSemaphoresSignalNode (
MUgraphNode ∗ phGraphNode,
MUgraph hGraph,
const MUgraphNode ∗ dependencies,
size_t numDependencies,
const MUSA_EXT_SEM_SIGNAL_NODE_PARAMS ∗ nodeParams)

创建一个外部信号量信号节点并将其添加到图形中。

创建一个新的外部信号量信号节点,并将其添加到 hGraph 中,通过 dependencies 指定的 numDependencies 依赖项和在 nodeParams 中指定的参数。可以 numDependencies 为 0,在这种情况下,节点将被放置在图形的根目录下。dependencies 不能有任何重复条目。新节点的句柄将在 phGraphNode 中返回。

在节点启动时,对一组外部分配的信号量对象执行信号操作。操作将在节点的所有依赖项完成后发生。

参数

phGraphNode - 返回新创建的节点
hGraph - 要添加节点的图形
dependencies - 节点的依赖项
numDependencies - 依赖项数量
nodeParams - 节点的参数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_NOT_SUPPORTED,
MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphExternalSemaphoresSignalNodeGetParams, muGraphExternalSemaphoresSignalNodeSetParams,
muGraphExecExternalSemaphoresSignalNodeSetParams, muGraphAddExternalSemaphoresWaitNode, muImportExternal←-
Semaphore, muSignalExternalSemaphoresAsync, muWaitExternalSemaphoresAsync, muGraphCreate, muGraphDestroyNode,
muGraphAddEventRecordNode, muGraphAddEventWaitNode, muGraphAddChildGraphNode, muGraphAddEmptyNode,
muGraphAddKernelNode, muGraphAddMemcpyNode, muGraphAddMemsetNode,

muGraphExternalSemaphoresSignalNodeGetParams()

MUresult MUSAAPI muGraphExternalSemaphoresSignalNodeGetParams (
MUgraphNode hNode,
MUSA_EXT_SEM_SIGNAL_NODE_PARAMS ∗ params_out)

返回外部信号量信号节点的参数。

params_out 中返回外部信号量信号节点 hNode 的参数。返回的 extSemArrayparamsArray 属于节点。此内存在节点被销毁或其参数被修改之前保持有效,不应直接修改。使用 muGraphExternalSemaphoresSignalNodeSetParams 更新此节点的参数。

参数

hNode - 要获取参数的节点
params_out - 返回参数的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muLaunchKernel, muGraphAddExternalSemaphoresSignalNode, muGraphExternalSemaphoresSignalNodeSetParams,
muGraphAddExternalSemaphoresWaitNode, muSignalExternalSemaphoresAsync, muWaitExternalSemaphoresAsync

muGraphExternalSemaphoresSignalNodeSetParams()

MUresult MUSAAPI muGraphExternalSemaphoresSignalNodeSetParams (
MUgraphNode hNode,
const MUSA_EXT_SEM_SIGNAL_NODE_PARAMS∗nodeParams)

设置外部信号量信号节点的参数。

将外部信号量信号节点 hNode 的参数设置为 nodeParams

参数

hNode - 要设置参数的节点
nodeParams - 要复制的参数

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_OUT_OF_MEMORY

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddExternalSemaphoresSignalNode, muGraphExternalSemaphoresSignalNodeSetParams,
muGraphAddExternalSemaphoresWaitNode, muSignalExternalSemaphoresAsync, muWaitExternalSemaphoresAsync

muGraphAddExternalSemaphoresWaitNode()

MUresult MUSAAPI muGraphAddExternalSemaphoresWaitNode (
MUgraphNode ∗ phGraphNode,
MUgraph hGraph,
const MUgraphNode ∗ dependencies,
size_t numDependencies,
const MUSA_EXT_SEM_WAIT_NODE_PARAMS ∗ nodeParams)

创建一个外部信号量等待节点并将其添加到图形中。

创建一个新的外部信号量等待节点,并将其添加到 hGraph 中,通过 dependencies 指定的 numDependencies 依赖项和在 nodeParams 中指定的参数。可以 numDependencies 为 0,在这种情况下,节点将被放置在图形的根目录下。dependencies 不能有任何重复条目。新节点的句柄将在 phGraphNode 中返回。

在节点启动时,对一组外部分配的信号量对象执行等待操作。节点的依赖项将在等待操作完成后才启动。

参数

phGraphNode - 返回新创建的节点
hGraph - 要添加节点的图形
dependencies - 节点的依赖项
numDependencies - 依赖项数量
nodeParams - 节点的参数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_NOT_SUPPORTED,
MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphExternalSemaphoresWaitNodeGetParams, muGraphExternalSemaphoresWaitNodeSetParams,
muGraphExecExternalSemaphoresWaitNodeSetParams, muGraphAddExternalSemaphoresSignalNode, muImportExternal←-
Semaphore, muSignalExternalSemaphoresAsync, muWaitExternalSemaphoresAsync, muGraphCreate, muGraphDestroyNode,
muGraphAddEventRecordNode, muGraphAddEventWaitNode, muGraphAddChildGraphNode, muGraphAddEmptyNode,
muGraphAddKernelNode, muGraphAddMemcpyNode, muGraphAddMemsetNode,

muGraphExternalSemaphoresWaitNodeGetParams()

MUresult MUSAAPI muGraphExternalSemaphoresWaitNodeGetParams (
MUgraphNode hNode,
MUSA_EXT_SEM_WAIT_NODE_PARAMS∗ params_out)

返回外部信号量等待节点的参数。

在 params_out 中返回外部信号量等待节点 hNode 的参数。返回的 extSemArrayparamsArray 属于节点。此内存在节点被销毁或其参数被修改之前保持有效,不应直接修改。使用 muGraphExternalSemaphoresSignalNodeSetParams 更新此节点的参数。

参数

hNode - 要获取参数的节点
params_out - 返回参数的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muLaunchKernel, muGraphAddExternalSemaphoresWaitNode, muGraphExternalSemaphoresWaitNodeSetParams,
muGraphAddExternalSemaphoresWaitNode, muSignalExternalSemaphoresAsync, muWaitExternalSemaphoresAsync

muGraphExternalSemaphoresWaitNodeSetParams()

MUresult MUSAAPI muGraphExternalSemaphoresWaitNodeSetParams (
MUgraphNode hNode,
const MUSA_EXT_SEM_WAIT_NODE_PARAMS ∗ nodeParams)

设置外部信号量等待节点的参数。

将外部信号量等待节点 hNode 的参数设置为 nodeParams

参数

hNode - 要设置参数的节点
nodeParams - 要复制的参数

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_OUT_OF_MEMORY

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddExternalSemaphoresWaitNode, muGraphExternalSemaphoresWaitNodeSetParams,
muGraphAddExternalSemaphoresWaitNode, muSignalExternalSemaphoresAsync, muWaitExternalSemaphoresAsync

muGraphAddMemAllocNode()

MUresult MUSAAPI muGraphAddMemAllocNode (
MUgraphNode ∗ phGraphNode,
MUgraph hGraph,
const MUgraphNode ∗ dependencies,
size_t numDependencies,
MUSA_MEM_ALLOC_NODE_PARAMS ∗ nodeParams)

创建一个分配节点并将其添加到图形中。

创建一个新的分配节点,并将其添加到 hGraph 中,通过 dependencies 指定的 numDependencies 依赖项和在 nodeParams 中指定的参数。可以 numDependencies 为 0,在这种情况下,节点将被放置在图形的根目录下。dependencies 不能有任何重复条目。新节点的句柄将在 phGraphNode 中返回。

参数

phGraphNode - 返回新创建的节点
hGraph - 要添加节点的图形
dependencies - 节点的依赖项
numDependencies - 依赖项数量
nodeParams - 节点的参数

当 muGraphAddMemAllocNode 创建一个分配节点时,它返回分配的地址在

参数

nodeParams.dptr. 分配的地址在实例化和启动之间保持固定。

如果在同一图形中释放分配,通过使用 muGraphAddMemFreeNode 创建一个释放节点,分配可以被节点访问,这些节点在分配节点之后但在释放节点之前排序。这些分配不能在拥有图形之外被释放,并且它们只能在拥有图形中释放一次。

如果分配没有在同一图形中释放,那么它不仅可以被图形中排序在分配节点之后的节点访问,还可以被排序在图形执行之后但在分配释放之前的流操作访问。

没有在同一图形中释放的分配可以通过以下方式释放:

  • 将分配传递给 muMemFreeAsync 或 muMemFree;
  • 启动一个带有该分配释放节点的图形;或
  • 在实例化期间指定 MUSA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH,这使得每次启动行为就好像它为每个未释放的分配调用了 muMemFreeAsync。

不可能在同一图形和另一个图形中释放分配。如果分配在同一图形中释放,释放节点不能添加到另一个图形。如果分配在另一个图形中释放,释放节点不能再添加到拥有图形。

以下限制适用于包含分配和/或内存释放节点的图形:

  • 不能删除图形的节点和边。
  • 图形不能在子节点中使用。
  • 任何时候只能存在一个图形的实例。
  • 图形不能被克隆。

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_NOT_SUPPORTED,
MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddMemFreeNode, muGraphMemAllocNodeGetParams, muDeviceGraphMemTrim, muDeviceGetGraphMemAttribute,
muDeviceSetGraphMemAttribute, muMemAllocAsync, muMemFreeAsync, muGraphCreate, muGraphDestroyNode,
muGraphAddChildGraphNode, muGraphAddEmptyNode, muGraphAddEventRecordNode, muGraphAddEventWaitNode,
muGraphAddExternalSemaphoresSignalNode, muGraphAddExternalSemaphoresWaitNode, muGraphAddKernelNode,
muGraphAddMemcpyNode, muGraphAddMemsetNode

muGraphAddMemFreeNode()

MUresult MUSAAPI muGraphAddMemFreeNode (
MUgraphNode ∗ phGraphNode,
MUgraph hGraph,
const MUgraphNode ∗ dependencies,
size_t numDependencies,
MUdeviceptr dptr)

创建一个内存释放节点并将其添加到图形中

创建一个新的内存释放节点,并将其添加到 hGraph 中,通过 dependencies 指定的 numDependencies 依赖项和在 nodeParams 中指定的参数。可以 numDependencies 为 0,在这种情况下,节点将被放置在图形的根目录下。dependencies 不能有任何重复条目。新节点的句柄将在 phGraphNode 中返回。

参数

phGraphNode - 返回新创建的节点
hGraph - 要添加节点的图形
dependencies - 节点的依赖项
numDependencies - 依赖项数量
dptr - 要释放的内存地址

muGraphAddMemFreeNode 如果用户尝试释放:

  • 在同一图形中两次分配。
  • 未由分配节点返回的地址。
  • 无效地址。

将返回 MUSA_ERROR_INVALID_VALUE。

以下限制适用于包含分配和/或内存释放节点的图形:

  • 不能删除图形的节点和边。
  • 图形不能在子节点中使用。
  • 任何时候只能存在一个图形的实例。
  • 图形不能被克隆。

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_NOT_SUPPORTED,
MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddMemAllocNode, muGraphMemFreeNodeGetParams, muDeviceGraphMemTrim, muDeviceGetGraphMemAttribute,
muDeviceSetGraphMemAttribute, muMemAllocAsync, muMemFreeAsync, muGraphCreate, muGraphDestroyNode,
muGraphAddChildGraphNode, muGraphAddEmptyNode, muGraphAddEventRecordNode, muGraphAddEventWaitNode,
muGraphAddExternalSemaphoresSignalNode, muGraphAddExternalSemaphoresWaitNode, muGraphAddKernelNode,
muGraphAddMemcpyNode, muGraphAddMemsetNode

muDeviceGraphMemTrim()

MUresult MUSAAPI muDeviceGraphMemTrim (
MUdevice device)

返回内存释放节点的参数。

dptr_out 中返回内存释放节点 hNode 的地址。

参数

hNode - 要获取参数的节点
dptr_out - 返回设备地址的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddMemFreeNode, muGraphMemAllocNodeGetParams

muDeviceGetGraphMemAttribute()

MUresult MUSAAPI muDeviceGetGraphMemAttribute (
MUdevice device,
MUgraphMem_attribute attr,
void ∗ value)

查询与图形相关的异步分配属性。

有效属性包括:

  • MU_GRAPH_MEM_ATTR_USED_MEM_CURRENT:与图形相关联的内存量,单位为字节
  • MU_GRAPH_MEM_ATTR_USED_MEM_HIGH:自上次重置以来与图形相关联的内存量,单位为字节。高水位线只能重置为零。
  • MU_GRAPH_MEM_ATTR_RESERVED_MEM_CURRENT:当前为 MUSA 图形异步分配器分配的内存量,单位为字节。
  • MU_GRAPH_MEM_ATTR_RESERVED_MEM_HIGH:当前为 MUSA 图形异步分配器分配的内存量,单位为字节。

参数

device - 指定查询的范围
attr - 要获取的属性
value - 检索到的值

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_DEVICE

另请参阅

muGraphAddMemAllocNode, muGraphAddMemFreeNode

muDeviceSetGraphMemAttribute()

MUresult MUSAAPI muDeviceSetGraphMemAttribute (
MUdevice device,
MUgraphMem_attribute attr,
void ∗ value)

设置与图形相关的异步分配属性。

有效属性包括:

  • MU_GRAPH_MEM_ATTR_USED_MEM_HIGH:自上次重置以来与图形相关联的内存量,单位为字节。高水位线只能重置为零。
  • MU_GRAPH_MEM_ATTR_RESERVED_MEM_HIGH:当前为 MUSA 图形异步分配器分配的内存量,单位为字节。

参数

device - 指定查询的范围
attr - 要设置的属性
value - 要设置的值的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_DEVICE

另请参阅

muGraphAddMemAllocNode, muGraphAddMemFreeNode

muGraphClone()

MUresult MUSAAPI muGraphClone (
MUgraph ∗ phGraphClone,
MUgraph originalGraph)

克隆一个图形。

此函数创建 originalGraph 的副本,并在 phGraphClone 中返回。所有参数都被复制到克隆的图形中。在此调用之后,原始图形可以被修改,而不影响克隆。

原始图形中的子图形节点被递归复制到克隆中。

参数

phGraphClone - 返回新创建的克隆图形
originalGraph - 要克隆的图形

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_OUT_OF_MEMORY

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphCreate, muGraphNodeFindInClone

muGraphNodeFindInClone()

MUresult MUSAAPI muGraphNodeFindInClone (
MUgraphNode ∗ phNode,
MUgraphNode hOriginalNode,
MUgraph hClonedGraph)

查找节点在克隆中的版本。

此函数返回 hClonedGraph 中对应于原始图形中的 hOriginalNode 的节点。

hClonedGraph 必须通过 muGraphClone 从 hOriginalGraph 克隆而来。hOriginalNode 必须在调用 muGraphClone 时在 hOriginalGraph 中,并且 hClonedGraph 中相应的克隆节点不能被移除。然后通过 phClonedNode 返回克隆的节点。

参数

phNode - 返回克隆节点的句柄
hOriginalNode - 原始节点的句柄
hClonedGraph - 要查询的克隆图形

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphClone

muGraphNodeGetType()

MUresult MUSAAPI muGraphNodeGetType (
MUgraphNode hNode,
MUgraphNodeType∗type)

返回节点的类型。

type 中返回 hNode 的节点类型。

参数

hNode - 要查询的节点
type - 返回节点类型的指针

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphGetNodes, muGraphGetRootNodes, muGraphChildGraphNodeGetGraph, muGraphKernelNodeGetParams,
muGraphKernelNodeSetParams, muGraphHostNodeGetParams, muGraphHostNodeSetParams, muGraphMemcpyNodeGetParams,
muGraphMemcpyNodeSetParams, muGraphMemsetNodeGetParams, muGraphMemsetNodeSetParams

muGraphGetNodes()

MUresult MUSAAPI muGraphGetNodes (
MUgraph hGraph,
MUgraphNode ∗ nodes,
size_t ∗ numNodes)

返回图形的节点。

返回 hGraphnodes 列表。如果 nodes 为 NULL,则此函数将返回 numNodes 中的节点数量。否则,将填充 numNodes 条目。如果 numNodes 高于实际节点数量,nodes 中的剩余条目将设置为 NULL,实际获得的节点数量将返回在 numNodes 中。

参数

hGraph - 要查询的图形
nodes - 返回节点的指针
numNodes - 见描述

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphCreate, muGraphGetRootNodes, muGraphGetEdges, muGraphNodeGetType, muGraphNodeGetDependencies,
muGraphNodeGetDependentNodes

muGraphGetRootNodes()

MUresult MUSAAPI muGraphGetRootNodes (
MUgraph hGraph,
MUgraphNode ∗ rootNodes,
size_t ∗ numRootNodes)

返回图形的根节点。

返回 hGraph 的根节点列表。如果 rootNodes 为 NULL,则此函数将返回 numRootNodes 中的根节点数量。否则,将填充 numRootNodes 条目。如果 numRootNodes 高于实际根节点数量,rootNodes 中的剩余条目将设置为 NULL,实际获得的节点数量将返回在 numRootNodes 中。

参数

hGraph - 要查询的图形
rootNodes - 返回根节点的指针
numRootNodes - 见描述

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphCreate, muGraphGetNodes, muGraphGetEdges, muGraphNodeGetType, muGraphNodeGetDependencies,
muGraphNodeGetDependentNodes

muGraphGetEdges()

MUresult MUSAAPI muGraphGetEdges (
MUgraph hGraph,
MUgraphNode ∗ from,
MUgraphNode ∗ to,
size_t ∗ numEdges)

返回图形的依赖边。

返回 hGraph 的依赖边列表。边通过 fromto 中的对应索引返回;即,节点 into[i] 依赖于节点 in from[i]。fromto 都可以为 NULL,在这种情况下,此函数只返回 numEdges 中的边数。否则,将填充 numEdges 条目。如果 numEdges 高于实际边数,from 和 to 中的剩余条目将设置为 NULL,实际返回的边数将写入 numEdges

参数

hGraph - 要从中获取边的图形
from - 返回边端点的位置
to - 返回边端点的位置
numEdges - 见描述

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphGetNodes, muGraphGetRootNodes, muGraphAddDependencies, muGraphRemoveDependencies,
muGraphNodeGetDependencies, muGraphNodeGetDependentNodes

muGraphNodeGetDependencies()

MUresult MUSAAPI muGraphNodeGetDependencies (
MUgraphNode hNode,
MUgraphNode ∗ dependencies,
size_t ∗ numDependencies)

返回节点的依赖项。

返回节点的 dependencies 列表。如果 dependencies 为 NULL,则此函数将返回 numDependencies 中的依赖项数量。否则,将填充 numDependencies 条目。如果 numDependencies 高于实际依赖项数量,dependencies 中的剩余条目将设置为 NULL,实际获得的节点数量将返回在 numDependencies 中。

参数

hNode - 要查询的节点
dependencies - 返回依赖项的指针
numDependencies - 见描述

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphNodeGetDependentNodes, muGraphGetNodes, muGraphGetRootNodes, muGraphGetEdges, muGraphAddDependencies,
muGraphRemoveDependencies

muGraphNodeGetDependentNodes()

MUresult MUSAAPI muGraphNodeGetDependentNodes (
MUgraphNode hNode,
MUgraphNode ∗ dependentNodes,
size_t ∗ numDependentNodes)

返回节点的依赖节点。

返回节点的依赖节点列表。如果 dependentNodes 为 NULL,则此函数将返回 numDependentNodes 中的依赖节点数量。否则,将填充 numDependentNodes 条目。如果 numDependentNodes 高于实际依赖节点数量,dependentNodes 中的剩余条目将设置为 NULL,实际获得的节点数量将返回在 numDependentNodes 中。

参数

hNode - 要查询的节点
dependentNodes - 返回依赖节点的指针
numDependentNodes - 见描述

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphNodeGetDependencies, muGraphGetNodes, muGraphGetRootNodes, muGraphGetEdges, muGraphAddDependencies, muGraphRemoveDependencies

muGraphAddDependencies()

MUresult MUSAAPI muGraphAddDependencies (
MUgraph hGraph,
const MUgraphNode ∗ from,
const MUgraphNode ∗ to,
size_t numDependencies)

向图形添加依赖边。

要添加的依赖数量由 numDependencies 定义。fromto 中的对应索引元素定义依赖关系。fromto 中的每个节点都必须属于 hGraph

如果 numDependencies 为 0,将忽略 fromto 中的元素。指定现有的依赖关系将返回错误。

参数

hGraph - 要添加依赖关系的图形
from - 提供依赖项的节点数组
to - 依赖节点的数组
numDependencies - 要添加的依赖数量

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphRemoveDependencies, muGraphGetEdges, muGraphNodeGetDependencies, muGraphNodeGetDependentNodes

muGraphDestroyNode()

MUresult MUSAAPI muGraphDestroyNode (
MUgraphNode hNode)

从图形中移除节点

从其图形中移除 hNode。此操作还会切断其他节点对 hNode 以及反之的任何依赖项。

属于包含分配或释放节点的图形的节点不能被销毁。任何尝试这样做的操作都将返回错误。

参数

hNode - 要移除的节点

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddChildGraphNode, muGraphAddEmptyNode, muGraphAddKernelNode, muGraphAddHostNode, muGraphAddMemcpyNode,
muGraphAddMemsetNode

muGraphInstantiate()

MUresult MUSAAPI muGraphInstantiate (
MUgraphExec *phGraphExec,
MUgraph hGraph,
unsigned long long flags)

从图创建可执行图。

hGraph 实例化为可执行图。图将被验证是否存在任何结构约束或节点内约束,这些约束之前未被验证。如果实例化成功,则在 phGraphExec 中返回实例化图的句柄。

flags 参数控制实例化和后续图启动的行为。有效标志包括:

  • MUSA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH,该标志配置包含内存分配节点的图,在重新启动图之前自动释放任何未释放的内存分配。

  • MUSA_GRAPH_INSTANTIATE_FLAG_DEVICE_LAUNCH,该标志配置图以从设备启动。如果传递此标志,则返回的可执行图句柄可用于从主机和设备启动图。此标志只能在支持统一寻址的平台上使用。此标志不能与 MUSA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH 结合使用。

  • MUSA_GRAPH_INSTANTIATE_FLAG_USE_NODE_PRIORITY,该标志使图在执行期间使用每个节点属性中的优先级,而不是启动流的优先级。请注意,优先级仅在内核节点上可用,并且在流捕获期间从流优先级复制。

如果 hGraph 包含任何分配或释放节点,则对于该图最多只能存在一个可执行图。在使用 muGraphExecDestroy 销毁第一个可执行图之前,尝试实例化第二个可执行图将导致错误。如果 hGraph 包含任何设备可更新的内核节点,同样适用。

如果 hGraph 包含从多个上下文调用设备端 musaGraphLaunch() 的内核,这将导致错误。

为设备启动实例化的图有额外的限制,这些限制不适用于主机图:

  • 图的节点必须位于单个上下文中。
  • 图只能包含内核节点、memcpy 节点、memset 节点和子图节点。
  • 图不能为空,必须至少包含一个内核、memcpy 或 memset 节点。具体操作的限制如下所述。
  • 内核节点:
    • 不允许使用 MUSA 动态并行。
    • 只要不使用 MPS,就允许协作启动。
  • Memcpy 节点:
    • 仅允许涉及设备内存和/或固定设备映射主机内存的复制。
    • 不允许涉及 MUSA 数组的复制。
    • 两个操作数都必须可以从当前上下文访问,并且当前上下文必须与图中其他节点的上下文匹配。

参数

phGraphExec - 返回实例化图
hGraph - 要实例化的图
flags - 控制实例化的标志。请参见 MUgraphInstantiate_flags。

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphInstantiate, muGraphCreate, muGraphUpload, muGraphLaunch, muGraphExecDestroy

muGraphInstantiateWithParams()

MUresult MUSAAPI muGraphInstantiateWithParams (
MUgraphExec *phGraphExec,
MUgraph hGraph,
MUSA_GRAPH_INSTANTIATE_PARAMS *instantiateParams)

根据 instantiateParams 结构将 hGraph 实例化为可执行图。图将被验证是否存在任何之前未验证的结构约束或节点内约束。如果实例化成功,则在 phGraphExec 中返回实例化图的句柄。

instantiateParams 控制实例化和后续图启动的行为,并在发生错误时返回更详细的信息。MUSA_GRAPH_INSTANTIATE_PARAMS 定义如下:

typedef struct {
muuint64_t flags;
MUstream hUploadStream;
MUgraphNode hErrNode_out;
MUgraphInstantiateResult result_out;
} MUSA_GRAPH_INSTANTIATE_PARAMS;

flags 字段控制实例化和后续图启动的行为。有效标志包括:

  • MUSA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH,该标志配置包含内存分配节点的图,在重新启动图之前自动释放任何未释放的内存分配。

  • MUSA_GRAPH_INSTANTIATE_FLAG_UPLOAD,该标志将在图实例化后将图上传到 hUploadStream

  • MUSA_GRAPH_INSTANTIATE_FLAG_DEVICE_LAUNCH,该标志配置图以从设备启动。如果传递此标志,则返回的可执行图句柄可用于从主机和设备启动图。此标志只能在支持统一寻址的平台上使用。此标志不能与 MUSA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH 结合使用。

  • MUSA_GRAPH_INSTANTIATE_FLAG_USE_NODE_PRIORITY,该标志使图在执行期间使用每个节点属性中的优先级,而不是启动流的优先级。请注意,优先级仅在内核节点上可用,并且在流捕获期间从流优先级复制。

如果 hGraph 包含任何分配或释放节点,则对于该图最多只能存在一个可执行图。在使用 muGraphExecDestroy 销毁第一个可执行图之前,尝试实例化第二个可执行图将导致错误。如果 hGraph 包含任何设备可更新的内核节点,同样适用。

如果 hGraph 包含从多个上下文调用设备端 musaGraphLaunch() 的内核,这将导致错误。

为设备启动实例化的图有额外的限制,这些限制不适用于主机图:

  • 图的节点必须位于单个上下文中。
  • 图只能包含内核节点、memcpy 节点、memset 节点和子图节点。
  • 图不能为空,必须至少包含一个内核、memcpy 或 memset 节点。具体操作的限制如下所述。
  • 内核节点:
    • 不允许使用 MUSA 动态并行。
    • 只要不使用 MPS,就允许协作启动。
  • Memcpy 节点:
    • 仅允许涉及设备内存和/或固定设备映射主机内存的复制。
    • 不允许涉及 MUSA 数组的复制。
    • 两个操作数都必须可以从当前上下文访问,并且当前上下文必须与图中其他节点的上下文匹配。

在发生错误时,result_outhErrNode_out 字段将包含有关错误性质的更多信息。可能的错误报告包括:

  • MUSA_GRAPH_INSTANTIATE_ERROR,如果传递了无效值或者发生了由函数返回值描述的意外错误。hErrNode_out 将设置为 NULL。
  • MUSA_GRAPH_INSTANTIATE_INVALID_STRUCTURE,如果图结构无效。hErrNode_out 将设置为其中一个违规节点。
  • MUSA_GRAPH_INSTANTIATE_NODE_OPERATION_NOT_SUPPORTED,如果图是为设备启动实例化的,但包含不受支持的节点类型或执行不受支持的操作的节点,例如在内核节点中使用 MUSA 动态并行。hErrNode_out 将设置为此节点。
  • MUSA_GRAPH_INSTANTIATE_MULTIPLE_CTXS_NOT_SUPPORTED,如果图是为设备启动实例化的,但节点的上下文与另一个节点的上下文不同。如果图不是为设备启动实例化的,并且它包含从多个上下文调用设备端 musaGraphLaunch() 的内核,也可能返回此错误。hErrNode_out 将设置为此节点。

如果实例化成功,result_out 将设置为 MUSA_GRAPH_INSTANTIATE_SUCCESS,hErrNode_out 将设置为 NULL。

参数

phGraphExec - 返回实例化图
hGraph - 要实例化的图
instantiateParams - 实例化参数

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphCreate, muGraphInstantiate, muGraphExecDestroy

muGraphExecKernelNodeSetParams()

MUresult MUSAAPI muGraphExecKernelNodeSetParams (
MUgraphExec hGraphExec,
MUgraphNode hNode,
const MUSA_KERNEL_NODE_PARAMS ∗ nodeParams)

为给定 graphExec 中的内核节点设置参数

在可执行图形 hGraphExec 中设置内核节点的参数。节点由非可执行图形中的相应节点 hNode 标识,从中实例化了可执行图形。

hNode 不得从原始图形中移除。nodeParams 的 func 字段不能修改,必须与原始值匹配。所有其他值都可以修改。

修改只影响 hGraphExec 的未来启动。已经排队或正在运行的 hGraphExec 的启动不受此调用影响。此调用也不修改 hNode

参数

hGraphExec - 在其中设置指定节点的可执行图形
hNode - 来自图形的内核节点,该图形用于实例化 graphExec
nodeParams - 要设置的更新参数

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddKernelNode, muGraphKernelNodeSetParams, muGraphExecMemcpyNodeSetParams,
muGraphExecMemsetNodeSetParams, muGraphExecHostNodeSetParams, muGraphExecChildGraphNodeSetParams,
muGraphExecEventRecordNodeSetEvent, muGraphExecEventWaitNodeSetEvent, muGraphExecExternalSemaphoresSignalNodeSetParams,
muGraphExecExternalSemaphoresWaitNodeSetParams, muGraphExecUpdate, muGraphInstantiate

muGraphExecMemcpyNodeSetParams()

MUresult MUSAAPI muGraphExecMemcpyNodeSetParams (
MUgraphExec hGraphExec,
MUgraphNode hNode,
const MUSA_MEMCPY3D∗ copyParams,
MUcontext ctx)

为给定 graphExec 中的 memcpy 节点设置参数。

更新 hNodehGraphExec 中的工作,就好像 hNode 在实例化时包含了 copyParams。hNode 必须保持在用于实例化 hGraphExec 的图形中。忽略对 hNode 的边的更改。

copyParams 中的源和目标内存必须从与原始源和目标内存相同的上下文中分配。实例化时的内存操作数和 copyParams 中的内存操作数都必须是一维的。不支持零长度操作。

修改只影响 hGraphExec 的未来启动。已经排队或正在运行的 hGraphExec 的启动不受此调用影响。此调用也不修改 hNode。

如果内存操作数的映射已更改,或者原始或新的内存操作数是多维的,将返回 MUSA_ERROR_INVALID_VALUE。

参数

hGraphExec - 在其中设置指定节点的可执行图形
hNode - Memcpy 节点来自用于实例化 graphExec 的图形
copyParams - 要设置的更新参数
ctx - 运行节点的上下文

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddMemcpyNode, muGraphMemcpyNodeSetParams, muGraphExecKernelNodeSetParams,
muGraphExecMemsetNodeSetParams, muGraphExecHostNodeSetParams, muGraphExecChildGraphNodeSetParams,
muGraphExecEventRecordNodeSetEvent, muGraphExecEventWaitNodeSetEvent, muGraphExecExternalSemaphoresSignalNodeSetParams,
muGraphExecExternalSemaphoresWaitNodeSetParams, muGraphExecUpdate, muGraphInstantiate

muGraphExecMemsetNodeSetParams()

MUresult MUSAAPI muGraphExecMemsetNodeSetParams (
MUgraphExec hGraphExec,
MUgraphNode hNode,
const MUSA_MEMSET_NODE_PARAMS∗ memsetParams,
MUcontext ctx)

为给定 graphExec 中的 memset 节点设置参数。

更新 hNodehGraphExec 中的工作,就好像 hNode 在实例化时包含了 memsetParams。hNode 必须保持在用于实例化 hGraphExec 的图形中。忽略对 hNode 的边的更改。

memsetParams 中的目标内存必须从与原始目标内存相同的上下文中分配。实例化时的内存操作数和 memsetParams 中的内存操作数都必须是一维的。不支持零长度操作。

修改只影响 hGraphExec 的未来启动。已经排队或正在运行的 hGraphExec 的启动不受此调用影响。此调用也不修改 hNode。

如果内存操作数的映射已更改,或者原始或新的内存操作数是多维的,将返回 MUSA_ERROR_INVALID_VALUE。

参数

hGraphExec - 在其中设置指定节点的可执行图形
hNode - Memset 节点来自用于实例化 graphExec 的图形
memsetParams - 要设置的更新参数
ctx - 运行节点的上下文

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddMemsetNode, muGraphMemsetNodeSetParams, muGraphExecKernelNodeSetParams,
muGraphExecMemcpyNodeSetParams, muGraphExecHostNodeSetParams, muGraphExecChildGraphNodeSetParams,
muGraphExecEventRecordNodeSetEvent, muGraphExecEventWaitNodeSetEvent, muGraphExecExternalSemaphoresSignalNodeSetParams,
muGraphExecExternalSemaphoresWaitNodeSetParams, muGraphExecUpdate, muGraphInstantiate

muGraphExecHostNodeSetParams()

MUresult MUSAAPI muGraphExecHostNodeSetParams (
MUgraphExec hGraphExec,
MUgraphNode hNode,
const MUSA_HOST_NODE_PARAMS∗ nodeParams)

为给定 graphExec 中的主机节点设置参数。

更新 hNodehGraphExec 中的工作,就好像 hNode 在实例化时包含了 nodeParams。hNode 必须保持在用于实例化 hGraphExec 的图形中。忽略对 hNode 的边的更改。

修改只影响 hGraphExec 的未来启动。已经排队或正在运行的 hGraphExec 的启动不受此调用影响。此调用也不修改 hNode。

参数

hGraphExec - 在其中设置指定节点的可执行图形
hNode - 来自用于实例化 graphExec 的图形的主机节点
nodeParams - 要设置的更新参数

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddHostNode, muGraphHostNodeSetParams, muGraphExecKernelNodeSetParams, muGraphExecMemcpyNodeSetParams,
muGraphExecMemsetNodeSetParams, muGraphExecChildGraphNodeSetParams, muGraphExecEventRecordNodeSetEvent,
muGraphExecEventWaitNodeSetEvent, muGraphExecExternalSemaphoresSignalNodeSetParams,
muGraphExecExternalSemaphoresWaitNodeSetParams, muGraphExecUpdate, muGraphInstantiate

muGraphExecChildGraphNodeSetParams()

MUresult MUSAAPI muGraphExecChildGraphNodeSetParams (
MUgraphExec hGraphExec,
MUgraphNode hNode,
MUgraph childGraph)

更新给定 graphExec 中子图形节点的节点参数。

更新 hNode 在 hGraphExec 中的工作,就好像 hNode 的图形中包含的节点在实例化时包含了 childGraph 的节点参数。hNode 必须保持在用于实例化 hGraphExec 的图形中。忽略对 hNode 的边的更改。

修改只影响 hGraphExec 的未来启动。已经排队或正在运行的 hGraphExec 的启动不受此调用影响。此调用也不修改 hNode。

子图形的拓扑结构以及节点插入顺序必须与 hNode 中包含的图形相匹配。有关可以在实例化图形中更新的内容的列表,请参阅 muGraphExecUpdate()。更新是递归的,因此顶级子图形中包含的子图形节点也将被更新。

参数

hGraphExec - 在其中设置指定节点的可执行图形
hNode - 来自用于实例化 graphExec 的图形的主机节点
childGraph - 提供更新参数的图形

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE
> 注意:

> Graph 对象不是线程安全的。

> 此函数也可能返回来自先前异步操作的错误码。

**另请参阅**

muGraphAddChildGraphNode, muGraphChildGraphNodeGetGraph, muGraphExecKernelNodeSetParams, muGraphExecMemcpyNodeSetParams, muGraphExecMemsetNodeSetParams, muGraphExecHostNodeSetParams, muGraphExecEventRecordNodeSetEvent, muGraphExecEventWaitNodeSetEvent, muGraphExecExternalSemaphoresSignalNodeSetParams, muGraphExecExternalSemaphoresWaitNodeSetParams, muGraphExecUpdate, muGraphInstantiate


### muGraphExecEventRecordNodeSetEvent()

```cpp
MUresult MUSAAPI muGraphExecEventRecordNodeSetEvent(
MUgraphExec hGraphExec,
MUgraphNode hNode,
MUevent event)

在给定的 graphExec 中为事件记录节点设置事件。

在可执行图 hGraphExec 中为事件记录节点设置事件。该节点通过非可执行图中对应的节点 hNode 来标识,可执行图是从该非可执行图中实例化的。

修改只影响 hGraphExec 的未来启动。已经入队或正在运行的 hGraphExec 启动不受此调用影响。hNode 也不会被此调用修改。

参数

hGraphExec - 在其中设置指定节点的可执行图
hNode - 来自实例化 graphExec 的图的事件记录节点
event - 要使用的更新事件

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddEventRecordNode, muGraphEventRecordNodeGetEvent, muGraphEventWaitNodeSetEvent,
muEventRecordWithFlags, muStreamWaitEvent, muGraphExecKernelNodeSetParams, muGraphExecMemcpyNodeSetParams,
muGraphExecMemsetNodeSetParams, muGraphExecHostNodeSetParams, muGraphExecChildGraphNodeSetParams,
muGraphExecEventWaitNodeSetEvent, muGraphExecExternalSemaphoresSignalNodeSetParams,
muGraphExecExternalSemaphoresWaitNodeSetParams, muGraphExecUpdate, muGraphInstantiate

muGraphExecEventWaitNodeSetEvent()

MUresult MUSAAPI muGraphExecEventWaitNodeSetEvent(
MUgraphExec hGraphExec,
MUgraphNode hNode,
MUevent event)

在给定的 graphExec 中为事件等待节点设置事件。

在可执行图 hGraphExec 中为事件等待节点设置事件。该节点通过非可执行图中对应的节点 hNode 来标识,可执行图是从该非可执行图中实例化的。

修改只影响 hGraphExec 的未来启动。已经入队或正在运行的 hGraphExec 启动不受此调用影响。hNode 也不会被此调用修改。

参数

hGraphExec - 在其中设置指定节点的可执行图
hNode - 来自实例化 graphExec 的图的事件等待节点
event - 要使用的更新事件

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddEventWaitNode, muGraphEventWaitNodeGetEvent, muGraphEventRecordNodeSetEvent,
muEventRecordWithFlags, muStreamWaitEvent, muGraphExecKernelNodeSetParams, muGraphExecMemcpyNodeSetParams,
muGraphExecMemsetNodeSetParams, muGraphExecHostNodeSetParams, muGraphExecChildGraphNodeSetParams,
muGraphExecEventRecordNodeSetEvent, muGraphExecExternalSemaphoresSignalNodeSetParams,
muGraphExecExternalSemaphoresWaitNodeSetParams, muGraphExecUpdate, muGraphInstantiate

muGraphExecExternalSemaphoresSignalNodeSetParams()

MUresult MUSAAPI muGraphExecExternalSemaphoresSignalNodeSetParams(
MUgraphExec hGraphExec,
MUgraphNode hNode,
const MUSA_EXT_SEM_SIGNAL_NODE_PARAMS∗ nodeParams)

为给定 graphExec 中的外部信号量节点设置参数。

为可执行图 hGraphExec 中的外部信号量节点设置参数。该节点通过非可执行图中对应的节点 hNode 来标识,可执行图是从该非可执行图中实例化的。

hNode 不得从原始图中移除。

修改只影响 hGraphExec 的未来启动。已经入队或正在运行的 hGraphExec 启动不受此调用影响。hNode 也不会被此调用修改。

更改 nodeParams->numExtSems 不被支持。

参数

hGraphExec - 在其中设置指定节点的可执行图
hNode - 来自实例化 graphExec 的图的信号量信号节点
nodeParams - 要设置的更新参数

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意:

Graph 对象不是线程安全的。

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddExternalSemaphoresSignalNode, muImportExternalSemaphore, muSignalExternal←-
SemaphoresAsync, muWaitExternalSemaphoresAsync, muGraphExecKernelNodeSetParams,
muGraphExecMemcpyNodeSetParams, muGraphExecMemsetNodeSetParams, muGraphExecHostNodeSetParams,
muGraphExecChildGraphNodeSetParams, muGraphExecEventRecordNodeSetEvent, muGraphExecEventWaitNodeSetEvent,
muGraphExecExternalSemaphoresWaitNodeSetParams, muGraphExecUpdate, muGraphInstantiate

muGraphExecExternalSemaphoresWaitNodeSetParams()

MUresult MUSAAPI muGraphExecExternalSemaphoresWaitNodeSetParams(
MUgraphExec hGraphExec,
MUgraphNode hNode,
const MUSA_EXT_SEM_WAIT_NODE_PARAMS∗ nodeParams)

为给定 graphExec 中的外部等待信号量节点设置参数。

为可执行图 hGraphExec 中的外部等待信号量节点设置参数。该节点通过非可执行图中对应的节点 hNode 来标识,可执行图是从该非可执行图中实例化的。

hNode 不得从原始图中移除。

修改只影响 hGraphExec 的未来启动。已经入队或正在运行的 hGraphExec 启动不受此调用影响。hNode 也不会被此调用修改。

更改 nodeParams->numExtSems 不被支持。

参数

hGraphExec - 在其中设置指定节点的可执行图
hNode - 来自实例化 graphExec 的图的信号量等待节点
nodeParams - 要设置的更新参数

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddExternalSemaphoresWaitNode, muImportExternalSemaphore, muSignalExternal←-
SemaphoresAsync, muWaitExternalSemaphoresAsync, muGraphExecKernelNodeSetParams,
muGraphExecMemcpyNodeSetParams, muGraphExecMemsetNodeSetParams, muGraphExecHostNodeSetParams,
muGraphExecChildGraphNodeSetParams, muGraphExecEventRecordNodeSetEvent, muGraphExecEventWaitNodeSetEvent,
muGraphExecExternalSemaphoresSignalNodeSetParams, muGraphExecUpdate, muGraphInstantiate

muGraphLaunch()

MUresult MUSAAPI muGraphLaunch (
MUgraphExec hGraphExec,
MUstream hStream )

在流中启动可执行图

hStream 中执行 hGraphExec。一次只能执行 hGraphExec 的一个实例。每次启动都排在 hStream 中任何先前工作和任何先前 hGraphExec 启动之后。要并发执行图,必须将其实例化多次到多个可执行图中。

如果 hGraphExec 创建的任何分配(来自先前的启动)仍未释放(且 hGraphExec 不是使用 MUSA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH 实例化的),启动将因 MUSA_ERROR_INVALID_VALUE 失败。

参数

hGraphExec - 要启动的可执行图
hStream - 要在此流中启动图

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphInstantiate, muGraphUpload, muGraphExecDestroy

muGraphExecDestroy()

MUresult MUSAAPI muGraphExecDestroy (
MUgraphExec hGraphExec)

销毁可执行图。

销毁由 hGraphExec 指定的可执行图及其所有可执行节点。如果可执行图正在进行中,它不会被终止,而是在完成后异步释放。

参数

hGraphExec - 要销毁的可执行图

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphInstantiate, muGraphUpload, muGraphLaunch

muGraphDestroy()

MUresult MUSAAPI muGraphDestroy (
MUgraph hGraph)

销毁图。

销毁由 hGraph 指定的图及其所有节点。

参数

hGraph - 要销毁的图

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphCreate

muGraphExecUpdate()

MUresult MUSAAPI muGraphExecUpdate (
MUgraphExec hGraphExec,
MUgraph hGraph,
MUgraphExecUpdateResultInfo *resultInfo)

检查可执行图是否可以使用图进行更新,并在可能的情况下执行更新。

使用 hGraph 指定的拓扑相同图中的节点参数更新 hGraphExec 指定的实例化图中的节点参数。

限制条件:

  • 内核节点:
    • 函数的所有者上下文不能改变。
    • 原本不使用 MUSA 动态并行的节点不能更新为使用 CDP 的函数。
    • 原本不进行设备端更新调用的节点不能更新为进行设备端更新调用的函数。
    • 协作节点不能更新为非协作节点,反之亦然。
    • 如果图是使用 MUSA_GRAPH_INSTANTIATE_FLAG_USE_NODE_PRIORITY 实例化的,则优先级属性不能改变。在限制到设备支持范围之前,检查最初请求的优先级值的相等性。
    • 如果 hGraphExec 未为设备启动实例化,则原本不使用设备端 musaGraphLaunch() 的节点不能更新为使用设备端 musaGraphLaunch() 的函数,除非该节点与实例化时包含此类调用的节点位于同一上下文中。如果实例化时不存在此类调用,则根本无法执行这些更新。
    • hGraphhGraphExec 都不能包含设备可更新的内核节点。
  • Memset 和 memcpy 节点:
    • 分配/映射操作数的 MUSA 设备不能改变。
    • 源/目标内存必须从与原始源/目标内存相同的上下文分配。
    • 对于 2D memsets,只能更新地址和分配的值。
    • 对于 1D memsets,也允许更新维度,但如果生成的操作无法映射到已为节点分配的工作资源,则可能失败。
  • 其他 memcpy 节点限制:
    • 不支持更改源或目标内存类型(即 MU_MEMORYTYPE_DEVICEMU_MEMORYTYPE_ARRAY 等)。
  • 外部信号量等待节点和记录节点:
    • 不支持更改信号量数量。
  • 条件节点:
    • 不支持更改节点参数。
    • 更改条件体图内节点的参数受上述规则约束。
    • 条件句柄标志和默认值作为图更新的一部分进行更新。

注意:API 可能在未来版本中添加更多限制。应始终检查返回码。

当出现以下情况时,muGraphExecUpdateresultInfo 的结果成员设置为 MU_GRAPH_EXEC_UPDATE_ERROR_TOPOLOGY_CHANGED

  • hGraphExechGraph 中直接包含的节点数不同,此时 resultInfo->errorNode 设置为 NULL。
  • hGraph 的退出节点多于 hGraph,此时 resultInfo->errorNode 设置为 hGraph 中的一个退出节点。
  • hGraph 中的节点依赖数与 hGraphExec 中配对节点的依赖数不同,此时 resultInfo->errorNode 设置为 hGraph 中的节点。
  • hGraph 中的节点依赖与 hGraphExec 中配对节点的相应依赖不匹配,resultInfo->errorNode 将设置为 hGraph 中的节点。resultInfo->errorFromNode 将设置为不匹配的依赖。依赖基于边顺序配对,当节点已基于图中检查的其他边配对时,依赖不匹配。

muGraphExecUpdateresultInfo 的结果成员设置为:

  • MU_GRAPH_EXEC_UPDATE_ERROR 如果传递了无效值。
  • MU_GRAPH_EXEC_UPDATE_ERROR_TOPOLOGY_CHANGED 如果图拓扑改变了。
  • MU_GRAPH_EXEC_UPDATE_ERROR_NODE_TYPE_CHANGED 如果节点类型改变了,此时 hErrorNode_out 设置为 hGraph 中的节点。
  • MU_GRAPH_EXEC_UPDATE_ERROR_UNSUPPORTED_FUNCTION_CHANGE 如果函数以不支持的方式改变(见上述说明),此时 hErrorNode_out 设置为 hGraph 中的节点。
  • MU_GRAPH_EXEC_UPDATE_ERROR_PARAMETERS_CHANGED 如果节点的任何参数以不支持的方式改变,此时 hErrorNode_out 设置为 hGraph 中的节点。
  • MU_GRAPH_EXEC_UPDATE_ERROR_ATTRIBUTES_CHANGED 如果节点的任何属性以不支持的方式改变,此时 hErrorNode_out 设置为 hGraph 中的节点。
  • MU_GRAPH_EXEC_UPDATE_ERROR_NOT_SUPPORTED 如果节点的某些内容不受支持,如节点类型或配置,此时 hErrorNode_out 设置为 hGraph 中的节点。

如果更新因上述未列出的原因失败,则 resultInfo 的结果成员将设置为 MU_GRAPH_EXEC_UPDATE_ERROR。如果更新成功,结果成员将设置为 MU_GRAPH_EXEC_UPDATE_SUCCESS

当更新成功执行时,muGraphExecUpdate 返回 MUSA_SUCCESS。如果由于包含违反实例化图更新特定约束的更改而未执行图更新,则返回 MUSA_ERROR_GRAPH_EXEC_UPDATE_FAILURE

参数

hGraphExec 要更新的实例化图
hGraph 包含更新参数的图
resultInfo 错误信息结构

返回值

MUSA_SUCCESS, MUSA_ERROR_GRAPH_EXEC_UPDATE_FAILURE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphInstantiate

muGraphKernelNodeCopyAttributes()

MUresult MUSAAPI muGraphKernelNodeCopyAttributes (
MUgraphNode dst,
MUgraphNode src)

从源节点复制属性到目标节点。

从源节点 src 复制属性到目标节点 dst。两个节点必须具有相同的上下文。

参数

out dst 目标节点
in src 源节点 对于属性列表,见 MUkernelNodeAttrID

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

MUaccessPolicyWindow

muGraphKernelNodeGetAttribute()

MUresult MUSAAPI muGraphKernelNodeGetAttribute (
MUgraphNode hNode,
MUkernelNodeAttrID attr,
MUkernelNodeAttrValue ∗ value_out)

查询节点属性。

查询节点 hNode 的属性 attr 并将其存储在 value_out 的相应成员中。

参数

in hNode
in attr
out value_out

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

MUaccessPolicyWindow

muGraphKernelNodeSetAttribute()

MUresult MUSAAPI muGraphKernelNodeSetAttribute (
MUgraphNode hNode,
MUkernelNodeAttrID attr,
const MUkernelNodeAttrValue∗ value)

设置节点属性。

根据 value 设置节点 hNode 上的属性 attr

参数

out hNode
in attr
out value

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

MUaccessPolicyWindow

muGraphAddMemAtomicNode()

MUresult MUSAAPI muGraphAddMemAtomicNode(
MUgraphNode *phGraphNode,
MUgraph hGraph,
const MUgraphNode *dependencies,
size_t numDependencies,
const MUSA_MEM_ATOMIC_NODE_PARAMS* memAtomicParams, MUcontext ctx);

创建一个内存原子节点并添加到图中。

创建一个新的内存原子节点并添加到 hGraph 中,通过 dependencies 指定 numDependencies 依赖关系。numDependencies 可以为 0,在这种情况下,节点将被放置在图的根目录下。dependencies 不能有任何重复条目。新节点的句柄将返回在 phGraphNode 中。

当图被启动时,节点将执行由 memAtomicParams 描述的内存原子操作。有关结构的描述,请参阅 muMemoryAtomicAsync()。 参数

phGraphNode - 返回新创建的节点
hGraph - 要添加节点的图
dependencies - 节点的依赖关系
numDependencies - 依赖关系数量
memAtomicParams - 内存原子的参数
ctx - 运行节点的上下文

返回值

MUSA_SUCCESS,
MUSA_ERROR_DEINITIALIZED,
MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_INVALID_VALUE

另请参阅

muMemoryAtomicAsync,
muGraphMemAtomicNodeGetParams,
muGraphMemAtomicNodeSetParams,
muGraphCreate,
muGraphDestroyNode,
muGraphAddChildGraphNode,
muGraphAddEmptyNode,
muGraphAddKernelNode,
muGraphAddHostNode,
muGraphAddMemcpyNode,
muGraphAddMemsetNode,
muGraphAddMemAtomicValueNode,
muGraphAddMemWaitWriteNode

注意: 这个函数在图操作方面是线程安全的。 有关内存原子操作的详细信息,请参阅 muMemoryAtomicAsync()。

muGraphAddMemAtomicValueNode()

MUresult MUSAAPI muGraphAddMemAtomicValueNode (
MUgraphNode *phGraphNode,
MUgraph hGraph,
const MUgraphNode *dependencies,
size_t numDependencies,
const MUSA_MEM_ATOMIC_VALUE_NODE_PARAMS *memAtomicValueParams,
MUcontext ctx
)

创建一个内存原子值节点并添加到图中。

创建一个新的内存原子值节点并添加到 hGraph 中,通过 dependencies 指定 numDependencies 依赖关系。numDependencies 可以为 0,在这种情况下,节点将被放置在图的根目录下。dependencies 不能有任何重复条目。新节点的句柄将返回在 phGraphNode 中。

当图被启动时,节点将执行由 memAtomicValueParams 描述的内存原子值操作。有关结构的描述,请参阅 muMemoryAtomicValueAsync()

参数

phGraphNode - 返回新创建的节点。
hGraph - 要添加节点的图。
dependencies - 节点的依赖关系。
numDependencies - 依赖关系数量。
memAtomicValueParams - 内存原子值的参数。
ctx - 运行节点的上下文。

返回值

MUSA_SUCCESS,
MUSA_ERROR_DEINITIALIZED,
MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_INVALID_VALUE

另请参阅

muMemoryAtomicValueAsync,
muGraphMemAtomicValueNodeGetParams,
muGraphMemAtomicValueNodeSetParams,
muGraphCreate,
muGraphDestroyNode,
muGraphAddChildGraphNode,
muGraphAddEmptyNode,
muGraphAddKernelNode,
muGraphAddHostNode,
muGraphAddMemcpyNode,
muGraphAddMemsetNode,
muGraphAddMemAtomicNode,
muGraphAddMemWaitWriteNode

muGraphAddMemWaitWriteNode()

MUresult MUSAAPI muGraphAddMemWaitWriteNode (
MUgraphNode *phGraphNode,
MUgraph hGraph,
const MUgraphNode *dependencies,
size_t numDependencies,
const MUSA_MEM_WAIT_WRITE_NODE_PARAMS *memWaitWriteParams,
MUcontext ctx)

创建一个内存等待/写入值节点并添加到图中。

创建一个新的内存等待/写入值节点并添加到 hGraph 中,通过 dependencies 指定 numDependencies 依赖关系。numDependencies 可以为 0,在这种情况下,节点将被放置在图的根目录下。dependencies 不能有任何重复条目。新节点的句柄将返回在 phGraphNode 中。

当图被启动时,节点将执行由 memWaitWriteParams 描述的内存等待/写入值操作。

MUSA_MEM_WAIT_WRITE_NODE_PARAMS 结构定义如下:

typedef struct MUSA_MEM_WAIT_WRITE_NODE_PARAMS_st {
MUdeviceptr addr;
muuint64_t value;
unsigned int flags;
MUstreamBatchMemOpType operation;
} MUSA_MEM_WAIT_WRITE_NODE_PARAMS;

请参阅 MUstreamBatchMemOpType 了解支持的操作的完整集合,并请参阅 muStreamWaitValue32(), muStreamWaitValue64(), muStreamWriteValue32() 和 muStreamWriteValue64() 了解特定操作的详细信息。

参数

phGraphNode - 返回新创建的节点。
hGraph - 要添加节点的图。
dependencies - 节点的依赖关系。
numDependencies - 依赖关系数量。
memWaitWriteParams - 内存等待/写入值的参数。
ctx - 运行节点的上下文。

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

返回值

MUSA_SUCCESS,
MUSA_ERROR_DEINITIALIZED,
MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_INVALID_VALUE

另请参阅

muStreamWaitValue32,
muStreamWaitValue64,
muStreamWriteValue32,
muStreamWriteValue64,
muGraphMemWaitWriteNodeGetParams,
muGraphMemWaitWriteNodeSetParams,
muGraphCreate,
muGraphDestroyNode,
muGraphAddChildGraphNode,
muGraphAddEmptyNode,
muGraphAddKernelNode,
muGraphAddHostNode,
muGraphAddMemcpyNode,
muGraphAddMemsetNode,
muGraphAddMemAtomicNode,
muGraphAddMemAtomicValueNode

muGraphMemAtomicNodeGetParams()

MUresult MUSAAPI muGraphMemAtomicNodeGetParams(
MUgraphNode hNode,
MUSA_MEM_ATOMIC_NODE_PARAMS *nodeParams)

返回内存原子节点的参数。

返回内存原子节点 hNode 的参数在 nodeParams 中。

参数

hNode – 要获取参数的节点
nodeParams – 返回参数的指针

返回值

MUSA_SUCCESS
MUSA_ERROR_DEINITIALIZED
MUSA_ERROR_NOT_INITIALIZED
MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMemoryAtomicAsync
muGraphAddMemAtomicNode
muGraphMemAtomicNodeSetParams

muGraphMemAtomicNodeSetParams()

MUresult MUSAAPI muGraphMemAtomicNodeSetParams(
MUgraphNode hNode,
const MUSA_MEM_ATOMIC_NODE_PARAMS *nodeParams)

设置内存原子节点的参数。

将内存原子节点 hNode 的参数设置为 nodeParams

参数

hNode - 要设置参数的节点
nodeParams - 要复制的参数

返回值

MUSA_SUCCESS
MUSA_ERROR_DEINITIALIZED
MUSA_ERROR_NOT_INITIALIZED
MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMemoryAtomicAsync
muGraphAddMemAtomicNode
muGraphMemAtomicNodeGetParams

muGraphMemAtomicValueNodeGetParams()

MUresult MUSAAPI muGraphMemAtomicValueNodeGetParams(
MUgraphNode hNode,
MUSA_MEM_ATOMIC_VALUE_NODE_PARAMS *nodeParams)

返回内存原子值节点的参数。

返回内存原子值节点 hNode 的参数在 nodeParams 中。

参数

hNode - 要获取参数的节点
nodeParams - 返回参数的指针

返回值

MUSA_SUCCESS
MUSA_ERROR_DEINITIALIZED
MUSA_ERROR_NOT_INITIALIZED
MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMemoryAtomicValueAsync
muGraphAddMemAtomicValueNode
muGraphMemAtomicValueNodeSetParams

muGraphMemAtomicValueNodeSetParams()

MUresult MUSAAPI muGraphMemAtomicValueNodeSetParams(
MUgraphNode hNode,
const MUSA_MEM_ATOMIC_VALUE_NODE_PARAMS *nodeParams)

设置内存原子值节点的参数

将内存原子值节点 hNode 的参数设置为 nodeParams

参数

hNode - 要获取参数的节点
nodeParams - 返回参数的指针

返回值

MUSA_SUCCESS
MUSA_ERROR_DEINITIALIZED
MUSA_ERROR_NOT_INITIALIZED
MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muMemoryAtomicValueAsync
muGraphAddMemAtomicValueNode
muGraphMemAtomicValueNodeGetParams

muGraphMemWaitWriteNodeGetParams()

MUresult MUSAAPI muGraphMemWaitWriteNodeGetParams(
MUgraphNode hNode,
MUSA_MEM_WAIT_WRITE_NODE_PARAMS *nodeParams)

返回内存等待/写入值节点的参数。

返回内存等待/写入值节点 hNode 的参数在 nodeParams 中。

参数

hNode - 要获取参数的节点
nodeParams - 返回参数的指针

返回值

MUSA_SUCCESS
MUSA_ERROR_DEINITIALIZED
MUSA_ERROR_NOT_INITIALIZED
MUSA_ERROR_INVALID_VALUE

注意:``` Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamWaitValue32
muStreamWaitValue64
muStreamWriteValue32
muStreamWriteValue64
muGraphAddMemWaitWriteNode
muGraphMemWaitWriteNodeSetParams

muGraphMemWaitWriteNodeSetParams()

MUresult MUSAAPI muGraphMemWaitWriteNodeSetParams(
MUgraphNode hNode,
const MUSA_MEM_WAIT_WRITE_NODE_PARAMS *nodeParams)

设置内存等待/写入值节点的参数。

将内存等待/写入值节点 hNode 的参数设置为 nodeParams

参数

hNode - 要设置参数的节点
nodeParams - 要复制的参数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_VALUE

注意:

Graph 对象不是线程安全的。

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muStreamWaitValue32, muStreamWaitValue64, muStreamWriteValue32, muStreamWriteValue64,
muGraphAddMemWaitWriteNode, muGraphMemWaitWriteNodeGetParams

muGraphExecMemAtomicNodeSetParams()

MUresult MUSAAPI muGraphExecMemAtomicNodeSetParams(
MUgraphExec hGraphExec,
MUgraphNode hNode,
const MUSA_MEM_ATOMIC_NODE_PARAMS *nodeParams,
MUcontext ctx)

为给定 graphExec 中的内存原子节点设置参数。

更新 hNode 在 hGraphExec 中的工作,就好像 hNode 在实例化时包含了 nodeParams。hNode 必须保留在用于实例化 hGraphExec 的图中。对 hNode 的更改边被忽略。

nodeParams 中的源和目标内存必须从与原始源和目标内存相同的上下文中分配。不支持零长度操作。

修改只影响 hGraphExec 的未来启动。已经入队或正在运行的 hGraphExec 启动不受此调用影响。hNode 也不会被此调用修改。

参数

hGraphExec – 在其中设置指定节点的可执行图
hNode – 来自实例化 hGraphExec 的图的内存原子节点
nodeParams – 要设置的更新参数
ctx – 运行节点的上下文

返回值

MUSA_SUCCESS,
MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddMemAtomicNode,
muGraphMemAtomicNodeSetParams,
muGraphExecKernelNodeSetParams,
muGraphExecMemsetNodeSetParams,
muGraphExecHostNodeSetParams,
muGraphExecChildGraphNodeSetParams,
muGraphExecEventRecordNodeSetEvent,
muGraphExecEventWaitNodeSetEvent,
muGraphExecExternalSemaphoresSignalNodeSetParams,
muGraphExecExternalSemaphoresWaitNodeSetParams,
muGraphExecMemAtomicValueNodeSetParams,
muGraphExecMemWaitWriteNodeSetParams,
muGraphExecUpdate,
muGraphInstantiate

muGraphExecMemAtomicValueNodeSetParams()

MUresult MUSAAPI muGraphExecMemAtomicValueNodeSetParams(
MUgraphExec hGraphExec,
MUgraphNode hNode,
const MUSA_MEM_ATOMIC_VALUE_NODE_PARAMS *nodeParams,
MUcontext ctx)

为给定可执行图中的内存原子值节点设置参数。

更新 hNode 在 hGraphExec 中的工作,就好像 hNode 在实例化时包含了 nodeParamshNode 必须保留在用于实例化 hGraphExec 的图中。 对 hNode 的更改边被忽略。

nodeParams 中的目标内存必须从与原始目标内存相同的上下文中分配。

修改只影响 hGraphExec 的未来启动。已经入队或正在运行的 hGraphExec 启动不受此调用影响。 hNode 也不会被此调用修改。 参数

hGraphExec - 在其中设置指定节点的可执行图
hNode - 来自实例化 graphExec 的图的内存原子值节点
nodeParams - 要设置的更新参数
ctx - 运行节点的上下文

返回值

MUSA_SUCCESS
MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddMemAtomicValueNode
muGraphMemAtomicValueNodeSetParams
muGraphExecKernelNodeSetParams
muGraphExecMemcpyNodeSetParams
muGraphExecHostNodeSetParams
muGraphExecChildGraphNodeSetParams
muGraphExecEventRecordNodeSetEvent
muGraphExecEventWaitNodeSetEvent
muGraphExecExternalSemaphoresSignalNodeSetParams
muGraphExecExternalSemaphoresWaitNodeSetParams
muGraphExecMemAtomicNodeSetParams
muGraphExecMemWaitWriteNodeSetParams
muGraphExecUpdate
muGraphInstantiate

muGraphExecMemWaitWriteNodeSetParams()

MUresult MUSAAPI muGraphExecMemWaitWriteNodeSetParams(
MUgraphExec hGraphExec,
MUgraphNode hNode,
const MUSA_MEM_WAIT_WRITE_NODE_PARAMS *nodeParams,
MUcontext ctx)

为给定可执行图中的内存等待/写入值节点设置参数。

更新 hNodehGraphExec 中的工作,就好像 hNode 在实例化时包含了 nodeParamshNode 必须保留在用于实例化 hGraphExec 的图中。 对 hNode 的更改边被忽略。

nodeParams 中的目标内存必须从与原始目标内存相同的上下文中分配。

修改只影响 hGraphExec 的未来启动。已经入队或正在运行的 hGraphExec 启动不受此调用影响。 hNode 也不会被此调用修改。

参数

hGraphExec - 在其中设置指定节点的可执行图
hNode - 来自实例化 graphExec 的图的内存等待/写入值节点
nodeParams - 要设置的更新参数
ctx - 运行节点的上下文

返回值

MUSA_SUCCESS
MUSA_ERROR_INVALID_VALUE

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddMemWaitWriteNode
muGraphMemWaitWriteNodeSetParams
muGraphExecKernelNodeSetParams
muGraphExecMemcpyNodeSetParams
muGraphExecHostNodeSetParams
muGraphExecChildGraphNodeSetParams
muGraphExecEventRecordNodeSetEvent
muGraphExecEventWaitNodeSetEvent
muGraphExecExternalSemaphoresSignalNodeSetParams
muGraphExecExternalSemaphoresWaitNodeSetParams
muGraphExecMemAtomicNodeSetParams
muGraphExecMemAtomicValueNodeSetParams
muGraphExecUpdate
muGraphInstantiate

muGraphAddNode()

MUresult MUSAAPI muGraphAddNode (
MUgraphNode *phGraphNode,
MUgraph hGraph,
const MUgraphNode *dependencies,
size_t numDependencies,
MUgraphNodeParams *nodeParams)

向图中添加任意类型的节点。

hGraph 中创建一个由 nodeParams 描述的新节点,该节点具有通过 dependencies 指定的 numDependencies 个依赖项。numDependencies 可以为 0。如果 numDependencies 为 0,则 dependencies 可以为 null。dependencies 不能有重复条目。

nodeParams 是一个带标签的联合体。节点类型应在 type 字段中指定,特定于类型的参数在相应的联合体成员中指定。所有未使用的字节(即 reserved0 和已使用联合体成员之后的所有字节)必须设置为零。建议使用大括号初始化或 memset 来确保所有字节都被初始化。

请注意,对于某些节点类型,nodeParams 可能包含在调用过程中被修改的"输出参数",例如 nodeParams->alloc.dptr

新节点的句柄将在 phGraphNode 中返回。

参数

phGraphNode - 返回新创建的节点
hGraph - 要添加节点的图
dependencies - 节点的依赖项
numDependencies - 依赖项数量
nodeParams - 节点规格说明

返回值

MUSA_SUCCESS,
MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_NOT_SUPPORTED

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphCreate,
muGraphNodeSetParams,
muGraphExecNodeSetParams

muGraphNodeSetParams()

MUresult MUSAAPI muGraphNodeSetParams (
MUgraphNode hNode,
MUgraphNodeParams *nodeParams)

更新图节点的参数。

将图节点 hNode 的参数设置为 nodeParamsnodeParams->type 指定的节点类型必须与 hNode 的类型匹配。nodeParams 必须完全初始化,所有未使用的字节(保留、填充)都应清零。

不支持修改 MU_GRAPH_NODE_TYPE_MEM_ALLOCMU_GRAPH_NODE_TYPE_MEM_FREE 类型的节点参数。

参数

hNode - 要设置参数的节点
nodeParams - 要复制的参数

返回值

MUSA_SUCCESS,
MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_NOT_SUPPORTED

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddNode,
muGraphExecNodeSetParams

muGraphExecNodeSetParams()

MUresult MUSAAPI muGraphExecNodeSetParams (
MUgraphExec hGraphExec,
MUgraphNode hNode,
MUgraphNodeParams *nodeParams)

更新已实例化图中的图节点参数。

设置可执行图 hGraphExec 中节点的参数。该节点通过非可执行图中对应的节点 hNode 来标识,可执行图是从该非可执行图中实例化的。hNode 不得从原始图中移除。

修改只影响 hGraphExec 的未来启动。已经入队或正在运行的 hGraphExec 启动不受此调用影响。hNode 也不会被此调用修改。

允许在可执行图上进行的参数更改如下所示:

节点类型允许的更改
kernel参见 ::muGraphExecKernelNodeSetParams
memcpy如果在同一上下文中分配,则可以更改一维复制的地址;参见 ::muGraphExecMemcpyNodeSetParams
memset如果在同一上下文中分配,则可以更改一维内存设置的地址;参见 ::muGraphExecMemsetNodeSetParams
host无限制
子图拓扑结构必须匹配,并且限制递归应用;参见 ::muGraphExecUpdate
事件等待无限制
事件记录无限制
外部信号量信号信号量操作数量不能改变
外部信号量等待信号量操作数量不能改变
内存分配API 不支持
内存释放API 不支持
批量内存操作等待操作的地址、值和操作类型;参见 ::muGraphExecBatchMemOpNodeSetParams

参数

hGraphExec - 在其中更新指定节点的可执行图
hNode - 来自实例化 graphExec 的图的对应节点
nodeParams - 要设置的更新参数

返回值

MUSA_SUCCESS,
MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_NOT_SUPPORTED

注意: Graph 对象不是线程安全的。 此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphAddNode,
muGraphNodeSetParams
muGraphExecUpdate,
muGraphInstantiate

占用率

本节描述了低级MUSA驱动应用程序编程接口的占用率计算函数。

muOccupancyMaxActiveBlocksPerMultiprocessor()

MUresult MUSAAPI muOccupancyMaxActiveBlocksPerMultiprocessor (
int∗ numBlocks,
MUfunction func,
int blockSize,
size_t dynamicSMemSize)

返回函数的占用率。

返回∗ numBlocks 每个流式多处理器上的最大活动块数。

参数

numBlocks - 返回的占用率
func - 计算占用率的核函数
blockSize - 核函数打算启动的块大小
dynamicSMemSize - 每块动态共享内存使用量,单位为字节

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_UNKNOWN

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

musaOccupancyMaxActiveBlocksPerMultiprocessor

muOccupancyMaxActiveBlocksPerMultiprocessorWithFlags()

MUresult MUSAAPI muOccupancyMaxActiveBlocksPerMultiprocessorWithFlags (
int∗ numBlocks,
MUfunction func,
int blockSize,
size_t dynamicSMemSize,
unsigned int flags)

返回函数的占用率。

返回∗ numBlocks 每个流式多处理器上的最大活动块数。

Flags 参数控制特殊情况的处理方式。有效标志包括:

  • MU_OCCUPANCY_DEFAULT,保持muOccupancyMaxActiveBlocksPerMultiprocessor的默认行为;
  • MU_OCCUPANCY_DISABLE_CACHING_OVERRIDE,抑制全局缓存影响占用率的平台的默认行为。在此类平台上,如果启用了缓存,但每块共享内存资源使用量将导致零占用率,占用率计算器将计算好像禁用了缓存的占用率。设置MU_OCCUPANCY_DISABLE_CACHING_OVERRIDE使占用率计算器在这种情况下返回0。有关此功能的更多信息,请参阅Maxwell调优指南的“统一L1/纹理缓存”部分。

参数

numBlocks - 返回的占用率
func - 计算占用率的核函数
blockSize - 核函数打算启动的块大小
dynamicSMemSize - 每块动态共享内存使用量,单位为字节
flags - 占用率计算器的请求行为

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_UNKNOWN

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

musaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags

muOccupancyMaxPotentialBlockSize()

MUresult MUSAAPI muOccupancyMaxPotentialBlockSize (
int∗ minGridSize,
int∗ blockSize,
MUfunction func,
MUoccupancyB2DSize blockSizeToDynamicSMemSize,
size_t dynamicSMemSize,
int blockSizeLimit)

建议具有合理占用率的启动配置。

返回∗ blockSize 一个合理的块大小,可以实现最大占用率(或者,用最少的每多处理器块数实现最大活动warp数),返回∗ minGridSize 实现最大占用率所需的最小网格大小。

如果 blockSize Limit为0,则配置器将使用设备/函数允许的最大块大小。

如果不需要每块动态共享内存分配,则用户应将 blockSize To DynamicSMemSizedynamicSMemSize 都留为0。

如果需要每块动态共享内存分配,如果动态共享内存大小与块大小无关,则应通过 dynamicSMemSize 传递大小, blockSize To DynamicSMemSize 应为NULL。

否则,如果每块动态共享内存大小随不同块大小而变化,用户需要通过 blockSize To DynamicSMemSize 提供一个一元函数,计算func对任何给定块大小所需的动态共享内存。dynamicSMemSize被忽略。示例签名是: // 接受块大小,返回所需的动态共享内存 size_t blockToSmem(int blockSize);

参数

minGridSize - 返回实现最大占用率所需的最小网格大小
blockSize - 返回可以实现最大占用率的最大块大小
func - 计算启动配置的核函数
blockSizeToDynamicSMemSize - 一个函数,根据块大小计算func使用的每块动态共享内存
dynamicSMemSize - 预期的动态共享内存使用量,单位为字节
blockSizeLimit - func设计处理的最大块大小

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_UNKNOWN

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

musaOccupancyMaxPotentialBlockSize

muOccupancyMaxPotentialBlockSizeWithFlags()

MUresult MUSAAPI muOccupancyMaxPotentialBlockSizeWithFlags (
int∗ minGridSize,
int∗ blockSize,
MUfunction func,
MUoccupancyB2DSize blockSizeToDynamicSMemSize,
size_t dynamicSMemSize,
int blockSizeLimit,
unsigned int flags)

建议具有合理占用率的启动配置。

muOccupancyMaxPotentialBlockSize的扩展版本。除了传递给muOccupancyMaxPotentialBlockSize的参数外,muOccupancyMaxPotentialBlockSizeWithFlags还接受一个 Flags 参数。

Flags参数控制特殊情况的处理方式。有效标志包括:

  • MU_OCCUPANCY_DEFAULT,保持muOccupancyMaxPotentialBlockSize的默认行为;
  • MU_OCCUPANCY_DISABLE_CACHING_OVERRIDE,抑制全局缓存影响占用率的平台的默认行为。在此类平台上,产生最大占用率的启动配置可能不支持全局缓存。设置MU_OCCUPANCY_DISABLE_CACHING_OVERRIDE确保产生的启动配置全局缓存兼容,可能以占用率为代价。有关此功能的更多信息,请参阅Maxwell调优指南的“统一L1/纹理缓存”部分。

参数

minGridSize - 返回实现最大占用率所需的最小网格大小
blockSize - 返回可以实现最大占用率的最大块大小
func - 计算启动配置的核函数
blockSizeToDynamicSMemSize - 一个函数,根据块大小计算func使用的每块动态共享内存
dynamicSMemSize - 预期的动态共享内存使用量,单位为字节
blockSizeLimit - func设计处理的最大块大小
flags - 选项

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_UNKNOWN

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

musaOccupancyMaxPotentialBlockSizeWithFlags

muOccupancyAvailableDynamicSMemPerBlock()

MUresult M0USAAPI muOccupancyAvailableDynamicSMemPerBlock (
size_t *dynamicSmemSize,
MUfunction func,
int numBlocks,
int blockSize)

返回在SM上启动 numBlocks 个块时每个块可用的动态共享内存大小。

*dynamicSmemSize 中返回允许每个SM上 numBlocks 个块的最大动态共享内存大小。

注意,该API也可以与无上下文内核 MUkernel 一起使用,通过使用 muLibraryGetKernel() 查询句柄,然后将其转换为 MUfunction 传递给API。在这种情况下,用于计算的上下文将是当前上下文。

参数

dynamicSmemSize - 返回的最大动态共享内存大小
func - 计算占用率的内核函数
numBlocks - 每个SM上要适应的块数
blockSize - 块的大小

返回值

MUSA_SUCCESS,
MUSA_ERROR_DEINITIALIZED,
MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_UNKNOWN

注意: 此函数也可能返回来自先前异步操作的错误码。

muOccupancyMaxPotentialClusterSize()

MUresult MUSAAPI muOccupancyMaxPotentialClusterSize (
int *clusterSize,
MUfunction func,
const MUlaunchConfig *config)

给定内核函数 (func) 和启动配置 (config),在 *clusterSize 中返回最大簇大小。

config 中的簇维度将被忽略。如果 func 设置了必需的簇大小(参见 ::musaFuncGetAttributes / ::muFuncGetAttribute),则 *clusterSize 将反映必需的簇大小。

默认情况下,此函数将始终返回一个在将来硬件上可移植的值。如果内核函数允许非可移植簇大小,则可能返回更高的值。

此函数将遵循编译时启动边界。

注意,该API也可以与无上下文内核 MUkernel 一起使用,通过使用 muLibraryGetKernel() 查询句柄,然后将其转换为 MUfunction 传递给API。在这里,用于计算的上下文将从指定的流 config->hStream 获取,或者在 NULL 流的情况下从当前上下文获取。

参数

clusterSize - 返回给定内核函数和启动配置可以启动的最大簇大小
func - 计算最大簇大小的内核函数
config - 给定内核函数的启动配置

返回值

MUSA_SUCCESS,
MUSA_ERROR_DEINITIALIZED,
MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_UNKNOWN

注意: 此函数也可能返回来自先前异步操作的错误码。

另请参阅

musaFuncGetAttributes,
muFuncGetAttribute

muOccupancyMaxActiveClusters()

MUresult MUSAAPI muOccupancyMaxActiveClusters (
int *numClusters,
MUfunction func,
const MUlaunchConfig *config)

给定内核函数 (func) 和启动配置 (config),在 *numClusters 中返回目标设备上可以共存的最大簇数量。

如果函数已经设置了必需的簇大小(参见 ::musaFuncGetAttributes / ::muFuncGetAttribute),则 config 中的簇大小必须未指定或与必需大小匹配。如果没有必需大小,则必须在 config 中指定簇大小,否则函数将返回错误。

请注意,内核函数的各种属性可能会影响占用率计算。运行时环境可能会影响硬件如何调度簇,因此计算出的占用率不能保证可以实现。

注意,该API也可以与无上下文内核 MUkernel 一起使用,通过使用 muLibraryGetKernel() 查询句柄,然后将其转换为 MUfunction 传递给API。在这里,用于计算的上下文将从指定的流 config->hStream 获取,或者在 NULL 流的情况下从当前上下文获取。

参数

numClusters - 返回目标设备上可以共存的最大簇数量
func - 计算最大簇数量的内核函数
config - 给定内核函数的启动配置

返回值

MUSA_SUCCESS,
MUSA_ERROR_DEINITIALIZED,
MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_INVALID_CLUSTER_SIZE,
MUSA_ERROR_UNKNOWN

注意: 此函数也可能返回来自先前异步操作的错误码。

另请参阅

musaFuncGetAttributes,
muFuncGetAttribute

纹理引用管理 [已弃用]

本节描述了低级MUSA驱动应用程序编程接口的弃用纹理引用管理函数。

muTexRefSetArray()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefSetArray (
MUtexre fhTexRef,
MUarray hArray,
unsigned int Flags)

将数组绑定为纹理引用。

弃用

将MUSA数组 hArray 绑定到纹理引用 hTexRef。此函数取代了与纹理引用相关的任何先前地址或MUSA数组状态。Flags 必须设置为MU_TRSA_OVERRIDE_FORMAT。任何先前绑定到 hTexRef 的MUSA数组都将解绑。

参数

hTexRef - 要绑定的纹理引用
hArray - 要绑定的数组
Flags - 选项(必须是MU_TRSA_OVERRIDE_FORMAT)

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetFilterMode, muTexRefSetFlags,
muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat, musaBindTextureToArray

muTexRefSetMipmappedArray()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefSetMipmappedArray (
MUtexrefhTexRef,
MUmipmappedArrayhMipmappedArray,
unsigned int Flags)

将mipmapped数组绑定到纹理引用。

弃用

将MUSA mipmapped数组 hMipmappedArray 绑定到纹理引用 hTexRef。此函数取代了与纹理引用相关的任何先前地址或MUSA数组状态。Flags 必须设置为MU_TRSA_OVERRIDE_FORMAT。任何先前绑定到 hTexRef 的MUSA数组都将解绑。

参数

hTexRef - 要绑定的纹理引用
hMipmappedArray - 要绑定的mipmapped数组
Flags - 选项(必须是MU_TRSA_OVERRIDE_FORMAT)

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetFilterMode, muTexRefSetFlags,
muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat, musaBindTextureToMipmappedArray

muTexRefSetAddress()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefSetAddress (
size_t∗ ByteOffset,
MUtexref hTexRef,
MUdeviceptr dptr,
size_t bytes)

将地址绑定为纹理引用。

弃用

将线性地址范围绑定到纹理引用 hTexRef。此函数取代了与纹理引用相关的任何先前地址或MUSA数组状态。任何先前绑定到 hTexRef 的内存都将解绑。

由于硬件对纹理基地址有对齐要求,muTexRefSetAddress()返回一个字节偏移量∗ ByteOffset,必须将其应用于纹理获取以从所需内存中读取。此偏移量必须除以texel大小并传递给从纹理读取的内核,以便它们可以应用于tex1Dfetch()函数。

如果设备内存指针是从muMemAlloc()返回的,则偏移量保证为0,可以传递NULL作为 ByteOffset 参数。

线性地址范围内的元素总数(或texels)不能超过MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH。元素数量计算为(bytes/ bytesPerElement),其中bytesPerElement根据使用muTexRefSetFormat()设置的数据格式和分量数量确定。

参数

ByteOffset - 返回的字节偏移量
hTexRef - 要绑定的纹理引用
dptr - 要绑定的设备指针
bytes - 要绑定的内存大小,单位为字节

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFilterMode, muTexRefSetFlags,
muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat, musaBindTexture

muTexRefSetAddress2D()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefSetAddress2D (
MUtexref hTexRef,
const MUSA_ARRAY_DESCRIPTOR∗ desc,
MUdeviceptr dptr,
size_t Pitch)

将地址绑定为2D纹理引用。

弃用

将线性地址范围绑定到纹理引用 hTexRef。此函数取代了与纹理引用相关的任何先前地址或MUSA数组状态。任何先前绑定到 hTexRef 的内存都将解绑。

在内核中使用tex2D()函数需要调用muTexRefSetArray()将相应的纹理引用绑定到数组,或者muTexRefSetAddress2D()将纹理引用绑定到线性内存。

对muTexRefSetFormat()的调用不能跟随对muTexRefSetAddress2D()的调用,对于相同的纹理引用。

需要 dptr 对齐到特定的硬件纹理对齐值。可以使用设备属性MU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT查询此值。如果提供了未对齐的 dptr,将返回MUSA_ERROR_INVALID_VALUE。

Pitch 必须对齐到特定的硬件纹理间距对齐值。此值可以使用设备属性MU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT查询。如果提供了未对齐的 Pitch,将返回MUSA_ERROR_INVALID_VALUE。

宽度和高度,以元素(或texels)指定,不能超过MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH和MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT。Pitch,以字节指定,不能超过MU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH。

参数

hTexRef - 要绑定的纹理引用
desc - MUSA数组的描述符
dptr - 要绑定的设备指针
Pitch - 每行的间距,单位为字节

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFilterMode, muTexRefSetFlags,
muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat, musaBindTexture2D

muTexRefSetFormat()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefSetFormat (
MUtexref hTexRef,
MUarray_format fmt,
int NumPackedComponents)

设置纹理引用的格式。

弃用

指定纹理引用 hTexRef 读取的数据格式。fmtNumPackedComponents 与MUSA_ARRAY_DESCRIPTOR结构的Format和NumChannels成员完全相同:它们指定了每个分量的格式和每个数组元素的分量数量。

参数

hTexRef - 纹理引用
fmt - 要设置的格式
NumPackedComponents - 每个数组元素的分量数量

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFilterMode,
muTexRefSetFlags, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat, musaCreateChannelDesc, musaBindTexture, musaBindTexture2D, musaBind←-
TextureToArray, musaBindTextureToMipmappedArray

muTexRefSetAddressMode()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefSetAddressMode (
MUtexref hTexRef,
int dim,
MUaddress_mode am)

设置纹理引用的寻址模式。

弃用

指定纹理引用 hTexRef 的给定维度 dim 的寻址模式 am。如果 dim 为零,则寻址模式应用于从纹理获取的函数的第一个参数;如果 dim 为1,则为第二个,依此类推。MUaddress_mode定义如下:

typedef enum MUaddress_mode_enum {
MU_TR_ADDRESS_MODE_WRAP = 0,
MU_TR_ADDRESS_MODE_CLAMP = 1,
MU_TR_ADDRESS_MODE_MIRROR = 2,
MU_TR_ADDRESS_MODE_BORDER = 3
} MUaddress_mode;

请注意,如果hTexRef绑定到线性内存,则此调用无效。另外,如果未设置标志MU_TRSF_NORMALIZED_COORDINATES,则唯一支持的寻址模式是MU_TR_ADDRESS_MODE_CLAMP。

参数

hTexRef - 纹理引用
dim - 维度
am - 要设置的寻址模式

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetArray, muTexRefSetFilterMode, muTexRefSetFlags, muTexRefSetFormat,
muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode, muTexRefGetFlags,
muTexRefGetFormat, musaBindTexture, musaBindTexture2D, musaBindTextureToArray, musaBindTextureToMipmapped←-
Array

muTexRefSetFilterMode()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefSetFilterMode (
MUtexref hTexRef,
MUfilter_mode fm)

设置纹理引用的过滤模式。

弃用

指定从纹理引用 hTexRef 读取内存时使用的过滤模式 fm。MUfilter_mode_enum定义如下:

typedef enum MUfilter_mode_enum {
MU_TR_FILTER_MODE_POINT = 0,
MU_TR_FILTER_MODE_LINEAR = 1
} MUfilter_mode;

请注意,如果 hTexRef 绑定到线性内存,则此调用无效。

参数

hTexRef - 纹理引用
fm - 要设置的过滤模式

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFlags,
muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat, musaBindTextureToArray

muTexRefSetMipmapFilterMode()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefSetMipmapFilterMode (
MUtexref hTexRef,
MUfilter_modefm)

设置纹理引用的mipmap过滤模式。

弃用

指定从纹理引用 hTexRef 读取内存时使用的mipmap过滤模式 fm。MUfilter_mode_enum定义如下:

typedef enum MUfilter_mode_enum {
MU_TR_FILTER_MODE_POINT = 0,
MU_TR_FILTER_MODE_LINEAR = 1
} MUfilter_mode;

请注意,如果hTexRef没有绑定到mipmapped数组,则此调用无效。

参数

hTexRef - 纹理引用
fm - 要设置的过滤模式

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFlags,
muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat, musaBindTextureToMipmappedArray

muTexRefSetMipmapLevelBias()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefSetMipmapLevelBias (
MUtexref hTexRef,
float bias)

设置纹理引用的mipmap级别偏置。

弃用

指定从纹理引用 hTexRef 读取内存时要添加到指定mipmap级别的mipmap级别偏置 bias

请注意,如果 hTexRef 没有绑定到mipmapped数组,则此调用无效。

参数

hTexRef - 纹理引用
bias - Mipmap级别偏置

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFlags,
muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat, musaBindTextureToMipmappedArray

muTexRefSetMipmapLevelClamp()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefSetMipmapLevelClamp (
MUtexref hTexRef,
float minMipmapLevelClamp,
float maxMipmapLevelClamp)

设置纹理引用的mipmap最小/最大级别限制。

弃用

指定从纹理引用hTexRef读取内存时要使用的最小/最大mipmap级别限制,分别为minMipmapLevelClampmaxMipmapLevelClamp

请注意,如果 hTexRef 没有绑定到mipmapped数组,则此调用无效。

参数

hTexRef - 纹理引用
minMipmapLevelClamp - Mipmap最小级别限制
maxMipmapLevelClamp - Mipmap最大级别限制

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFlags,
muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat, musaBindTextureToMipmappedArray

muTexRefSetMaxAnisotropy()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefSetMaxAnisotropy (
MUtexrefhTexRef,
unsigned int maxAniso)

设置纹理引用的最大各向异性。

弃用

指定从纹理引用 hTexRef 读取内存时使用的最大各向异性 maxAniso

请注意,如果 hTexRef 绑定到线性内存,则此调用无效。

参数

hTexRef - 纹理引用
maxAniso - 最大各向异性

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFlags,
muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat, musaBindTextureToArray, musaBindTextureToMipmappedArray

muTexRefSetBorderColor()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefSetBorderColor (
MUtexref hTexRef,
float∗ pBorderColor)

设置纹理引用的边框颜色。

弃用

通过 pBorderColor 指定纹理引用 hTexRef 的RGBA颜色值。颜色值仅支持float类型,并按以下顺序保存颜色分量:pBorderColor[0]保存'R'分量pBorderColor[1]保存'G'分量pBorderColor[2]保存'B'分量pBorderColor[3]保存'A'分量

请注意,只有在寻址模式设置为MU_TR_ADDRESS_MODE_BORDER时,才能设置颜色值muTexRefSetAddressMode。使用整数边框颜色值的应用程序需要将其值reinterpret_cast为float。

参数

hTexRef - 纹理引用
pBorderColor - RGBA颜色

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddressMode, muTexRefGetAddressMode, muTexRefGetBorderColor, musaBindTexture, musaBindTexture2D, musa←-
BindTextureToArray, musaBindTextureToMipmappedArray

muTexRefSetFlags()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefSetFlags (
MUtexref hTexRef,
unsigned int Flags)

设置纹理引用的标志。

弃用

通过 Flags 指定可选标志以指定通过纹理引用返回的数据的行为。有效标志包括:

  • MU_TRSF_READ_AS_INTEGER,抑制纹理将整数数据提升到范围[0, 1]的浮点数据的默认行为。请注意,无论是否指定此标志,32位整数格式的纹理都不会被提升;
  • MU_TRSF_NORMALIZED_COORDINATES,抑制纹理坐标范围从[0, Dim)的默认行为,其中Dim是MUSA数组的宽度或高度。相反,纹理坐标[0, 1.0)引用整个数组维度的广度;
  • MU_TRSF_DISABLE_TRILINEAR_OPTIMIZATION,禁用任何三线性过滤优化。三线性优化通过在可以近似预期结果的场景中允许对纹理进行双线性过滤,从而提高纹理过滤性能。

参数

hTexRef - 纹理引用
Flags - 要设置的可选标志

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFilterMode,
muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat, musaBindTexture, musaBindTexture2D, musaBindTextureToArray, musaBind←-
TextureToMipmappedArray

muTexRefGetAddress()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefGetAddress (
MUdeviceptr∗ pdptr,
MUtexref hTexRef )

获取与纹理引用关联的地址。

弃用

返回∗ pdptr 绑定到纹理引用 hTexRef 的基地址,如果纹理引用没有绑定到任何设备内存范围,则返回MUSA_ERROR_INVALID_VALUE。

参数

pdptr - 返回的设备地址
hTexRef - 纹理引用

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFilterMode,
muTexRefSetFlags, muTexRefSetFormat, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode, muTexRefGetFlags,
muTexRefGetFormat

muTexRefGetArray()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefGetArray (
MUarray ∗ phArray,
MUtexref hTexRef )

获取绑定到纹理引用的数组。

弃用

返回∗ phArray 绑定到纹理引用 hTexRef 的MUSA数组,如果纹理引用没有绑定到任何MUSA数组,则返回MUSA_ERROR_INVALID_VALUE。

参数

phArray - 返回的数组
hTexRef - 纹理引用

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFilterMode,
muTexRefSetFlags, muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat

muTexRefGetMipmappedArray()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefGetMipmappedArray (
MUmipmappedArray∗ phMipmappedArray,
MUtexref hTexRef )

获取绑定到纹理引用的mipmapped数组。

弃用

返回∗ phMipmappedArray 绑定到纹理引用 hTexRef 的MUSA mipmapped数组,如果纹理引用没有绑定到任何MUSA mipmapped数组,则返回MUSA_ERROR_INVALID_VALUE。

参数

phMipmappedArray - 返回的mipmapped数组
hTexRef - 纹理引用

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFilterMode,
muTexRefSetFlags, muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat

muTexRefGetAddressMode()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefGetAddressMode (
MUaddress_mode∗ pam,
MUtexref hTexRef,
int dim )

获取纹理引用使用的寻址模式。

弃用

返回∗ pam 纹理引用 hTexRef 对应于维度 dim 的寻址模式。目前, dim 的唯一有效值为0和1。

参数

pam - 返回的寻址模式
hTexRef - 纹理引用
dim - 维度

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFilterMode,
muTexRefSetFlags, muTexRefSetFormat, muTexRefGetAddress, muTexRefGetArray, muTexRefGetFilterMode, muTexRefGetFlags,
muTexRefGetFormat

muTexRefGetFilterMode()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefGetFilterMode (
MUfilter_mode∗ pfm,
MUtexref hTexRef )

获取纹理引用使用的过滤模式。

弃用

返回∗ pfm 纹理引用 hTexRef 的过滤模式。

参数

pfm - 返回的过滤模式
hTexRef - 纹理引用

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFilterMode,
muTexRefSetFlags, muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFlags,
muTexRefGetFormat

muTexRefGetFormat()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefGetFormat (
MUarray_format∗ pFormat,
int∗ pNumChannels,
MUtexref hTexRef )

获取纹理引用使用的格式。

弃用

返回∗ pFormat 和∗ pNumChannels 绑定到纹理引用 hTexRef 的MUSA数组的格式和分量数量。如果 pFormatpNumChannels 为NULL,则将被忽略。

参数

pFormat - 返回的格式
pNumChannels - 返回的分量数量
hTexRef - 纹理引用

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFilterMode,
muTexRefSetFlags, muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray,
muTexRefGetFilterMode, muTexRefGetFlags

muTexRefGetMipmapFilterMode()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefGetMipmapFilterMode (
MUfilter_mode∗ pfm,
MUtexref hTexRef )

获取纹理引用的mipmap过滤模式。

弃用

返回mipmap过滤模式 pfm,该模式在通过纹理引用 hTexRef 读取内存时使用。

参数

pfm - 返回的mipmap过滤模式
hTexRef - 纹理引用

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFlags,
muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat

muTexRefGetMipmapLevelBias()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefGetMipmapLevelBias (
float∗ pbias,
MUtexref hTexRef )

获取纹理引用的mipmap级别偏置。

弃用

返回mipmap级别偏置 pBias,该偏置在通过纹理引用 hTexRef 读取内存时要添加到指定的mipmap级别。

参数

pbias - 返回的mipmap级别偏置
hTexRef - 纹理引用

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFlags,
muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat

muTexRefGetMipmapLevelClamp()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefGetMipmapLevelClamp (
float∗ pminMipmapLevelClamp,
float∗ pmaxMipmapLevelClamp,
MUtexref hTexRef )

获取纹理引用的最小/最大mipmap级别限制。

弃用

返回最小/最大mipmap级别限制 pminMipmapLevelClamppmaxMipmapLevelClamp,这些限制在通过纹理引用 hTexRef 读取内存时使用。

参数

pminMipmapLevelClamp - 返回的mipmap最小级别限制
pmaxMipmapLevelClamp - 返回的mipmap最大级别限制
hTexRef - 纹理引用

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFlags,
muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat

muTexRefGetMaxAnisotropy()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefGetMaxAnisotropy (
int∗ pmaxAniso,
MUtexref hTexRef )

获取纹理引用的最大各向异性。

弃用

返回最大各向异性 pmaxAniso,该值在通过纹理引用 hTexRef 读取内存时使用。

参数

pmaxAniso - 返回的最大各向异性
hTexRef - 纹理引用

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFlags,
muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray, muTexRefGetFilterMode,
muTexRefGetFlags, muTexRefGetFormat

muTexRefGetBorderColor()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefGetBorderColor (
float∗ pBorderColor,
MUtexref hTexRef )

获取纹理引用使用的边框颜色。

弃用

返回 pBorderColor,纹理引用 hTexRef 使用的RGBA颜色值。颜色值类型为float,并按以下顺序保存颜色分量:pBorderColor[0]保存'R'分量pBorderColor[1]保存'G'分量pBorderColor[2]保存'B'分量pBorderColor[3]保存'A'分量

参数

hTexRef - 纹理引用
pBorderColor - 返回的RGBA颜色类型和值

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddressMode, muTexRefSetAddressMode, muTexRefSetBorderColor

muTexRefGetFlags()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefGetFlags (
unsigned int ∗ pFlags,
MUtexref hTexRef )

获取纹理引用使用的标志。

弃用

返回∗ pFlags 纹理引用 hTexRef 的标志。

参数

pFlags - 返回的标志
hTexRef - 纹理引用

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefSetAddress, muTexRefSetAddress2D, muTexRefSetAddressMode, muTexRefSetArray, muTexRefSetFilterMode,
muTexRefSetFlags, muTexRefSetFormat, muTexRefGetAddress, muTexRefGetAddressMode, muTexRefGetArray,
muTexRefGetFilterMode, muTexRefGetFormat

muTexRefCreate()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefCreate (
MUtexref∗ pTexRef )

创建纹理引用。

弃用

创建纹理引用并在∗ pTexRef 中返回其句柄。创建后,应用程序必须调用muTexRefSetArray()或muTexRefSetAddress()将引用与分配的内存关联。其他纹理引用函数用于指定格式和解释(寻址、过滤等)在通过此纹理引用读取内存时要使用。

参数

pTexRef - 返回的纹理引用

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefDestroy

muTexRefDestroy()

__MUSA_DEPRECATED MUresult MUSAAPI muTexRefDestroy (
MUtexrefhTexRef )

销毁纹理引用。

弃用

销毁由 hTexRef 指定的纹理引用。

参数

hTexRef - 要销毁的纹理引用

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muTexRefCreate

表面引用管理 [已弃用]

本节描述了低级MUSA驱动应用程序编程接口的表面引用管理函数。

muSurfRefSetArray()

__MUSA_DEPRECATED MUresult MUSAAPI muSurfRefSetArray (
MUsurfref hSurfRef,
MUarray hArray,
unsigned int Flags)

设置表面引用的MUSA数组。

弃用

将MUSA数组 hArray 设置为由表面引用 hSurfRef 读写。此函数取代了与表面引用相关的任何先前MUSA数组状态。Flags 必须设置为0。必须为MUSA数组设置了MUSA_ARRAY3D_SURFACE_LDST标志。任何先前绑定到 hSurfRef 的MUSA数组都将解绑。

参数

hSurfRef - 表面引用句柄
hArray - MUSA数组句柄
Flags - 设置为0

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muModuleGetSurfRef, muSurfRefGetArray, musaBindSurfaceToArray

muSurfRefGetArray()

__MUSA_DEPRECATED MUresult MUSAAPI muSurfRefGetArray (
MUarray ∗phArray,
MUsurfref hSurfRef)

传回绑定到表面引用的MUSA数组。

弃用

返回∗ phArray 绑定到表面引用 hSurfRef 的MUSA数组,如果表面引用没有绑定到任何MUSA数组,则返回MUSA_ERROR_INVALID_VALUE。

参数

phArray - 表面引用句柄
hSurfRef - 表面引用句柄

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE

另请参阅

muModuleGetSurfRef, muSurfRefSetArray

纹理对象管理

本节描述了低级MUSA驱动应用程序编程接口的纹理对象管理函数。纹理对象API仅支持计算能力3.0或更高的设备。

muTexObjectCreate()

MUresult MUSAAPI muTexObjectCreate (
MUtexObject∗pTexObject,
const MUSA_RESOURCE_DESC∗ pResDesc,
const MUSA_TEXTURE_DESC∗ pTexDesc,
const MUSA_RESOURCE_VIEW_DESC∗ pResViewDesc)

创建纹理对象。

创建纹理对象并返回inpTexObject。pResDesc描述纹理的数据来源。pTexDesc描述数据应该如何被采样。pResViewDesc是可选参数,指定pResDesc描述的数据的替代格式,并描述在纹理化时限制访问的子资源区域。pResViewDesc只能在资源类型是MUSA数组或MUSA mipmapped数组时指定。

纹理对象仅在计算能力3.0或更高的设备上支持。此外,纹理对象是一个不透明值,因此,只能通过MUSA API调用来访问。

MUSA_RESOURCE_DESC结构定义如下:

typedef struct MUSA_RESOURCE_DESC_st
{
MUresourcetype resType;

union {
struct {
MUarray hArray;
} array;
struct {
MUmipmappedArray hMipmappedArray;
} mipmap;
struct {
MUdeviceptr devPtr;
MUarray_format format;
unsigned int numChannels;
size_t sizeInBytes;
} linear;
struct {
MUdeviceptr devPtr;
MUarray_format format;
unsigned int numChannels;
size_t width;
size_t height;
size_t pitchInBytes;
} pitch2D;
} res;

unsigned int flags;
} MUSA_RESOURCE_DESC;

其中:

  • MUSA_RESOURCE_DESCresType指定纹理的资源类型。CUresourceType定义如下:
typedef enum MUresourcetype_enum {
MU_RESOURCE_TYPE_ARRAY = 0x00,
MU_RESOURCE_TYPE_MIPMAPPED_ARRAY = 0x01,
MU_RESOURCE_TYPE_LINEAR = 0x02,
MU_RESOURCE_TYPE_PITCH2D = 0x03
} MUresourcetype;

## 上下文内存访问

本节描述了低级MUSA驱动应用程序编程接口的直接对等上下文内存访问功能。

### muDeviceCanAccessPeer()

```cpp
MUresult MUSAAPI muDeviceCanAccessPeer (
int∗ canAccessPeer,
MUdevice dev,
MUdevice peerDev )

查询一个设备是否可以直接访问对等设备的内存。

如果dev上的上下文能够直接访问peerDev上的内存,则返回canAccessPeer的值为1,否则为0。如果从dev直接访问peerDev是可能的,则可以通过调用muCtxEnablePeerAccess()在两个特定上下文中启用访问。

参数

canAccessPeer - 返回的访问能力
dev - 要从peerDev直接访问分配的设备。
peerDev - 要被dev直接访问分配的设备。

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_DEVICE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxEnablePeerAccess, muCtxDisablePeerAccess, musaDeviceCanAccessPeer

muCtxEnablePeerAccess()

MUresult MUSAAPI muCtxEnablePeerAccess (
MUcontext peerContext,
unsigned int Flags)

启用对等上下文中内存分配的直接访问。

如果当前上下文和peerContext都在支持统一寻址的设备上(可以通过MU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING查询),并且具有相同的主要计算能力,则成功时,peerContext的所有分配将立即被当前上下文访问。有关更多详细信息,请参见统一寻址。

Flags确定是否启用MT-Link和PCIe的聚合路径,MUSA将根据系统MT-Link和PCIe拓扑自适应调整直接访问当前设备和对等设备之间的传输路径比例。

  • MU_PEERACCESS_DEFAULT: 不交错。MUSA选择PCIe或MT-Link路径
  • MU_PEERACCESS_UNIDIR_INTERLEAVED: 在PCIe和MT-Link之间交错。MUSA确定单向算法的自适应交错比例。
  • MU_PEERACCESS_BIDIR_INTERLEAVED: 在PCIe和MT-Link之间交错。MUSA确定双向算法的自适应交错比例。
  • MU_PEERACCESS_HETERO_INTERLEAVED: 在PCIe和MT-Link之间交错。MUSA确定异构算法的自适应交错比例。
  • MU_PEERACCESS_HETERO_BIDIR_INTERLEAVED: 在PCIe和MT-Link之间交错。MUSA确定异构双向算法的自适应交错比例。
  • MU_PEERACCESS_HALF_BIDIR_INTERLEAVED: 在PCIe和MT-Link之间交错。MUSA确定半双向算法的自适应交错比例。
  • MU_PEERACCESS_PCIE_ONLY: 不交错,MUSA强制通过PCIe路径启用对等访问。

请注意,此调用授予的访问是单向的,要访问当前上下文中peerContext的内存,需要单独对称调用muCtxEnablePeerAccess()。

请注意,根据系统配置,每个系统都有设备范围和系统范围的限制,如MUSA编程指南在“Peer-to-Peer Memory Access”部分所述。

如果muDeviceCanAccessPeer()指示当前上下文的MUdevice不能直接访问peerContext的MUdevice的内存,则返回MUSA_ERROR_PEER_ACCESS_UNSUPPORTED。

如果已经启用了从当前上下文直接访问peerContext,则返回MUSA_ERROR_PEER_ACCESS_ALREADY_ENABLED。

如果由于硬件资源耗尽而无法进行直接对等访问,则返回MUSA_ERROR_TOO_MANY_PEERS。

如果没有当前上下文,peerContext不是有效的上下文,或者当前上下文是peerContext,则返回MUSA_ERROR_INVALID_CONTEXT。

如果Flags无效,则返回MUSA_ERROR_INVALID_VALUE。

参数

peerContext - 从当前上下文启用直接访问的对等上下文
Flags - 描述直接访问传输路径的标志

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_PEER_ACCESS_ALREADY_ENABLED,
MUSA_ERROR_TOO_MANY_PEERS, MUSA_ERROR_INVALID_CONTEXT, MUSA_ERROR_PEER_ACCESS_UNSUPPORTED,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceCanAccessPeer, muCtxDisablePeerAccess, musaDeviceEnablePeerAccess

muCtxDisablePeerAccess()

MUresult MUSAAPI muCtxDisablePeerAccess (
MUcontextpeerContext)

禁用对等上下文中内存分配的直接访问并注销任何注册的分配。

如果尚未从peerContext启用到当前上下文的直接对等访问,则返回MUSA_ERROR_PEER_ACCESS_NOT_ENABLED。

如果没有当前上下文,或者peerContext不是有效的上下文,则返回MUSA_ERROR_INVALID_CONTEXT。

参数

peerContext - 要禁用直接访问的对等上下文

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_PEER_ACCESS_NOT_ENABLED,
MUSA_ERROR_INVALID_CONTEXT,

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muDeviceCanAccessPeer, muCtxEnablePeerAccess, musaDeviceDisablePeerAccess

muDeviceGetP2PAttribute()

MUresult MUSAAPI muDeviceGetP2PAttribute (
int∗ value,
MUdevice_P2PAttribute attrib,
MUdevice srcDevice,
MUdevice dstDevice)

查询两个设备之间链路的属性。

返回srcDevicedstDevice之间链路的请求属性attrib的值。支持的属性有:

  • MU_DEVICE_P2P_ATTRIBUTE_PERFORMANCE_RANK: 表示两个设备之间链路性能的相对值。
  • MU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED P2P: 如果启用了P2P访问,则为1。
  • MU_DEVICE_P2P_ATTRIBUTE_NATIVE_ATOMIC_SUPPORTED: 如果支持链路上的原子操作,则为1。
  • MU_DEVICE_P2P_ATTRIBUTE_MUSA_ARRAY_ACCESS_SUPPORTED: 如果可以链路上访问musaArray,则为1。
  • MU_DEVICE_P2P_ATTRIBUTE_MTLINK_PORT_COUNT: 如果通过MTLink传输,则表示MTLink端口计数。

如果srcDevicedstDevice无效,或者它们表示相同的设备,则返回MUSA_ERROR_INVALID_DEVICE。

如果attrib无效,或者value是空指针,则返回MUSA_ERROR_INVALID_VALUE。

参数

value - 返回请求属性的值
attrib - srcDevice和dstDevice之间链路的请求属性。
srcDevice - 目标链路的源设备。
dstDevice - 目标链路的目标设备。

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_DEVICE,
MUSA_ERROR_INVALID_VALUE

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muCtxEnablePeerAccess, muCtxDisablePeerAccess, muDeviceCanAccessPeer, musaDeviceGetP2PAttribute

图形互操作性

本节描述了低级MUSA驱动应用程序编程接口的图形互操作性功能。

muGraphicsUnregisterResource()

MUresult MUSAAPI muGraphicsUnregisterResource (
MUgraphicsResource resource)

注销图形资源以供MUSA访问。

注销图形资源resource,使其不再被MUSA访问,除非再次注册。

如果resource无效,则返回MUSA_ERROR_INVALID_HANDLE。

参数

resource - 要注销的资源

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_UNKNOWN

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

cuGraphicsD3D9RegisterResource, cuGraphicsD3D10RegisterResource, cuGraphicsD3D11RegisterResource, muGraphics←-
GLRegisterBuffer, muGraphicsGLRegisterImage, musaGraphicsUnregisterResource

muGraphicsResourceGetMappedPointer()

MUresult MUSAAPI muGraphicsResourceGetMappedPointer (
MUdeviceptr∗ pDevPtr,
size_t∗ pSize,
MUgraphicsResource resource)

获取设备指针以访问映射的图形资源。

返回pDevPtr,通过该指针可以访问映射的图形资源resource。返回pSize,表示从该指针可以访问的内存大小(以字节为单位)。设置在pPointer的值可能在每次映射resource时都会改变。

如果resource不是缓冲区,则无法通过指针访问,返回MUSA_ERROR_NOT_MAPPED_AS_POINTER。如果resource未映射,则返回MUSA_ERROR_NOT_MAPPED。

参数

pDevPtr - 返回的指针,通过该指针可以访问resource
pSize - 返回的缓冲区大小,从∗pPointer开始
resource - 要访问的映射资源

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_INVALID_CONTEXT, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE,
MUSA_ERROR_NOT_MAPPED, MUSA_ERROR_NOT_MAPPED_AS_POINTER

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphicsMapResources, muGraphicsSubResourceGetMappedArray, musaGraphicsResourceGetMappedPointer

muGraphicsResourceSetMapFlags()

MUresult MUSAAPI muGraphicsResourceSetMapFlags (
MUgraphicsResource resource,
unsigned int flags)

设置映射图形资源的使用标志。

为映射图形资源resource设置flags。

更改flags将在下次映射resource时生效。flags参数可以是以下任何一个:

  • MU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE: 指定没有关于此资源将如何使用的提示。因此,假设此资源将被MUSA内核读取和写入。这是默认值。
  • CU_GRAPHICS_MAP_RESOURCE_FLAGS_READONLY: 指定访问此资源的MUSA内核不会写入此资源。
  • CU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITEDISCARD: 指定访问此资源的MUSA内核不会从此资源读取,并将覆盖整个资源的内容,因此不会保留以前存储在资源中的任何数据。

如果resource当前已映射供MUSA访问,则返回MUSA_ERROR_ALREADY_MAPPED。如果flags不是上述值之一,则返回MUSA_ERROR_INVALID_VALUE。

参数

resource - 注册资源以设置标志
flags - 资源映射参数

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_ALREADY_MAPPED

注意:

此函数也可能返回来自先前异步操作的错误码。

另请参阅

muGraphicsMapResources, musaGraphicsResourceSetMapFlags

muGraphicsMapResources()

MUresult MUSAAPI muGraphicsMapResources (
unsigned int count,
MUgraphicsResource∗ resources,
MUstream hStream )

映射图形资源以供MUSA访问。

映射resources中的count个图形资源以供MUSA访问。

在它们被取消映射之前,resources中的资源可以被MUSA访问。注册resources的图形API在它们被MUSA映射时不应访问任何资源。如果应用程序这样做,结果是未定义的。

此函数提供同步保证,即在muGraphicsMapResources()之前发出的任何图形调用将在stream中发出的任何后续MUSA工作开始之前完成。

如果resources包含任何重复条目,则返回MUSA_ERROR_INVALID_HANDLE。如果任何resources当前已映射供MUSA访问,则返回MUSA_ERROR_ALREADY_MAPPED。

参数

count - 要映射的资源数量
resources - 要映射供MUSA使用的资源
hStream - 要同步的流

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_ALREADY_MAPPED, MUSA_ERROR_UNKNOWN

注意:

此函数也可能返回来自先前异步操作的错误码。 支持使用空流。 另请参阅

muGraphicsResourceGetMappedPointer, muGraphicsSubResourceGetMappedArray, muGraphicsUnmapResources, musaGraphics←-
MapResources

muGraphicsUnmapResources()

MUresult MUSAAPI muGraphicsUnmapResources (
unsigned int count,
MUgraphicsResource∗ resources,
MUstream hStream )

取消映射图形资源。

取消映射resources中的count个图形资源。

一旦取消映射,resources中的资源将无法被MUSA访问,直到它们再次被映射。

此函数提供同步保证,即在stream中发出的任何MUSA工作将在muGraphicsUnmapResources()之前完成,然后才开始发出任何后续的图形工作。

如果resources包含任何重复条目,则返回MUSA_ERROR_INVALID_HANDLE。如果任何resources当前未映射供MUSA访问,则返回MUSA_ERROR_NOT_MAPPED。

参数

count - 要取消映射的资源数量
resources - 要取消映射的资源
hStream - 要同步的流

返回值

MUSA_SUCCESS, MUSA_ERROR_DEINITIALIZED, MUSA_ERROR_NOT_INITIALIZED, MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_HANDLE, MUSA_ERROR_NOT_MAPPED, MUSA_ERROR_UNKNOWN

注意:

此函数也可能返回来自先前异步操作的错误码。 支持使用空流。

另请参阅

muGraphicsMapResources, musaGraphicsUnmapResources

驱动程序入口点访问

本节描述了低级MUSA驱动应用程序编程接口的驱动程序入口点访问功能。

muGetProcAddress()

MUresult MUSAAPI muGetProcAddress (
const char ∗ symbol,
void ∗∗ pfn,
int musaVersion,
muuint64_t flags)

返回请求的驱动程序API函数指针。

返回∗∗pfn,即请求的MUSA版本和标志的MUSA驱动函数的地址。

MUSA版本指定为(1000∗主版本 + 10∗次版本),因此MUSA 11.2应该指定为11020。对于请求的驱动程序符号,如果指定的MUSA版本大于或等于引入驱动程序符号的MUSA版本,则此API将返回相应版本化函数的函数指针。

API返回的指针应该转换为与API头文件中请求的驱动程序函数定义相匹配的函数指针。函数指针typedef可以从相应的typedefs头文件中获取。例如,musaTypedefs.h包含musa.h中定义的驱动程序API的函数指针typedef。

如果请求的驱动程序函数在平台上不受支持,没有与指定musaVersion兼容的ABI驱动程序函数,或者驱动程序符号无效,则API将返回MUSA_ERROR_NOT_FOUND。

请求的标志可以是:

  • MU_GET_PROC_ADDRESS_DEFAULT: 这是默认模式。如果代码使用–default-stream per-thread编译标志编译,或者定义了宏MUSA_API_PER_THREAD_DEFAULT_STREAM,则等同于MU_GET_PROC_ADDRESS_PER_THREAD_DEFAULT_STREAM;否则为MU_GET_PROC_ADDRESS_LEGACY_STREAM。
  • MU_GET_PROC_ADDRESS_LEGACY_STREAM: 这将启用搜索所有与请求的驱动程序符号名称匹配的驱动程序符号,除了相应的每个线程版本。
  • MU_GET_PROC_ADDRESS_PER_THREAD_DEFAULT_STREAM: 这将启用搜索所有与请求的驱动程序符号名称匹配的驱动程序符号,包括每个线程的版本。如果找不到每个线程的版本,API将返回驱动程序函数的旧版本。

参数

symbol - 要查找的驱动程序API函数的基本名称。例如,对于驱动程序API muMemAlloc_v2,`symbol`
将是muMemAlloc,`musaVersion`将是_v2变体的ABI兼容MUSA版本。
pfn - 返回请求的驱动程序函数的函数指针的位置
musaVersion - 要查找请求的驱动程序符号的MUSA版本。
flags - 指定搜索选项的标志。

返回值

MUSA_SUCCESS, MUSA_ERROR_INVALID_VALUE, MUSA_ERROR_NOT_SUPPORTED, MUSA_ERROR_NOT_FOUND

注意: 此函数涉及 API 版本混用风险。 另请参阅

musaGetDriverEntryPoint

内存原子管理

本节描述了低级MUSA驱动应用程序编程接口的内存原子管理功能。

muMemoryAtomicAsync()

执行从设备内存到设备内存的内存原子操作。dstsrc分别是目标和源的基指针。elementCount指定要执行内存原子的元素数量。

MUresult MUSAAPI muMemoryAtomicAsync (
MUdeviceptr dst,
MUdeviceptr src,
size_t elementCount,
MUatomicType operation,
MUstream hStream
)

参数

dst - 目标设备指针。
src - 源设备指针。
elementCount - 内存原子的大小,以元素为单位。
operation - 指定要执行的原子操作,包括元素大小。见MUatomicType。
hStream - 流标识符。

返回值

MUSA_SUCCESS,
MUSA_ERROR_DEINITIALIZED,
MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_INVALID_HANDLE

注意:

此函数是异步的。

支持使用空流。

另请参阅

muMemoryAtomicValueAsync()

对64位值的设备内存范围执行内存原子值操作。

MUresult MUSAAPI muMemoryAtomicValueAsync (
MUdeviceptr dst,
muuint64_t value,
MUatomicValueType operation,
MUstream hStream
)

参数

dst - 目标设备指针。
src - 源设备指针。
elementCount - 内存原子的大小,以元素为单位。
operation - 指定要执行的原子操作,包括元素大小。见MUatomicType。
hStream - 流标识符。

返回值

MUSA_SUCCESS,
MUSA_ERROR_DEINITIALIZED,
MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_INVALID_HANDLE

注意:

此函数是异步的。

支持使用空流。

muCoredumpGetAttribute()

MUresult MUSAAPI muCoredumpGetAttribute (
MUcoredumpSettings attrib,
void* value,
size_t *size)

允许调用者获取当前上下文的核心转储属性值。

*value 中返回由 attrib 指定的请求值。调用者需要确保 *value 的数据类型和大小与请求匹配。

如果调用者使用 *value 等于 NULL 调用此函数,则 attrib 所需的内存区域大小(以字节为单位)将放在 size 中。

支持的属性包括:

  • MU_COREDUMP_ENABLE_ON_EXCEPTION:布尔值,其中 true 表示来自此上下文的 GPU 异常将在 MU_COREDUMP_FILE 指定的位置创建核心转储。默认值为 false,除非全局或本地设置为 true,或在上下文创建期间设置了 MU_CTX_USER_COREDUMP_ENABLE 标志。
  • MU_COREDUMP_TRIGGER_HOST:布尔值,其中 true 表示主机 CPU 也将创建核心转储。默认值为 true,除非全局或本地设置为 false。此值在 MUSA 12.5 中已弃用 - 如需禁用主机设备 abort(),请设置 MU_COREDUMP_SKIP_ABORT 标志。
  • MU_COREDUMP_LIGHTWEIGHT:布尔值,其中 true 表示任何生成的核心转储将不包含 GPU 内存或非重定位 ELF 映像的转储。默认值为 false,除非全局或本地设置为 true。此属性在 MUSA 12.5 中已弃用,请改用 MU_COREDUMP_GENERATION_FLAGS。
  • MU_COREDUMP_ENABLE_USER_TRIGGER:布尔值,其中 true 表示可以通过写入 MU_COREDUMP_PIPE 指定的系统管道来创建核心转储。默认值为 false,除非全局或本地设置为 true。
  • MU_COREDUMP_FILE:最多 1023 个字符的字符串,定义由此上下文生成的任何核心转储将被写入的位置。默认值为 core.musa.HOSTNAME.PID,其中 HOSTNAME 是运行 MUSA 应用程序的机器的主机名,PID 是 MUSA 应用程序的进程 ID。
  • MU_COREDUMP_PIPE:最多 1023 个字符的字符串,定义启用用户触发的核心转储时将被监视的管道名称。默认值为 corepipe.musa.HOSTNAME.PID,其中 HOSTNAME 是运行 MUSA 应用程序的机器的主机名,PID 是 MUSA 应用程序的进程 ID。
  • MU_COREDUMP_GENERATION_FLAGS:一个整数,其值允许通过以下值的按位或组合来精细控制核心转储中包含的数据:
    • MU_COREDUMP_DEFAULT_FLAGS - 如果单独设置,核心转储生成将返回到其默认设置,包括所有能够访问的内存区域
    • MU_COREDUMP_SKIP_NONRELOCATED_ELF_IMAGES - 核心转储将不包括未在运行时重定位的 MUSA 源模块的数据
    • MU_COREDUMP_SKIP_GLOBAL_MEMORY - 核心转储将不包括不属于任何上下文的设备端全局数据
    • MU_COREDUMP_SKIP_SHARED_MEMORY - 核心转储将不包括转储内核所属的 warp 的网格级共享内存
    • MU_COREDUMP_SKIP_LOCAL_MEMORY - 核心转储将不包括内核的本地内存
    • MU_COREDUMP_LIGHTWEIGHT_FLAGS - 启用上述所有选项。等同于将 MU_COREDUMP_LIGHTWEIGHT 属性设置为 true
    • MU_COREDUMP_SKIP_ABORT - 如果设置,GPU 异常不会在主机 CPU 进程中引发 abort()。与 MU_COREDUMP_TRIGGER_HOST 功能目标相同,但更好地反映了默认行为

参数

attrib - 定义要获取哪个值的枚举
value - 包含请求数据的 void*
size - value 指向的内存区域的大小

返回值

MUSA_SUCCESS,
MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_NOT_PERMITTED,
MUSA_ERROR_DEINITIALIZED,
MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_CONTEXT_IS_DESTROYED

另请参阅

muCoredumpGetAttributeGlobal,
muCoredumpSetAttribute,
muCoredumpSetAttributeGlobal

muCoredumpGetAttributeGlobal()

MUresult MUSAAPI muCoredumpGetAttributeGlobal (
MUcoredumpSettings attrib,
void* value,
size_t *size)

允许调用者获取整个应用程序的核心转储属性值。

*value 中返回由 attrib 指定的请求值。调用者需要确保 *value 的数据类型和大小与请求匹配。

如果调用者使用 *value 等于 NULL 调用此函数,则 attrib 所需的内存区域大小(以字节为单位)将放在 size 中。

支持的属性包括:

  • MU_COREDUMP_ENABLE_ON_EXCEPTION:布尔值,其中 true 表示来自此上下文的 GPU 异常将在 MU_COREDUMP_FILE 指定的位置创建核心转储。默认值为 false。
  • MU_COREDUMP_TRIGGER_HOST:布尔值,其中 true 表示主机 CPU 也将创建核心转储。默认值为 true,除非全局或本地设置为 false。此值在 MUSA 12.5 中已弃用 - 如需禁用主机设备 abort(),请设置 MU_COREDUMP_SKIP_ABORT 标志。
  • MU_COREDUMP_LIGHTWEIGHT:布尔值,其中 true 表示任何生成的核心转储将不包含 GPU 内存或非重定位 ELF 映像的转储。默认值为 false。此属性在 MUSA 12.5 中已弃用,请改用 MU_COREDUMP_GENERATION_FLAGS。
  • MU_COREDUMP_ENABLE_USER_TRIGGER:布尔值,其中 true 表示可以通过写入 MU_COREDUMP_PIPE 指定的系统管道来创建核心转储。默认值为 false。
  • MU_COREDUMP_FILE:最多 1023 个字符的字符串,定义由此上下文生成的任何核心转储将被写入的位置。默认值为 core.musa.HOSTNAME.PID,其中 HOSTNAME 是运行 MUSA 应用程序的机器的主机名,PID 是 MUSA 应用程序的进程 ID。
  • MU_COREDUMP_PIPE:最多 1023 个字符的字符串,定义启用用户触发的核心转储时将被监视的管道名称。默认值为 corepipe.musa.HOSTNAME.PID,其中 HOSTNAME 是运行 MUSA 应用程序的机器的主机名,PID 是 MUSA 应用程序的进程 ID。
  • MU_COREDUMP_GENERATION_FLAGS:一个整数,其值允许通过以下值的按位或组合来精细控制核心转储中包含的数据:
    • MU_COREDUMP_DEFAULT_FLAGS - 如果单独设置,核心转储生成将返回到其默认设置,包括所有能够访问的内存区域
    • MU_COREDUMP_SKIP_NONRELOCATED_ELF_IMAGES - 核心转储将不包括未在运行时重定位的 MUSA 源模块的数据
    • MU_COREDUMP_SKIP_GLOBAL_MEMORY - 核心转储将不包括不属于任何上下文的设备端全局数据
    • MU_COREDUMP_SKIP_SHARED_MEMORY - 核心转储将不包括转储内核所属的 warp 的网格级共享内存
    • MU_COREDUMP_SKIP_LOCAL_MEMORY - 核心转储将不包括内核的本地内存
    • MU_COREDUMP_LIGHTWEIGHT_FLAGS - 启用上述所有选项。等同于将 MU_COREDUMP_LIGHTWEIGHT 属性设置为 true
    • MU_COREDUMP_SKIP_ABORT - 如果设置,GPU 异常不会在主机 CPU 进程中引发 abort()。与 MU_COREDUMP_TRIGGER_HOST 功能目标相同,但更好地反映了默认行为

参数

attrib - 定义要获取哪个值的枚举
value - 包含请求数据的 void*
size - value 指向的内存区域的大小

返回值

MUSA_SUCCESS,
MUSA_ERROR_INVALID_VALUE

另请参阅

muCoredumpGetAttribute,
muCoredumpSetAttribute,
muCoredumpSetAttributeGlobal

muCoredumpSetAttribute()

MUresult MUSAAPI muCoredumpSetAttribute (
MUcoredumpSettings attrib,
void* value,
size_t *size)

允许调用者为当前上下文设置核心转储属性值。

此函数应被视为本文档中定义的MUSA-GDB环境变量的替代接口:https://docs.mthreads.com/musa/musa-gdb/index.html#gpu-coredump

需要注意的一个重要设计决策是,MUSA初始化之前设置的任何核心转储环境变量值将永久优先于使用此函数设置的任何值。做出此决策是为了确保对于可能当前正在使用这些变量获取核心转储的用户不会发生行为更改。

*value应包含由set指定的请求值。调用者需要确保*value的数据类型和大小与请求匹配。

如果调用者使用*value等于NULL调用此函数,则set所需的内存区域大小(以字节为单位)将放在size中。

注意:如果调用者尝试在计算能力<6.0的GPU上设置MU_COREDUMP_ENABLE_ON_EXCEPTION,此函数将返回MUSA_ERROR_NOT_SUPPORTED。muCoredumpSetAttributeGlobal可作为这些平台上的替代方案。

注意:MU_COREDUMP_ENABLE_USER_TRIGGER和MU_COREDUMP_PIPE不能按上下文设置。

支持的属性包括:

  • MU_COREDUMP_ENABLE_ON_EXCEPTION:布尔值,其中true表示来自此上下文的GPU异常将在MU_COREDUMP_FILE指定的位置创建核心转储。默认值为false。
  • MU_COREDUMP_TRIGGER_HOST:布尔值,其中true表示主机CPU也将创建核心转储。默认值为true,除非全局或本地设置为false。此值在MUSA 12.5中已弃用-如需禁用主机设备abort(),请设置MU_COREDUMP_SKIP_ABORT标志。
  • MU_COREDUMP_LIGHTWEIGHT:布尔值,其中true表示任何生成的核心转储将不包含GPU内存或非重定位ELF映像的转储。默认值为false。此属性在MUSA 12.5中已弃用,请改用MU_COREDUMP_GENERATION_FLAGS。
  • MU_COREDUMP_FILE:最多1023个字符的字符串,定义由此上下文生成的任何核心转储将被写入的位置。默认值为core.musa.HOSTNAME.PID,其中HOSTNAME是运行MUSA应用程序的机器的主机名,PID是MUSA应用程序的进程ID。
  • MU_COREDUMP_GENERATION_FLAGS:一个整数,其值允许通过以下值的按位或组合来精细控制核心转储中包含的数据:
    • MU_COREDUMP_DEFAULT_FLAGS - 如果单独设置,核心转储生成将返回到其默认设置,包括所有能够访问的内存区域
    • MU_COREDUMP_SKIP_NONRELOCATED_ELF_IMAGES - 核心转储将不包括未在运行时重定位的MUSA源模块的数据
    • MU_COREDUMP_SKIP_GLOBAL_MEMORY - 核心转储将不包括不属于任何上下文的设备端全局数据
    • MU_COREDUMP_SKIP_SHARED_MEMORY - 核心转储将不包括转储内核所属的warp的网格级共享内存
    • MU_COREDUMP_SKIP_LOCAL_MEMORY - 核心转储将不包括内核的本地内存
    • MU_COREDUMP_LIGHTWEIGHT_FLAGS - 启用上述所有选项。等同于将MU_COREDUMP_LIGHTWEIGHT属性设置为true
    • MU_COREDUMP_SKIP_ABORT - 如果设置,GPU异常不会在主机CPU进程中引发abort()。与MU_COREDUMP_TRIGGER_HOST功能目标相同,但更好地反映了默认行为

参数

attrib - 定义要设置哪个值的枚举
value - 包含请求数据的void*
size - value指向的内存区域的大小

返回值

MUSA_SUCCESS,
MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_NOT_PERMITTED,
MUSA_ERROR_DEINITIALIZED,
MUSA_ERROR_NOT_INITIALIZED,
MUSA_ERROR_INVALID_CONTEXT,
MUSA_ERROR_CONTEXT_IS_DESTROYED,
MUSA_ERROR_NOT_SUPPORTED

另请参阅

muCoredumpGetAttributeGlobal,
muCoredumpGetAttribute,
muCoredumpSetAttributeGlobal

muCoredumpSetAttributeGlobal()

MUresult MUSAAPI muCoredumpSetAttributeGlobal (
MUcoredumpSettings attrib,
void* value,
size_t *size)

允许调用者全局设置核心转储属性值。

此函数应被视为本文档中定义的MUSA-GDB环境变量的替代接口:https://docs.mthreads.com/musa/musa-gdb/index.html#gpu-coredump

需要注意的一个重要设计决策是,MUSA初始化之前设置的任何核心转储环境变量值将永久优先于使用此函数设置的任何值。做出此决策是为了确保对于可能当前正在使用这些变量获取核心转储的用户不会发生行为更改。

*value应包含由set指定的请求值。调用者需要确保*value的数据类型和大小与请求匹配。

如果调用者使用*value等于NULL调用此函数,则set所需的内存区域大小(以字节为单位)将放在size中。

支持的属性包括:

  • MU_COREDUMP_ENABLE_ON_EXCEPTION:布尔值,其中true表示来自此上下文的GPU异常将在MU_COREDUMP_FILE指定的位置创建核心转储。默认值为false。
  • MU_COREDUMP_TRIGGER_HOST:布尔值,其中true表示主机CPU也将创建核心转储。默认值为true,除非全局或本地设置为false。此值在MUSA 12.5中已弃用-如需禁用主机设备abort(),请设置MU_COREDUMP_SKIP_ABORT标志。
  • MU_COREDUMP_LIGHTWEIGHT:布尔值,其中true表示任何生成的核心转储将不包含GPU内存或非重定位ELF映像的转储。默认值为false。此属性在MUSA 12.5中已弃用,请改用MU_COREDUMP_GENERATION_FLAGS。
  • MU_COREDUMP_ENABLE_USER_TRIGGER:布尔值,其中true表示可以通过写入MU_COREDUMP_PIPE指定的系统管道来创建核心转储。默认值为false。
  • MU_COREDUMP_FILE:最多1023个字符的字符串,定义由此上下文生成的任何核心转储将被写入的位置。默认值为core.musa.HOSTNAME.PID,其中HOSTNAME是运行MUSA应用程序的机器的主机名,PID是MUSA应用程序的进程ID。
  • MU_COREDUMP_PIPE:最多1023个字符的字符串,定义启用用户触发的核心转储时将被监视的管道名称。在MU_COREDUMP_ENABLE_USER_TRIGGER设置为true后,此值可能无法更改。默认值为corepipe.musa.HOSTNAME.PID,其中HOSTNAME是运行MUSA应用程序的机器的主机名,PID是MUSA应用程序的进程ID。
  • MU_COREDUMP_GENERATION_FLAGS:一个整数,其值允许通过以下值的按位或组合来精细控制核心转储中包含的数据:
    • MU_COREDUMP_DEFAULT_FLAGS - 如果单独设置,核心转储生成将返回到其默认设置,包括所有能够访问的内存区域
    • MU_COREDUMP_SKIP_NONRELOCATED_ELF_IMAGES - 核心转储将不包括未在运行时重定位的MUSA源模块的数据
    • MU_COREDUMP_SKIP_GLOBAL_MEMORY - 核心转储将不包括不属于任何上下文的设备端全局数据
    • MU_COREDUMP_SKIP_SHARED_MEMORY - 核心转储将不包括转储内核所属的warp的网格级共享内存
    • MU_COREDUMP_SKIP_LOCAL_MEMORY - 核心转储将不包括内核的本地内存
    • MU_COREDUMP_LIGHTWEIGHT_FLAGS - 启用上述所有选项。等同于将MU_COREDUMP_LIGHTWEIGHT属性设置为true
    • MU_COREDUMP_SKIP_ABORT - 如果设置,GPU异常不会在主机CPU进程中引发abort()。与MU_COREDUMP_TRIGGER_HOST功能目标相同,但更好地反映了默认行为

参数

attrib - 定义要设置哪个值的枚举
value - 包含请求数据的void*
size - value指向的内存区域的大小

返回值

MUSA_SUCCESS,
MUSA_ERROR_INVALID_VALUE,
MUSA_ERROR_NOT_PERMITTED

另请参阅

muCoredumpGetAttribute,
muCoredumpGetAttributeGlobal,
muCoredumpSetAttribute

类文档

MUaccessPolicyWindow_st 结构体参考

指定窗口的访问策略,窗口是一段连续的内存范围,从base_ptr开始,到base_ptr + num_bytes结束。

num_bytes受到MU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE的限制。将多个段划分并分配给段,使得:击中段的总和 / 窗口 ≈ ratio。未击中段的总和 / 窗口 ≈ 1-ratio。段和比例规范适合于架构的能力。在击中段中的访问应用hitProp访问策略。在未击中段中的访问应用missProp访问策略。

base_ptr

void∗MUaccessPolicyWindow_stbase_ptr

访问策略窗口的起始地址。

MUSA驱动程序可能会对其进行对齐。

num_bytes

size_t MUaccessPolicyWindow_stnum_bytes

窗口策略的字节大小。

MUSA驱动程序可能会限制最大大小和对齐。

hitRatio

float MUaccessPolicyWindow_sthitRatio

hitRatio指定分配给hitProp的行的百分比,其余的分配给missProp。

hitProp

MUaccessProperty MUaccessPolicyWindow_sthitProp

为击中设置的MUaccessProperty。

missProp

MUaccessProperty MUaccessPolicyWindow_stmissProp

为未击中设置的MUaccessProperty。

必须是NORMAL或STREAMING之一

MUarrayMapInfo_st 结构体参考

指定MUSA数组或MUSA mipmapped数组的内存映射信息。

  • MUresourcetype resourceType 资源类型。

  • union {
    MUmipmappedArray mipmap
    MUarray array
    } resource
  • MUarraySparseSubresourceType subresourceType 稀疏子资源类型。

  • union {
    struct {
    unsigned int level
    对于MUSA mipmapped数组,必须是有效的mipmap级别。
    unsigned int layer
    对于MUSA分层数组,必须是有效的层索引。
    unsigned int offsetX
    起始X偏移量,以元素为单位。
    unsigned int offsetY
    起始Y偏移量,以元素为单位。
    unsigned int offsetZ
    起始Z偏移量,以元素为单位。
    unsigned int extentWidth
    宽度,以元素为单位。
    unsigned int extentHeight
    高度,以元素为单位。
    unsigned int extentDepth
    深度,以元素为单位。
    } sparseLevel
    struct {
    unsigned int layer
    对于MUSA分层数组,必须是有效的层索引。
    unsigned long long offset
    在mip尾中的偏移量。
    unsigned long long size
    范围,以字节为单位。
    } miptail
    } subresource
  • MUmemOperationType memOperationType 内存操作类型。

  • MUmemHandleType memHandleType 内存句柄类型。

  • union {
    MUmemGenericAllocationHandle memHandle
    } memHandle
  • unsigned int deviceBitMask 设备序数位掩码。

  • unsigned int flags 将来使用的标记,现在必须为零。

  • unsigned int reserved [2] 将来使用的保留项,现在必须为零。

MUconvParamer_st 结构体参考

  • int params [3]

MUdevprop_st 结构体参考

  • int maxThreadsPerBlock 每个块的最大线程数。
  • int maxThreadsDim [3] 每个维度块的最大大小。
  • int maxGridSize [3] 每个维度网格的最大大小。
  • int sharedMemPerBlock 每个块可用的共享内存大小,以字节为单位。
  • int totalConstantMemory 设备上可用的常量内存大小,以字节为单位。
  • int SIMDWidth 线程中的Warp大小。
  • int memPitch 内存复制允许的最大间距,以字节为单位。
  • int regsPerBlock 每个块可用的32位寄存器数量
  • int clockRate 时钟频率,以千赫兹为单位。
  • int textureAlign 纹理的对齐要求。

MUdirectConvParamer_st 结构体参考

  • char bytes [32]

MUexecAffinityParam_st 结构体参考

执行亲和性参数。

  • MUexecAffinityType type
  • union {
    MUexecAffinitySmCount smCount
    } param

MUexecAffinitySmCount_st 结构体参考

MU_EXEC_AFFINITY_TYPE_SM_COUNT的值。

  • unsigned int val 上下文限制使用的SM数量。

MUipcEventHandle_st 结构体参考

MUSA IPC事件句柄。

  • char reserved [MU_IPC_HANDLE_SIZE]

MUipcMemHandle_st 结构体参考

MUSA IPC内存句柄。

  • char reserved [MU_IPC_HANDLE_SIZE]

MUkernelNodeAttrValue_union 联合参考

图内核节点属性联合,与cuKernelNodeSetAttribute/cuKernelNodeGetAttribute一起使用。

  • MUaccessPolicyWindow accessPolicyWindow

    属性MUaccessPolicyWindow。

  • int cooperative

    非零表示协同内核(见muLaunchCooperativeKernel)。

MUlaunchAttribute_st 结构体参考

  • MUlaunchAttributeID id
  • char pad [8 - sizeof(MUlaunchAttributeID)]
  • MUlaunchAttributeValue value

MUlaunchAttributeValue_union 联合参考

  • char pad [64]

    填充到64字节。

  • MUaccessPolicyWindow accessPolicyWindow

    属性MUaccessPolicyWindow。

  • int cooperative

    非零表示协同内核(见muLaunchCooperativeKernel)。

  • MUsynchronizationPolicy syncPolicy

    此流中排队的工作的MUsynchronizationPolicy

  • struct {
    unsigned int x
    unsigned int y
    unsigned int z
    } clusterDim

内核节点的集群维度。

  • MUclusterSchedulingPolicy clusterSchedulingPolicyPreference

    内核节点的集群调度策略偏好。

  • int programmaticStreamSerializationAllowed

  • struct {
    MUevent event
    int flags
    int triggerAtBlockStart
    } programmaticEvent
  • int priority

    内核的执行优先级。

  • MUlaunchMemSyncDomainMap memSyncDomainMap

  • MUlaunchMemSyncDomain memSyncDomain

MUlaunchConfig_st 结构体参考

  • unsigned int gridDimX

    网格的宽度,以块为单位。

  • unsigned int gridDimY

    网格的高度,以块为单位。

  • unsigned int gridDimZ

    网格的深度,以块为单位。

  • unsigned int blockDimX

    每个线程块的X维度。

  • unsigned int blockDimY

    每个线程块的Y维度。

  • unsigned int blockDimZ

    每个线程块的Z维度。

  • unsigned int sharedMemBytes

    每个线程块的动态共享内存大小,以字节为单位。

  • MUstream hStream

    流标识符。

  • MUlaunchAttribute∗attrs

    如果numAttrs == 0,则可以为空

  • unsigned int numAttrs

    在attrs中填充的属性数量

MUlaunchMemSyncDomainMap_st 结构体参考

  • unsigned char default_
  • unsigned char remote

MUmemAccessDesc_st 结构体参考

内存访问描述符。

  • MUmemLocation location

    请求更改其可访问性的位置上。

  • MUmemAccess_flags flags

    要设置在请求上的CUmemProt可访问性标志

MUmemAllocationProp_st 结构体参考

指定分配的分配属性。

  • MUmemAllocationType type

    分配类型。

  • MUmemAllocationHandleType requestedHandleTypes

    请求的MUmemAllocationHandleType

  • MUmemLocation location

    分配的位置。

  • void ∗win32HandleMetaData

    Windows特定的POBJECT_ATTRIBUTES,当指定MU_MEM_HANDLE_TYPE_WIN32时需要。此对象属性结构包括定义导出分配可以传输到其他进程的范围的安全属性。在所有其他情况下,此字段必须为零。

  • struct {
    unsigned char compressionType
    /**
    * 分配提示,请求可压缩内存。
    * 在支持计算数据压缩的设备上,可压缩内存可用于加速访问具有非结构化稀疏度和其他可压缩数据模式的数据。应用程序应该使用muMemGetAllocationPropertiesFromHandle查询获得的句柄的分配属性,以验证获得的分配是否可压缩。请注意,压缩内存可能不是所有设备上都可以映射。
    */

    unsigned char gpuDirectRDMACapable
    unsigned short usage
    指示此分配的预期用途的位掩码。
    unsigned char reserved [4]
    } allocFlags

MUmemLocation_st 结构体参考

指定内存位置。

  • MUmemLocationType type

    指定位置类型,这会修改id的含义。

  • int id

    给定此位置的MUmemLocationType的标识符。

MUmemPoolProps_st 结构体参考

指定从池中分配的属性。

  • MUmemAllocationType allocType

    分配类型。目前必须指定为MU_MEM_ALLOCATION_TYPE_PINNED

  • MUmemAllocationHandleType handleTypes

    池分配支持的句柄类型。

  • MUmemLocation location

    分配应该位于的位置。

  • void∗win32SecurityAttributes

    Windows特定的LPSECURITYATTRIBUTES,当指定MU_MEM_HANDLE_TYPE_WIN32时需要。此安全属性定义导出分配可以传输到其他进程的范围。在所有其他情况下,此字段必须为零。

  • unsigned char reserved [64] 保留供将来使用,必须为0

MUmemPoolPtrExportData_st 结构体参考

导出池分配的不透明数据。

  • unsigned char reserved [64]

MUSA_ARRAY3D_DESCRIPTOR_st 结构体参考

3D数组描述符

  • size_t Width

    3D数组的宽度。

  • size_t Height

    3D数组的高度。

  • size_t Depth

    3D数组的深度。

  • MUarray_format Format

    数组格式。

  • unsigned int NumChannels

    每个数组元素的通道数。

  • unsigned int Flags

    标志。

MUSA_ARRAY_DESCRIPTOR_st 结构体参考

数组描述符。

  • size_t Width

    数组的宽度。

  • size_t Height

    数组的高度。

  • MUarray_format Format

    数组格式。

  • unsigned int NumChannels

    每个数组元素的通道数。

MUSA_ARRAY_SPARSE_PROPERTIES_st 结构体参考

MUSA数组稀疏属性。

  • struct {
    unsigned int width
    稀疏瓦片的宽度,以元素为单位。
    unsigned int height
    稀疏瓦片的高度,以元素为单位。
    unsigned int depth
    稀疏瓦片的深度,以元素为单位。
    } tileExtent
  • unsigned int miptailFirstLevel mip尾开始的第一个mip级别。
  • unsigned long long miptailSize mip尾的总大小。
  • unsigned int flags 标志将为零或MU_ARRAY_SPARSE_PROPERTIES_SINGLE_MIPTAIL。
  • unsigned int reserved [4]

MUSA_EXT_SEM_SIGNAL_NODE_PARAMS_st 结构体参考

信号量信号节点参数。

  • MUexternalSemaphore∗extSemArray 外部信号量句柄数组。

  • const MUSA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS∗paramsArray

    外部信号量信号参数数组。

  • unsigned int numExtSems

    在extSemArray和paramsArray中提供的句柄和参数的数量。

MUSA_EXT_SEM_WAIT_NODE_PARAMS_st 结构体参考

信号量等待节点参数。

  • MUexternalSemaphore∗extSemArray

    外部信号量句柄数组。

  • const MUSA_EXTERNAL_SEMAPHORE_WAIT_PARAMS∗paramsArray

    外部信号量等待参数数组。

  • unsigned int numExtSems

    在extSemArray和paramsArray中提供的句柄和参数的数量。

MUSA_EXTERNAL_MEMORY_BUFFER_DESC_st 结构体参考

外部内存缓冲区描述符。

  • unsigned long long offset

    缓冲区基址所在的内存对象的偏移量。

  • unsigned long long size

    缓冲区的大小。

  • unsigned int flags

    保留供将来使用的标记。必须为零

  • unsigned int reserved [16]

MUSA_EXTERNAL_MEMORY_HANDLE_DESC_st 结构体参考

外部内存句柄描述符。

  • MUexternalMemoryHandleType type 句柄类型。

  • union {
    int fd
    /**
    * 引用内存对象的文件描述符。当类型是
    * MU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD
    */

    struct {
    /**
    * 引用信号量对象的Win32句柄。当类型是以下之一时有效:
    * - MU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32
    * - MU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT
    * - MU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP
    * - MU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE
    * - MU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE
    * - MU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE_KMT
    * 必须有一个'handle'和'name'非空。如果类型是以下之一:
    * MU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT
    * MU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE_KMT
    * 那么'name'必须为空。
    */
    void∗handle
    /**
    * 有效的NT句柄。如果'name'非空,则必须为空
    */
    const void∗name
    /**
    * 有效的内存对象的名称。
    * 如果'handle'非空,则必须为空。
    */
    } win32
    Win32句柄引用信号量对象。
    const void∗mtSciBufObject
    /**
    * 表示NvSciBuf对象的句柄。当类型是MU_EXTERNAL_MEMORY_HANDLE_TYPE_MTSCIBUF时有效

    } handle
  • unsigned long long size

    内存分配的大小。

  • unsigned int flags

    必须为零或MUSA_EXTERNAL_MEMORY_DEDICATED。

  • unsigned int reserved [16]

MUSA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC_st 结构体参考

外部内存mipmap描述符。

  • unsigned long long offset

    mipmap链的基础级别的内存对象的偏移量。

  • MUSA_ARRAY3D_DESCRIPTOR arrayDesc

    mipmap链的基础级别的格式、维度和类型。

  • unsigned int numLevels

    mipmap链中的总级别数。

  • unsigned int reserved [16]

MUSA_EXTERNAL_SEMAPHORE_HANDLE_DESC_st 结构体参考

外部信号量句柄描述符。

  • MUexternalSemaphoreHandleType type 句柄类型。

  • union {
    int fd
    /*引用信号量对象的文件描述符。
    当类型是以下之一时有效:

    - MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD

    - MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD*/
    struct {
    void∗handle
    有效的NT句柄。如果'name'非空,则必须为空
    const void∗name
    //有效的同步原语的名称。如果'name'非空,则必须为空
    } win32
    /*Win32句柄引用信号量对象。
    当类型是以下之一时有效:

    MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32
    • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT
    • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE
    • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE
    • MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX

    - MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32 必须有一个'handle'和'name'非空。
    如果类型是以下之一:
    - MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT
    - MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT 那么'name'必须为空。*/

    const void∗mtSciSyncObj
    //有效的NvSciSyncObj。必须非空
    } handle
  • unsigned int flags

    保留供将来使用的标记。必须为零。

  • unsigned int reserved [16]

MUSA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_st 结构体参考

外部信号量信号参数。

  • struct {
    struct {
    unsigned long long value
    要发出信号的围栏的值。
    } fence
    参数适用于围栏对象。
    union {
    void∗fence
    指向NvSciSyncFence的指针。
    unsigned long long reserved
    } mtSciSync
    struct {
    unsigned long long key
    释放互斥锁的键值。
    } keyedMutex
    参数适用于键控互斥锁对象。
    unsigned int reserved [12]
    } params
  • unsigned int flags

    只有当MUSA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS用于发出MUexternalSemaphore信号时 类型为MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_MTSCISYNC,有效标志是 MUSA_EXTERNAL_SEMAPHORE_SIGNAL_SKIP_MTSCIBUF_MEMSYNC,表示在发出MUexternalSemaphore信号时,不应为任何导入为MU_EXTERNAL_MEMORY_HANDLE_TYPE_MTSCIBUF的外部内存对象执行任何内存同步操作。对于所有其他类型的MUexternalSemaphore,标志必须为零。

MUSA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_st 结构体参考

外部信号量等待参数。

  • struct {
    struct {
    unsigned long long value
    要等待的围栏的值。
    } fence
    参数适用于围栏对象。
    union {
    void∗fence
    unsigned long long reserved
    } mtSciSync
    指向NvSciSyncFence的指针。
    struct {
    unsigned long long key
    获取互斥锁的键值。
    unsigned int timeoutMs
    获取互斥锁的超时时间,以毫秒为单位。
    } keyedMutex
    参数适用于键控互斥锁对象。
    unsigned int reserved [10]
    } params
  • unsigned int flags 只有当MUSA_EXTERNAL_SEMAPHORE_WAIT_PARAMS用于等待MUexternalSemaphore时 类型为MU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_MTSCISYNC,有效标志是 MUSA_EXTERNAL_SEMAPHORE_WAIT_SKIP_MTSCIBUF_MEMSYNC,表示在等待MUexternalSemaphore时,不应为任何导入为MU_EXTERNAL_MEMORY_HANDLE_TYPE_MTSCIBUF的外部内存对象执行任何内存同步操作。对于所有其他类型的MUexternalSemaphore,标志必须为零。

MUSA_HOST_NODE_PARAMS_st 结构体参考

主机节点参数。

  • MUhostFn fn

    当节点执行时要调用的函数。

  • void∗userData

    要传递给函数的参数。

MUSA_KERNEL_NODE_PARAMS_st 结构体参考

GPU内核节点参数。

  • MUfunction func

    要启动的内核。

  • unsigned int gridDimX

    网格的宽度,以块为单位。

  • unsigned int gridDimY

    网格的高度,以块为单位。

  • unsigned int gridDimZ

    网格的深度,以块为单位。

  • unsigned int blockDimX

    每个线程块的X维度。

  • unsigned int blockDimY

    每个线程块的Y维度。

  • unsigned int blockDimZ

    每个线程块的Z维度。

  • unsigned int sharedMemBytes

    每个线程块的动态共享内存大小,以字节为单位。

  • void∗∗kernelParams

    内核参数的指针数组。

  • void∗∗extra

    额外选项。

MUSA_LAUNCH_PARAMS_st 结构体参考

内核启动参数。

  • MUfunction function

    要启动的内核。

  • unsigned int gridDimX

    网格的宽度,以块为单位。

  • unsigned int gridDimY

    网格的高度,以块为单位。

  • unsigned int gridDimZ

    网格的深度,以块为单位。

  • unsigned int blockDimX

    每个线程块的X维度。

  • unsigned int blockDimY

    每个线程块的Y维度。

  • unsigned int blockDimZ

    每个线程块的Z维度。

  • unsigned int sharedMemBytes

    每个线程块的动态共享内存大小,以字节为单位。

  • MUstream hStream

    流标识符。

  • void∗∗kernelParams

    内核参数的指针数组。

MUSA_MEM_ALLOC_NODE_PARAMS_st 结构体参考

内存分配节点参数。

  • MUmemPoolProps poolProps

    in:分配应该位于的位置(在location中指定)。handleTypes必须为MU_MEM_HANDLE_TYPE_NONE。不支持IPC。

  • const MUmemAccessDesc∗accessDescs

    in:内存访问描述符数组。用于描述对等GPU访问

  • size_t accessDescCount

    in:内存访问描述符的数量。不得超过GPU的数量。

  • size_t bytesize

    in:请求的分配大小,以字节为单位

  • MUdeviceptr dptr

    out:MUSA返回的分配地址

MUSA_MEM_ATOMIC_NODE_PARAMS_st 结构体参考

  • MUdeviceptr dst
  • MUdeviceptr src
  • size_t elementCount
  • MUatomicType operation

MUSA_MEM_ATOMIC_VALUE_NODE_PARAMS_st 结构体参考

  • MUdeviceptr dst
  • muuint64_t value
  • MUatomicValueType operation

MUSA_MEM_WAIT_WRITE_NODE_PARAMS_st 结构体参考

  • MUdeviceptr addr
  • muuint64_t value
  • unsigned int flags
  • MUstreamBatchMemOpType operation

MUSA_MEMCPY2D_st 结构体参考

2D内存复制参数

  • size_t srcXInBytes

    源X,以字节为单位。

  • size_t srcY

    源Y。

  • MUmemorytype srcMemoryType

    源内存类型(主机、设备、数组)

  • const void∗srcHost

    源主机指针。

  • MUdeviceptr srcDevice

    源设备指针。

  • MUarray srcArray

    源数组引用。

  • size_t srcPitch

    源间距(如果src是数组则忽略)

  • size_t dstXInBytes

    目标X,以字节为单位。

  • size_t dstY

    目标Y。

  • MUmemorytype dstMemoryType

    目标内存类型(主机、设备、数组)

  • void∗dstHost

    目标主机指针。

  • MUdeviceptr dstDevice

    目标设备指针。

  • MUarray dstArray

    目标数组引用。

  • size_t dstPitch

    目标间距(如果dst是数组则忽略)

  • size_t WidthInBytes

    2D内存复制的宽度,以字节为单位。

  • size_t Height

    2D内存复制的高度。

MUSA_MEMCPY3D_PEER_st 结构体参考

3D内存跨上下文复制参数

  • size_t srcXInBytes

    源X,以字节为单位。

  • size_t srcY

    源Y。

  • size_t srcZ

    源Z。

  • size_t srcLOD

    源LOD。

  • MUmemorytype srcMemoryType

    源内存类型(主机、设备、数组)

  • const void∗srcHost

    源主机指针。

  • MUdeviceptr srcDevice

    源设备指针。

  • MUarray srcArray

    源数组引用。

  • MUcontext srcContext

    源上下文(如果srcMemoryType是MU_MEMORYTYPE_ARRAY则忽略)

  • size_t srcPitch

    源间距(如果src是数组则忽略)

  • size_t srcHeight

    源高度(如果src是数组则忽略;如果Depth==1可以为0)

  • size_t dstXInBytes

    目标X,以字节为单位。

  • size_t dstY

    目标Y。

  • size_t dstZ

    目标Z。

  • size_t dstLOD

    目标LOD。

  • MUmemorytype dstMemoryType

    目标内存类型(主机、设备、数组)

  • void∗dstHost

    目标主机指针。

  • MUdeviceptr dstDevice

    目标设备指针。

  • MUarray dstArray

    目标数组引用。

  • MUcontext dstContext

    目标上下文(如果dstMemoryType是MU_MEMORYTYPE_ARRAY则忽略)

  • size_t dstPitch

    目标间距(如果dst是数组则忽略)

  • size_t dstHeight

    目标高度(如果dst是数组则忽略;如果Depth==1可以为0)

  • size_t WidthInBytes

    3D内存复制的宽度,以字节为单位。

  • size_t Height

    3D内存复制的高度。

  • size_t Depth

    3D内存复制的深度。

MUSA_MEMCPY3D_st 结构体参考

3D内存复制参数

  • size_t srcXInBytes

    源X,以字节为单位。

  • size_t srcY

    源Y。

  • size_t srcZ

    源Z。

  • size_t srcLOD

    源LOD。

  • MUmemorytype srcMemoryType

    源内存类型(主机、设备、数组)

  • const void∗srcHost

    源主机指针。

  • MUdeviceptr srcDevice

    源设备指针。

  • MUarray srcArray

    源数组引用。

  • void∗reserved0

    必须为NULL。

  • size_t srcPitch

    源间距(如果src是数组则忽略)

  • size_t srcHeight

    源高度(如果src是数组则忽略;如果Depth==1可以为0)

  • size_t dstXInBytes

    目标X,以字节为单位。

  • size_t dstY

    目标Y。

  • size_t dstZ

    目标Z。

  • size_t dstLOD

    目标LOD。

  • MUmemorytype dstMemoryType

    目标内存类型(主机、设备、数组)

  • void∗dstHost

    目标主机指针。

  • MUdeviceptr dstDevice

    目标设备指针。

  • MUarray dstArray

    目标数组引用。

  • void∗reserved1

    必须为NULL。

  • size_t dstPitch

    目标间距(如果dst是数组则忽略)

  • size_t dstHeight

    目标高度(如果dst是数组则忽略;如果Depth==1可以为0)

  • size_t WidthInBytes

    3D内存复制的宽度,以字节为单位。

  • size_t Height

    3D内存复制的高度。

  • size_t Depth

    3D内存复制的深度。

MUSA_MEMSET_NODE_PARAMS_st 结构体参考

Memset节点参数。

  • MUdeviceptr dst

    目标设备指针。

  • size_t pitch

    目标设备指针的间距。

  • unsigned int value

    要设置的值。

  • unsigned int elementSize

    每个元素的大小,以字节为单位。

  • size_t width

    行的宽度,以元素为单位。

  • size_t height 行数。

MUSA_POINTER_ATTRIBUTE_P2P_TOKENS_st 结构体参考

GPU Direct v3令牌。

  • unsigned long long p2pToken
  • unsigned int vaSpaceToken

MUSA_RESOURCE_DESC_st 结构体参考

MUSA资源描述符。

  • MUresourcetype resType

    资源类型。

  • union {
    struct {
    MUarray hArray
    MUSA数组。
    } array
    struct {
    MUmipmappedArray hMipmappedArray
    MUSA mipmapped数组。
    } mipmap
    struct {
    MUdeviceptr devPtr
    设备指针。
    MUarray_format format
    数组格式。
    unsigned int numChannels
    每个数组元素的通道数。
    size_t sizeInBytes
    大小,以字节为单位。
    } linear
    struct {
    MUdeviceptr devPtr
    设备指针。
    MUarray_format format
    数组格式。
    unsigned int numChannels
    每个数组元素的通道数。
    size_t width
    数组的宽度,以元素为单位。
    size_t height
    数组的高度,以元素为单位。
    size_t pitchInBytes
    两行之间的间距,以字节为单位。
    } pitch2D
    struct {
    int reserved [32]
    } reserved
    } res
  • unsigned int flags

    标志(必须为零)

MUSA_RESOURCE_VIEW_DESC_st 结构体参考

资源视图描述符。

  • MUresourceViewFormat format

    资源视图格式。

  • size_t width

    资源视图的宽度。

  • size_t height

    资源视图的高度。

  • size_t depth

    资源视图的深度。

  • unsigned int firstMipmapLevel

    定义的第一个mipmap级别。

  • unsigned int lastMipmapLevel

    定义的最后一个mipmap级别。

  • unsigned int firstLayer

    第一层索引。

  • unsigned int lastLayer

    最后一层索引。

  • unsigned int reserved [16]

MUSA_TEXTURE_DESC_st 结构体参考

纹理描述符。

  • MUaddress_mode addressMode [3]

    地址模式。

  • MUfilter_mode filterMode

    过滤模式。

  • unsigned int flags

    标志。

  • unsigned int maxAnisotropy

    最大各向异性比率。

  • MUfilter_mode mipmapFilterMode

    mipmap过滤模式。

  • float mipmapLevelBias

    mipmap级别偏置。

  • float minMipmapLevelClamp

    mipmap最小级别钳制。

  • float maxMipmapLevelClamp

    mipmap最大级别钳制。

  • float borderColor [4]

    边框颜色。

  • int reserved [12]

MUstreamAttrValue_union 联合参考

流属性联合,与muStreamSetAttribute/muStreamGetAttribute一起使用。

  • MUaccessPolicyWindow accessPolicyWindow

    属性MUaccessPolicyWindow。

  • MUsynchronizationPolicy syncPolicy

    MU_STREAM_ATTRIBUTE_SYNCHRONIZATION_POLICY的值。

MUstreamBatchMemOpParams_union 联合参考

muStreamBatchMemOp的每个操作参数。

  • MUstreamBatchMemOpType operation

  • struct MUstreamBatchMemOpParams_unionMUstreamMemOpWaitValueParams_st waitValue

    “等待值”操作的参数。 包含:

    • operation:操作类型(与联合的operation字段相同)。
    • address:指定要监视的内存位置的MUdeviceptr
    • value/value64muuint32_tmuuint64_t的联合,用于要等待的值。
    • flags:操作特定标志的unsigned int
    • alias:保留给驱动程序内部使用的MUdeviceptr。初始值不重要。
  • struct MUstreamBatchMemOpParams_unionMUstreamMemOpWriteValueParams_st writeValue

    “写值”操作的参数。 包含:

    • operation:操作类型(与联合的operation字段相同)。
    • address:指定要写入的内存位置的MUdeviceptr
    • value/value64muuint32_tmuuint64_t的联合,用于要写入的值。
    • flags:操作特定标志的unsigned int
    • alias:保留给驱动程序内部使用的MUdeviceptr。初始值不重要。
  • struct MUstreamBatchMemOpParams_unionMUstreamMemOpFlushRemoteWritesParams_st flushRemoteWrites “刷新远程写入”操作的参数。 包含:

    • operation:操作类型(与联合的operation字段相同)。
    • flags:操作特定标志的unsigned int
  • muuint64_t pad [6]

ValueParams_st 结构体参考

  • MUstreamBatchMemOpType operation

  • MUdeviceptr address

  • union {
    muuint32_t value
    muuint64_t value64
    };
  • unsigned int flags

  • MUdeviceptr alias

    供驱动程序内部使用。初始值不重要。

MUtensorDescriptor_st 结构体参考

张量映射描述符。

需要编译器支持64字节对齐。

  • muuint64_t opaque [MU_TENSOR_DESCRIPTOR_NUM_QWORDS]