6、Tensor Storage Layer
ITensor的一个强大的特性是,ITensor可以有广泛的存储格式,同时提供相同的用户界面。用户可以在计算中混合稀疏和密集的张量,并使用相同的高级代码操作任何类型的张量。
重要的是,由于ITensor使用的存储类型是不同的类型,每种类型都可以使用最优的内存布局,而性能关键的张量收缩和分解算法可以专门用于每种存储类型或存储类型的组合。
为此,我们充分利用了Julia的多重调度机制,将专门的算法组织成单独的代码路径,以保持库代码的简单性。这些优化对用户隐藏,用户可以使用*操作将用户合同在一起,并自动获得可用的最佳性能。
ITensor中一些最常见的存储类型有:
Dense storage、Diagonal storage、Combiner storage、Block sparse storage、GPU storage、Empty Storage
比如Empty Storage中可以有如下中专站功能的例子
i = Index(2)
V = [randomITensor(i), randomITensor(i)]
T = ITensor()
for A in VT += A
end
结果
julia> i=Index(2,"i")
(dim=2|id=315|"i")julia> V=[randomITensor(i),randomITensor(i)]
2-element Vector{ITensor}:ITensor ord=1
Dim 1: (dim=2|id=315|"i")
NDTensors.Dense{Float64, Vector{Float64}}2-element1.02902268511895170.23971386175363552ITensor ord=1
Dim 1: (dim=2|id=315|"i")
NDTensors.Dense{Float64, Vector{Float64}}2-element0.7304959210267492-1.0674550061954942julia> T=ITensor()
ITensor ord=0
NDTensors.EmptyStorage{NDTensors.EmptyNumber, NDTensors.Dense{NDTensors.EmptyNumber, Vector{NDTensors.EmptyNumber}}}julia> for A in VT+=Aendjulia> T
ITensor ord=1 (dim=2|id=315|"i")
NDTensors.Dense{Float64, Vector{Float64}}
就是一个空张量。
