cuquantum.densitymat.WorkStream

class cuquantum.densitymat.WorkStream(device_id: Optional[int] = None, stream: Optional[cupy.cuda.stream.Stream] = None, memory_limit: Optional[Union[int, str]] = '80%', allocator: Optional[cuquantum.cutensornet.memory.BaseCUDAMemoryManager] = <class 'cuquantum.cutensornet.memory._CupyCUDAMemoryManager'>, compute_type: Optional[str] = None, logger: Optional[logging.Logger] = None)[source]

一个数据类,包含库句柄、流、工作区和配置参数。

此对象自动处理分配和同步。此外,还提供了一种释放工作区的方法。工作区缓冲区的大小由 memory_limit 属性或使用此 WorkStream 的所有对象中所需的最大工作区大小决定。

device_id

CUDA 设备序号(如果张量网络驻留在 CPU 上则使用)。如果未指定,将使用设备 0。

类型

Optional[int]

stream

CUDA 流。如果未指定,将使用当前流。

类型

Optional[cupy.cuda.stream.Stream]

memory_limit

最大可用内存。可以指定为一个值(带有可选后缀,如 K[iB]、M[iB]、G[iB])或百分比。默认值为设备内存的 80%。

类型

Optional[Union[int, str]]

allocator[source]

一个支持 BaseCUDAMemoryManager 协议的对象,用于提取设备内存。如果未提供分配器,将使用来自库软件包的内存分配器(对于 PyTorch 操作数,使用 torch.cuda.caching_allocator_alloc(),否则使用 cupy.cuda.alloc())。

类型

Optional[cuquantum.cutensornet.memory.BaseCUDAMemoryManager]

compute_type

CUDA 计算类型。如果未指定,将选择合适的计算类型。

类型

cuquantum.ComputeType

logger

Python Logger 对象。如果未提供 logger 对象,将使用根 logger。

类型

logging.Logger

workspace_info

一个属性属性,存储一个由整数组成的 2 元组,表示当前已分配和预期的工作区大小(以字节为单位)。

set_communicator(comm, provider='None') None[source]

向库注册通信器。目前仅支持 mpi4py.Comm 对象,且唯一支持的提供程序是 "MPI"

get_proc_rank() int[source]

如果先前通过 WorkStream.set_communicator() 设置了通信器,则返回进程排名。

get_num_ranks() int[source]

返回先前通过 WorkStream.set_communicator() 设置的通信器中的进程数。

get_communicator()[source]

如果先前通过 WorkStream.set_communicator() 设置了通信器对象,则返回该对象。

release_workspace(kind='SCRATCH') None[source]

释放工作区。

注意

  • 释放工作区会同时释放其工作区缓冲区,并重置使用此 WorkStream 实例的对象中所需的最大大小。

  • 先前已暴露于此 WorkStream 实例的对象在工作区释放后,不需要显式调用其 prepare 方法。

  • 当中间计算不涉及 cuDensityMat API,或者当后续计算需要的工作区小于前面的计算时,释放工作区缓冲区可能很有用。

  • 对象只有在使用相同的 WorkStream 时才能相互交互,并且不能更改它们使用的 WorkStream

  • 某些对象在创建时需要 WorkStreamStateOperatorAction),而其他对象仅在其 prepare 方法被调用时才需要(Operator)。

  • 某些对象可能间接获取 WorkStreamOperator),而其他对象始终间接获取它(OperatorTermDenseOperatorMultidiagonalOperator)。

注意

compute_type 参数当前未使用,将默认为数据类型。

示例

>>> import cupy as cp
>>> from cuquantum.densitymat import WorkStream

要在新的 CUDA 流上创建 WorkStream,我们可以执行以下操作

>>> ctx = WorkStream(stream=cp.cuda.Stream())