cuStateVec 数据类型¶
不透明数据结构¶
custatevecIndex_t
¶
-
typedef int64_t custatevecIndex_t¶
用于状态向量索引的类型。
此类型用于表示状态向量的索引。由于状态向量索引中的每一位都对应于电路中的一个量子比特,因此该类型也用于表示位字符串。位顺序为小端序。第 0 位是最低有效位 (LSB)。
custatevecHandle_t
¶
-
typedef struct custatevecContext *custatevecHandle_t¶
此句柄存储执行状态向量计算的必要信息。
此句柄保存 cuStateVec 库上下文(设备属性、系统信息等),该上下文用于所有 cuStateVec 函数调用。句柄必须分别使用 `custatevecCreate()` 和 `custatevecDestroy()` 函数进行初始化和销毁。
custatevecSamplerDescriptor_t
¶
-
typedef struct custatevecSamplerDescriptor *custatevecSamplerDescriptor_t¶
此描述符保存采样操作的上下文,分别使用 `custatevecSamplerCreate()` 初始化,并使用 `custatevecSamplerDestroy()` 销毁。
custatevecAccessorDescriptor_t
¶
-
typedef struct custatevecAccessorDescriptor *custatevecAccessorDescriptor_t¶
此描述符保存访问器操作的上下文,分别使用 `custatevecAccessorCreate()` 初始化,并使用 `custatevecAccessorDestroy()` 销毁。
custatevecLoggerCallback_t
¶
-
typedef void (*custatevecLoggerCallback_t)(int32_t logLevel, const char *functionName, const char *message)¶
用于日志记录的回调函数指针类型。使用 `custatevecLoggerSetCallback()` 设置回调函数。
- 参数
logLevel – [in] 日志级别
functionName – [in] 记录此消息的 API 的名称
message – [in] 日志消息
custatevecLoggerCallbackData_t
¶
-
typedef void (*custatevecLoggerCallbackData_t)(int32_t logLevel, const char *functionName, const char *message, void *userData)¶
用于日志记录的回调函数指针类型,接受用户数据。使用 `custatevecLoggerSetCallbackData()` 设置回调函数。
- 参数
logLevel – [in] 日志级别
functionName – [in] 记录此消息的 API 的名称
message – [in] 日志消息
userData – [in] 在回调函数内部使用的用户提供的数据
custatevecDeviceMemHandler_t
¶
-
struct custatevecDeviceMemHandler_t¶
设备内存处理程序结构保存有关用户提供的、流排序的 设备内存池 (mempool) 的信息。
公共成员
-
void *ctx¶
指向用户拥有的 mempool/上下文对象的指针。
-
int (*device_alloc)(void *ctx, void **ptr, size_t size, cudaStream_t stream)¶
指向用户提供的例程的函数指针,用于在 `
stream
` 上分配 `size
` 大小的设备内存。分配的内存应可供当前设备访问(或更准确地说,可供绑定到库句柄的当前 CUDA 上下文访问)。
此接口支持任何流排序的内存分配器 `
ctx
`。成功后,分配的内存可以立即在给定流上使用,方法是在此调用之后在同一流上排队/排序任何操作。调用方有责任确保建立正确的流顺序。
分配的内存应至少为 256 字节对齐。
- 参数
ctx – [in] 指向用户拥有的 mempool 对象的指针。
ptr – [out] 成功后,指向已分配缓冲区的指针。
size – [in] 要分配的内存量(以字节为单位)。
stream – [in] 在其上分配内存(并建立流顺序)的 CUDA 流。
- 返回
调用的错误状态。成功时返回 0,否则返回任何非零整数。如果此函数是 C++ 函数,则不得抛出异常。
-
int (*device_free)(void *ctx, void *ptr, size_t size, cudaStream_t stream)¶
指向用户提供的例程的函数指针,用于在 `
stream
` 上释放 `size
` 大小的设备内存。此接口支持任何流排序的内存分配器。成功后,在此调用之后排序的任何后续访问(指向指针 `
ptr
` 的内存)都是未定义的行为。调用方有责任确保建立正确的流顺序。
如果参数 `
ctx
` 和 `size
` 与传递给 `device_alloc
` 以分配指针 `ptr
` 指向的内存的参数不同,则行为未定义。参数 `
stream
` 不需要与用于分配 `ptr
` 的流相同,只要正确建立流顺序即可。如果未保持此假设,则行为未定义。- 参数
ctx – [in] 指向用户拥有的 mempool 对象的指针。
ptr – [in] 指向已分配缓冲区的指针。
size – [in] 已分配内存的大小。
stream – [in] 在其上释放内存(并建立流排序)的 CUDA 流。
- 返回
调用的错误状态。成功时返回 0,否则返回任何非零整数。如果此函数是 C++ 函数,则不得抛出异常。
-
char name[CUSTATEVEC_ALLOCATOR_NAME_LEN]¶
提供的 mempool 的名称。
-
void *ctx¶
custatevecCommunicatorDescriptor_t
¶
-
typedef struct custatevecCommunicator_t *custatevecCommunicatorDescriptor_t¶
此描述符管理进程间通信,通过使用 custatevecCommunicatorCreate() 初始化,并通过使用 custatevecCommunicatorDestroy() 销毁。
custatevecDistIndexBitSwapSchedulerDescriptor_t
¶
-
typedef struct custatevecDistIndexBitSwapScheduler_t *custatevecDistIndexBitSwapSchedulerDescriptor_t¶
此描述符保存分布式索引位交换调度器的上下文,通过使用 custatevecDistIndexBitSwapSchedulerCreate() 初始化,并通过使用 custatevecDistIndexBitSwapSchedulerDestroy() 销毁。
custatevecSVSwapWorkerDescriptor_t
¶
-
typedef struct custatevecSVSwapWorker_t *custatevecSVSwapWorkerDescriptor_t¶
此描述符保存分布式索引位交换的数据传输工作器的上下文,通过使用 custatevecSVSwapWorkerCreate() 初始化,并通过使用 custatevecSVSwapWorkerDestroy() 销毁。
custatevecSVSwapParameters_t
¶
-
struct custatevecSVSwapParameters_t¶
公共成员
-
int32_t swapBatchIndex¶
由 custatevecDistIndexBitSwapSchedulerGetParameters() 的参数指定的 swapBatchIndex
-
int32_t orgSubSVIndex¶
由 custatevecDistIndexBitSwapSchedulerGetParameters() 的参数指定的原始 subSV 索引
-
int32_t dstSubSVIndex¶
目标 subSV 索引
-
int32_t orgSegmentMaskString[CUSTATEVEC_MAX_SEGMENT_MASK_SIZE]¶
原始段掩码字符串
-
int32_t dstSegmentMaskString[CUSTATEVEC_MAX_SEGMENT_MASK_SIZE]¶
目标段掩码字符串
-
int32_t segmentMaskOrdering[CUSTATEVEC_MAX_SEGMENT_MASK_SIZE]¶
段掩码字符串的掩码排序
-
uint32_t segmentMaskLen¶
段掩码长度
-
uint32_t nSegmentBits¶
段中索引位的数量
-
custatevecDataTransferType_t dataTransferType¶
此数据传输的类型
-
custatevecIndex_t transferSize¶
正在传输的元素数量,
transferSize = 1 << (nSegmentBits - segmentMaskLen)
。
-
int32_t swapBatchIndex¶
custatevecSubSVMigratorDescriptor_t
¶
-
typedef struct custatevecSubSVMigratorDescriptor *custatevecSubSVMigratorDescriptor_t¶
此描述符保存迁移器操作的上下文,通过使用 custatevecSubSVMigratorCreate() 初始化,并通过使用 custatevecSubSVMigratorDestroy() 销毁。
枚举器¶
custatevecStatus_t
¶
-
enum custatevecStatus_t¶
包含库状态。每个 cuStateVec API 都返回此枚举器。
值
-
enumerator CUSTATEVEC_STATUS_SUCCESS = 0¶
API 调用已成功完成。
-
enumerator CUSTATEVEC_STATUS_NOT_INITIALIZED = 1¶
库句柄未初始化。
-
enumerator CUSTATEVEC_STATUS_ALLOC_FAILED = 2¶
库中的内存分配失败。
-
enumerator CUSTATEVEC_STATUS_INVALID_VALUE = 3¶
传递了错误的参数。 例如,作为输入数据的空指针或无效的枚举值。
-
enumerator CUSTATEVEC_STATUS_ARCH_MISMATCH = 4¶
设备性能不足以支持提供的输入参数集。
-
enumerator CUSTATEVEC_STATUS_EXECUTION_FAILED = 5¶
设备任务执行期间出错。
-
enumerator CUSTATEVEC_STATUS_INTERNAL_ERROR = 6¶
库中发生未知错误。
-
enumerator CUSTATEVEC_STATUS_NOT_SUPPORTED = 7¶
后端不支持此 API。
-
enumerator CUSTATEVEC_STATUS_INSUFFICIENT_WORKSPACE = 8¶
设备上的工作空间太小,无法执行。
-
enumerator CUSTATEVEC_STATUS_SAMPLER_NOT_PREPROCESSED = 9¶
采样器在预处理之前被调用。
-
enumerator CUSTATEVEC_STATUS_NO_DEVICE_ALLOCATOR = 10¶
未设置设备内存池。
-
enumerator CUSTATEVEC_STATUS_DEVICE_ALLOCATOR_ERROR = 11¶
设备内存池操作失败。
-
enumerator CUSTATEVEC_STATUS_COMMUNICATOR_ERROR = 12¶
通信器操作失败。
-
enumerator CUSTATEVEC_STATUS_LOADING_LIBRARY_FAILED = 13¶
动态加载共享库失败。
-
enumerator CUSTATEVEC_STATUS_MAX_VALUE = 14¶
-
enumerator CUSTATEVEC_STATUS_SUCCESS = 0¶
custatevecPauli_t
¶
-
enum custatevecPauli_t¶
用于指定泡利基的常量
\(\boldsymbol{\sigma}_0 = \mathbf{I} = \left[ \begin{array}{rr} 1 & 0 \\ 0 & 1 \end{array}\right]\)
\(\boldsymbol{\sigma}_x = \left[ \begin{array}{rr} 0 & 1 \\ 1 & 0 \end{array}\right]\)
\(\boldsymbol{\sigma}_y = \left[ \begin{array}{rr} 0 & -i \\ i & 0 \end{array}\right]\)
\(\boldsymbol{\sigma}_z = \left[ \begin{array}{rr} 1 & 0 \\ 0 & -1 \end{array}\right]\)
值
-
enumerator CUSTATEVEC_PAULI_I = 0¶
单位矩阵。
-
enumerator CUSTATEVEC_PAULI_X = 1¶
泡利 X 矩阵。
-
enumerator CUSTATEVEC_PAULI_Y = 2¶
泡利 Y 矩阵。
-
enumerator CUSTATEVEC_PAULI_Z = 3¶
泡利 Z 矩阵。
custatevecMatrixLayout_t
¶
-
enum custatevecMatrixLayout_t¶
用于指定矩阵内存布局的常量。
值
-
enumerator CUSTATEVEC_MATRIX_LAYOUT_COL = 0¶
以列优先顺序存储的矩阵。
-
enumerator CUSTATEVEC_MATRIX_LAYOUT_ROW = 1¶
以行优先顺序存储的矩阵。
-
enumerator CUSTATEVEC_MATRIX_LAYOUT_COL = 0¶
custatevecMatrixType_t
¶
-
enum custatevecMatrixType_t¶
用于指定矩阵类型的常量。
值
-
enumerator CUSTATEVEC_MATRIX_TYPE_GENERAL = 0¶
非特定类型。
-
enumerator CUSTATEVEC_MATRIX_TYPE_UNITARY = 1¶
酉矩阵。
-
enumerator CUSTATEVEC_MATRIX_TYPE_HERMITIAN = 2¶
埃尔米特矩阵。
-
enumerator CUSTATEVEC_MATRIX_TYPE_GENERAL = 0¶
custatevecMatrixMapType_t
¶
-
enum custatevecMatrixMapType_t¶
用于指定如何将矩阵分配给批量状态向量的常量。
值
-
enumerator CUSTATEVEC_MATRIX_MAP_TYPE_BROADCAST = 0¶
要应用的矩阵在所有状态向量中是统一的。
-
enumerator CUSTATEVEC_MATRIX_MAP_TYPE_MATRIX_INDEXED = 1¶
每个状态向量引用索引以选择其矩阵。
-
enumerator CUSTATEVEC_MATRIX_MAP_TYPE_BROADCAST = 0¶
custatevecCollapseOp_t
¶
-
enum custatevecCollapseOp_t¶
用于指定坍缩操作的常量。
值
-
enumerator CUSTATEVEC_COLLAPSE_NONE = 0¶
不坍缩状态向量。
-
enumerator CUSTATEVEC_COLLAPSE_NORMALIZE_AND_ZERO = 1¶
坍缩、归一化并在状态向量中填充零。
-
enumerator CUSTATEVEC_COLLAPSE_NONE = 0¶
custatevecComputeType_t
¶
-
enum custatevecComputeType_t¶
用于指定算术运算最小精度的常量。
值
-
enumerator CUSTATEVEC_COMPUTE_DEFAULT = 0¶
Complex64 使用 FP32(float),Complex128 使用 FP64(double)。
-
enumerator CUSTATEVEC_COMPUTE_32F = (1U << 2U)¶
FP32(float)
-
enumerator CUSTATEVEC_COMPUTE_64F = (1U << 4U)¶
FP64(double)
-
enumerator CUSTATEVEC_COMPUTE_TF32 = (1U << 12U)¶
TF32(tensor-float-32)
-
enumerator CUSTATEVEC_COMPUTE_DEFAULT = 0¶
custatevecSamplerOutput_t
¶
-
enum custatevecSamplerOutput_t¶
指定采样输出中位串顺序的常量。
值
-
enumerator CUSTATEVEC_SAMPLER_OUTPUT_RANDNUM_ORDER = 0¶
与给定的随机数顺序相同
-
enumerator CUSTATEVEC_SAMPLER_OUTPUT_ASCENDING_ORDER = 1¶
按升序重新排序
-
enumerator CUSTATEVEC_SAMPLER_OUTPUT_RANDNUM_ORDER = 0¶
custatevecDeviceNetworkType_t
¶
-
enum custatevecDeviceNetworkType_t¶
指定设备网络拓扑的常量。
值
-
enumerator CUSTATEVEC_DEVICE_NETWORK_TYPE_SWITCH = 1¶
设备通过网络交换机连接
-
enumerator CUSTATEVEC_DEVICE_NETWORK_TYPE_FULLMESH = 2¶
设备通过全网状网络连接
-
enumerator CUSTATEVEC_DEVICE_NETWORK_TYPE_SWITCH = 1¶
custatevecStateVectorType_t
¶
-
enum custatevecStateVectorType_t¶
指定量子态的常量。
值
-
enumerator CUSTATEVEC_STATE_VECTOR_TYPE_ZERO = 0¶
创建一个零态,\(|00\cdots0\rangle\)。
-
enumerator CUSTATEVEC_STATE_VECTOR_TYPE_UNIFORM = 1¶
创建所有计算基矢的等权重叠加态,\(\frac{1}{\sqrt{2^n}}\left(|00\cdots00\rangle + |00\cdots01\rangle + \cdots + |11\cdots10\rangle + |11\cdots11\rangle\right)\)。
-
enumerator CUSTATEVEC_STATE_VECTOR_TYPE_GHZ = 2¶
创建 GHZ 态,\(\frac{1}{\sqrt{2}}\left(|00\cdots0\rangle + |11\cdots1\rangle\right)\)。
-
enumerator CUSTATEVEC_STATE_VECTOR_TYPE_W = 3¶
创建 W 态,\(\frac{1}{\sqrt{n}}\left(|000\cdots001\rangle + |000\cdots010\rangle + \cdots + |010\cdots000\rangle + |100\cdots000\rangle\right)\)。
-
enumerator CUSTATEVEC_STATE_VECTOR_TYPE_ZERO = 0¶
custatevecCommunicatorType_t
¶
-
enum custatevecCommunicatorType_t¶
指定进程间通信中使用的通信器的常量。
值
-
enumerator CUSTATEVEC_COMMUNICATOR_TYPE_EXTERNAL = 0¶
用户提供的通信器将用于进程间通信。
-
enumerator CUSTATEVEC_COMMUNICATOR_TYPE_OPENMPI = 1¶
Open MPI 将用于进程间通信。
-
enumerator CUSTATEVEC_COMMUNICATOR_TYPE_MPICH = 2¶
MPICH 将用于进程间通信。
-
enumerator CUSTATEVEC_COMMUNICATOR_TYPE_EXTERNAL = 0¶
custatevecDataTransferType_t
¶
-
enum custatevecDataTransferType_t¶
指定点对点通信中的数据传输方向的常量。
值
-
enumerator CUSTATEVEC_DATA_TRANSFER_TYPE_NONE = 0¶
数据传输工作进程不会发送或接收任何数据。
-
enumerator CUSTATEVEC_DATA_TRANSFER_TYPE_SEND = 1¶
数据传输工作进程将发送数据。
-
enumerator CUSTATEVEC_DATA_TRANSFER_TYPE_RECV = 2¶
数据传输工作进程将接收数据。
-
enumerator CUSTATEVEC_DATA_TRANSFER_TYPE_SEND_RECV = CUSTATEVEC_DATA_TRANSFER_TYPE_SEND | CUSTATEVEC_DATA_TRANSFER_TYPE_RECV¶
-
enumerator CUSTATEVEC_DATA_TRANSFER_TYPE_NONE = 0¶