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
的所有对象中所需的最大工作区大小决定。- stream¶
CUDA 流。如果未指定,将使用当前流。
- 类型
Optional[cupy.cuda.stream.Stream]
- memory_limit¶
最大可用内存。可以指定为一个值(带有可选后缀,如 K[iB]、M[iB]、G[iB])或百分比。默认值为设备内存的 80%。
- allocator[source]¶
一个支持
BaseCUDAMemoryManager
协议的对象,用于提取设备内存。如果未提供分配器,将使用来自库软件包的内存分配器(对于 PyTorch 操作数,使用torch.cuda.caching_allocator_alloc()
,否则使用cupy.cuda.alloc()
)。- 类型
Optional[cuquantum.cutensornet.memory.BaseCUDAMemoryManager]
- compute_type¶
CUDA 计算类型。如果未指定,将选择合适的计算类型。
- logger¶
Python Logger 对象。如果未提供 logger 对象,将使用根 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()
设置了通信器对象,则返回该对象。
注意
释放工作区会同时释放其工作区缓冲区,并重置使用此
WorkStream
实例的对象中所需的最大大小。先前已暴露于此
WorkStream
实例的对象在工作区释放后,不需要显式调用其prepare
方法。当中间计算不涉及 cuDensityMat API,或者当后续计算需要的工作区小于前面的计算时,释放工作区缓冲区可能很有用。
对象只有在使用相同的
WorkStream
时才能相互交互,并且不能更改它们使用的WorkStream
。某些对象在创建时需要
WorkStream
(State
、OperatorAction
),而其他对象仅在其prepare
方法被调用时才需要(Operator
)。某些对象可能间接获取
WorkStream
(Operator
),而其他对象始终间接获取它(OperatorTerm
、DenseOperator
、MultidiagonalOperator
)。
注意
compute_type
参数当前未使用,将默认为数据类型。示例
>>> import cupy as cp >>> from cuquantum.densitymat import WorkStream
要在新的 CUDA 流上创建
WorkStream
,我们可以执行以下操作>>> ctx = WorkStream(stream=cp.cuda.Stream())