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 的名称。

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)

custatevecSubSVMigratorDescriptor_t

typedef struct custatevecSubSVMigratorDescriptor *custatevecSubSVMigratorDescriptor_t

此描述符保存迁移器操作的上下文,通过使用 custatevecSubSVMigratorCreate() 初始化,并通过使用 custatevecSubSVMigratorDestroy() 销毁。


CUSTATEVEC_ALLOCATOR_NAME_LEN

CUSTATEVEC_ALLOCATOR_NAME_LEN

CUSTATEVEC_MAX_SEGMENT_MASK_SIZE

CUSTATEVEC_MAX_SEGMENT_MASK_SIZE

枚举器

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

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

以行优先顺序存储的矩阵。


custatevecMatrixType_t

enum custatevecMatrixType_t

用于指定矩阵类型的常量。

enumerator CUSTATEVEC_MATRIX_TYPE_GENERAL = 0

非特定类型。

enumerator CUSTATEVEC_MATRIX_TYPE_UNITARY = 1

酉矩阵。

enumerator CUSTATEVEC_MATRIX_TYPE_HERMITIAN = 2

埃尔米特矩阵。


custatevecMatrixMapType_t

enum custatevecMatrixMapType_t

用于指定如何将矩阵分配给批量状态向量的常量。

enumerator CUSTATEVEC_MATRIX_MAP_TYPE_BROADCAST = 0

要应用的矩阵在所有状态向量中是统一的。

enumerator CUSTATEVEC_MATRIX_MAP_TYPE_MATRIX_INDEXED = 1

每个状态向量引用索引以选择其矩阵。


custatevecCollapseOp_t

enum custatevecCollapseOp_t

用于指定坍缩操作的常量。

enumerator CUSTATEVEC_COLLAPSE_NONE = 0

不坍缩状态向量。

enumerator CUSTATEVEC_COLLAPSE_NORMALIZE_AND_ZERO = 1

坍缩、归一化并在状态向量中填充零。


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)


custatevecSamplerOutput_t

enum custatevecSamplerOutput_t

指定采样输出中位串顺序的常量。

enumerator CUSTATEVEC_SAMPLER_OUTPUT_RANDNUM_ORDER = 0

与给定的随机数顺序相同

enumerator CUSTATEVEC_SAMPLER_OUTPUT_ASCENDING_ORDER = 1

按升序重新排序


custatevecDeviceNetworkType_t

enum custatevecDeviceNetworkType_t

指定设备网络拓扑的常量。

enumerator CUSTATEVEC_DEVICE_NETWORK_TYPE_SWITCH = 1

设备通过网络交换机连接

enumerator CUSTATEVEC_DEVICE_NETWORK_TYPE_FULLMESH = 2

设备通过全网状网络连接


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)\)


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 将用于进程间通信。


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