Upload
ahui-chung
View
218
Download
0
Embed Size (px)
Citation preview
8/17/2019 Ying Jer Kao-2
1/90
Uni10
The Universal Tensor Network Library
Yun-Da Hsieh, Ying-Jer Kao
Center for Advanced Study in Theoretical Scienceand Department of PhysicsNational Taiwan University
http://www.uni10.org
Tensor Network W
orkshop: Algorithms and ApplicationsIOP, ACS, 2014-12-01~05
http://www.uni10.org/
8/17/2019 Ying Jer Kao-2
2/90
Developers
Yun-Da Hsieh (National Taiwan University)Implementation of Uni10 (C++, CUDA, Python)
Pochung Chen (National Tsing-Hua University)
Design and testing
Tama Ma (Singapore National University)
Cross-platform build
Sukhbinder Singh (Macquarie University)Matlab wrapper
8/17/2019 Ying Jer Kao-2
3/90
Tensor• A tensor is a multidimensional array
i = 1 ,
2 , 3 , … . ,
I
j=1, 2, 3,…., J
k = 1 ,
2 , 3 ,… . , K
A(i,j,k)
A(i,:,:)
A(:,j,:)
A(:,:,k)
A(:,5,1)
A(1,:,3)
A(1,3,:)
8/17/2019 Ying Jer Kao-2
4/90
Tensors in Science
• Data analysis
• Signal and image processing
• Quantum Physics/Information
• Quantum Loop Gravity
• Quantum Chemistry
• Bioinformatics
• Computational neuroscience
8/17/2019 Ying Jer Kao-2
5/90
Tensors in Science
• Data analysis
• Signal and image processing
• Quantum Physics/Information
• Quantum Loop Gravity
• Quantum Chemistry
• Bioinformatics
• Computational neuroscience
8/17/2019 Ying Jer Kao-2
6/90
Graphical Representation
8/17/2019 Ying Jer Kao-2
7/90
Graphical Representation
A =
A1A2
A3
.
.
.
AN
Aα
vector
!
8/17/2019 Ying Jer Kao-2
8/90
Graphical Representation
A =
A1A2
A3
.
.
.
AN
Aα
vector
!
B =
B11 · · · B1n
.
.
.
...
.
.
.
Bm1 · · · Bmn
αβ
! "
matrix
8/17/2019 Ying Jer Kao-2
9/90
Graphical Representation
A =
A1A2
A3
.
.
.
AN
Aα
vector
!
B =
B11 · · · B1n
.
.
.
...
.
.
.
Bm1 · · · Bmn
αβ
! "
matrix
! "
rank-3 tensor
C αβγ
#
8/17/2019 Ying Jer Kao-2
10/90
Graphical Representation
A =
A1A2
A3
.
.
.
AN
Aα
vector
!
B =
B11 · · · B1n
.
.
.
...
.
.
.
Bm1 · · · Bmn
αβ
! "
matrix
! "
rank-3 tensor
C αβγ
#
!1
rank-n tensor
α1α2α3...αn
!2 !3…
!n
8/17/2019 Ying Jer Kao-2
11/90
Graphical Representation
A =
A1A2
A3
.
.
.
AN
Aα
vector
!
B =
B11 · · · B1n
.
.
.
...
.
.
.
Bm1 · · · Bmn
αβ
! "
matrix
! "
rank-3 tensor
C αβγ
#
!1
rank-n tensor
α1α2α3...αn
!2 !3…
!n
S scalar
8/17/2019 Ying Jer Kao-2
12/90
Graphical Representation
product of tensors (matrices)
• Internal lines are summed over• External lines are external indices
R
! " #SQ =
Qαβ =X
γ
Rαγ S γβ
! "
8/17/2019 Ying Jer Kao-2
13/90
Graphical Representation
product of tensors (matrices)
• Internal lines are summed over• External lines are external indices
R
! " #SQ =
Qαβ =X
γ
Rαγ S γβ
! "
B
A C
D
Tr(ABCD)
8/17/2019 Ying Jer Kao-2
14/90
Graphical Representation
product of tensors (matrices)
• Internal lines are summed over• External lines are external indices
R
! " #SQ =
Qαβ =X
γ
Rαγ S γβ
! "
B
A C
D
Tr(ABCD)
i
A B C
! "
j k
T ijk =
X
αβ
AαiBαβjC βk
8/17/2019 Ying Jer Kao-2
15/90
Tensor Networks forQuantum Many-body Problems
PEPS
1D MERA
w1 2 3 w4
uux y
ρ (lower half)
ρ (upper half)
H
2D MERA
Things get messy when fermions are involved
8/17/2019 Ying Jer Kao-2
16/90
Tensor Contraction
• Bookkeeping tensor indices istedious and error prone.
• Programming fermonic systemscan be complicated
• Minimize computation time and
memory usage
• Speed up computation withcompute accelerators (GPU, MIC)
!
" #
A
X
β
Aαβγ B
βµν
!
"
#
A
$
%
BBA
8/17/2019 Ying Jer Kao-2
17/90
HardwareCPU, GPU
Low-Level LibrariesBLAS, LAPACK, CUDA, cuBLAS, Magma
Matlab, C++,Fortran, Python
Tensor Network ApplicationsDMRG, iTEBD, iPEPS, TRG, MERA, etc.
8/17/2019 Ying Jer Kao-2
18/90
HardwareCPU, GPU
Low-Level LibrariesBLAS, LAPACK, CUDA, cuBLAS, Magma
Matlab, C++,Fortran, Python
Tensor Network ApplicationsDMRG, iTEBD, iPEPS, TRG, MERA, etc.
Uni10
Other tensor libraries: iTensor, TNT, SCON, NCON
8/17/2019 Ying Jer Kao-2
19/90
Uni10• Fully implemented in objected-oriented C++
• Aimed toward applications in tensor network algorithms
• Provides basic tensor operations with easy-to-use interface
• A symmetric tensor class UniTensor (Abelian symmetry) withauxiliary classes for quantum numbers, Qnum , blocks Block and
bond labels, Bond and functions performing tensor operations.• A network class Network, where details of the graphical
representations of the networks are processed and stored.
• An engine to construct and analyze the contraction tree for a givennetwork.
• A heuristic algorithm to search for an optimal binary contractionorder based on the computational and memory constraints.
• Provides wrappers for Matlab (soon)and Python (pyUni10).
• Supports acceleration with Nvidia Cuda based GPU.
• Open source LGPL with cite-me license
8/17/2019 Ying Jer Kao-2
20/90
A !
C
D
-1
-2
-3
-4
E
F
1
2
3
4
5
6
7
8
Network
Network
UniTensor Matrix
QnumBond Block
getBlock()
putBlock()
putTensor() launch()
UniTensor
2
1 3
4
Block
QnumBond
Q1
Q2
Q3
QaQb Qc
Qd
Matrix
UniTensor
2
1 3
4
Block
QnumBond
Q1
Q2
Q3
QaQb Qc
Qd
Matrix
UniTensor
2
1 3
4
Block
QnumBond
Q1
Q2
Q3
QaQb Qc
Qd
Matrix
8/17/2019 Ying Jer Kao-2
21/90
Spin-1 Heisenberg Model
H = S1
· S2
1
2
3
4
S2S1
|S zi ∈ {|1i, |0i, | − 1i}
Construct symmetric basis
8/17/2019 Ying Jer Kao-2
22/90
1 3
4
|1>|0>|-1>
|1>|0>|-1>
8/17/2019 Ying Jer Kao-2
23/90
1 3
4
|1>|0>|-1>
|1>|0>|-1>
1 3
4
Sz=1
q#
q#
8/17/2019 Ying Jer Kao-2
24/90
Qnum q0(0), q1(1), qm1(-1);
Bond bdr(BD_IN, [qm1, q0, q1]);
Bond bdc(BD_OUT, [qm1, q0, q1]);
UniTensor T([bdr, bdr, bdc, bdc]);
1 3
4
q#
q#
raw element block element
T.addRawElem(raw)
8/17/2019 Ying Jer Kao-2
25/90
3
4
5
6
1
2
Ta Tb
Ta * Tb
Ta.addLabel([1, 2, 3, 4]);
Tb.addLabel([3, 4, 5, 6]);
8/17/2019 Ying Jer Kao-2
26/90
UniTensor
• Operation• Tc = Ta * Tb;
•Tc = 2.13 * Ta;
• Tc = Ta + Tb;
• permute() and transpose()
•I / O
• write: Ta.save(“out”);
• read: UniTensor Ta(“out”);
• print: cout
8/17/2019 Ying Jer Kao-2
27/90
UniTensor
• Operation• Tc = Ta * Tb;
•Tc = 2.13 * Ta;
• Tc = Ta + Tb;
• permute() and transpose()
•I / O
• write: Ta.save(“out”);
• read: UniTensor Ta(“out”);
• print: cout
8/17/2019 Ying Jer Kao-2
28/90
Symmetries
U(1)
• Total Sz (spin systems)
• Total particle number (fermionic/bosonic systems)
Z2
• Parity
• Key to fermionic system
8/17/2019 Ying Jer Kao-2
29/90
Fermionic system
C1† C2† |0> = -C2† C1† |0>
|1,1> = - |1,1>
minus sign
8/17/2019 Ying Jer Kao-2
30/90
A|0>
|1>
|0>
|1>1
2
4
3
p = 0
p = 1
Particle parity
8/17/2019 Ying Jer Kao-2
31/90
0,0> 0,1> 1,0> 1,1>
0,0> 1 ! ! 2
0,1> ! 3 4 !
1,0> ! 5 6 !
1,1> 7 ! ! 8
A|0>
|1>
|0>
|1>1
2
4
3
p = 0
p = 1
Particle parity
8/17/2019 Ying Jer Kao-2
32/90
Ta * Tb
A
1
2
3
4
B
5
6
minus sign!
4
3
8/17/2019 Ying Jer Kao-2
33/90
A
1
2
B
5
6
minus sign!
3
4
[1, 2, 4, 3] [3, 4, 5, 6]
Before contraction:
Ta.permute([1, 2, 3, 4], 2)
[1, 2, 4, 3] —> [1, 2, 3, 4]
Ta * Tb
4
3
8/17/2019 Ying Jer Kao-2
34/90
0,0> 0,1> 1,0> 1,1>
0,0> 1 ! ! 2
0,1> ! 3 4 !
1,0> ! 5 6 !
1,1> 7 ! ! 8
A|0>
|1>
|0>
|1>1
2
4
3
8/17/2019 Ying Jer Kao-2
35/90
0,0> 0,1> 1,0> 1,1>
0,0> 1 ! ! -2
0,1> ! 3 4 !
1,0> ! 5 6 !
1,1> 7 ! ! -8
swap gates are added in permute()
A|0>
|1>
|0>
|1>1
2
4
3
8/17/2019 Ying Jer Kao-2
36/90
UniTensor & Matrix
• Interactions:• T.qnums();
• T.getBlock(q3);
• T.putBlock(q3);
• Matrix operations:• M.eigh();
• M.svd();
• Mc = Ma * Mb;
• M.transpose();
getBlock(q3) putBlock(q3)
1 3
4
q1q2
q3
q4
"U VT
svd()
U * " * VT
8/17/2019 Ying Jer Kao-2
37/90
Network
File for network connection: demo.txt
C: -1; 7 1D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6
E: 7 5; -3F: 6 8; -4ABCDEF
Network net(“demo.txt”)
A1
2
3
4
!
5
6
C7-1
D8
-2
E-3
F -4
8/17/2019 Ying Jer Kao-2
38/90
Network
C: -1; 7 1D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6
E: 7 5; -3F: 6 8; -4ABCDEF
net
A1
2
3
4
!
5
6
C7-1
D8
-2
E-3
F -4
8/17/2019 Ying Jer Kao-2
39/90
Network - putTensor
net.putTensor(0, C);
C: -1; 7 1D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6
E: 7 5; -3F: 6 8; -4ABCDEF
net
A1
2
3
4
!
5
6
C7-1
D8
-2
E-3
F -4
012345
8/17/2019 Ying Jer Kao-2
40/90
Network - putTensor
net.putTensor(2, A);
C: -1; 7 1D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6
E: 7 5; -3F: 6 8; -4ABCDEF
net
A1
2
3
4
!
5
6
C7-1
D8
-2
E-3
F -4
012345
8/17/2019 Ying Jer Kao-2
41/90
Network - launch
Tresult = net.launch();
C: -1; 7 1D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4ABCDEF
A1
2
3
4
!
5
6
C7-1
D8
-2
E-3
F -4
net
8/17/2019 Ying Jer Kao-2
42/90
Network - reusable
net.putTensor(3, B’)Tresult = net.launch();
C: -1; 7 1D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6
E: 7 5; -3F: 6 8; -4ABCDEF
net
A1
2
3
4
!’5
6
C7-1
D8
-2
E-3
F -4
0123
45
8/17/2019 Ying Jer Kao-2
43/90
Contraction order
C: -1; 7 1D: -2; 2 8
A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4
CDABEF
A1
2
3
4 !
5
6
C7-1
D8
-2
E-3
F-4
Finding the optimal contraction order for a generaltensor network is NP-hard
C.-C. Lam, et al.,Parallel Processing Letters 07, 157 (1997).
8/17/2019 Ying Jer Kao-2
44/90
Contraction order
C: -1; 7 1D: -2; 2 8
A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4
CDABEF
A1
2
3
4 !
5
6
C7-1
D8
-2
E-3
F-4
Finding the optimal contraction order for a generaltensor network is NP-hard
C.-C. Lam, et al.,Parallel Processing Letters 07, 157 (1997).
Using heuristics
8/17/2019 Ying Jer Kao-2
45/90
A B
C
E FD
Network - launch
(((A * B) * C) * E) * (D * F)
C: -1; 7 1
D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3
F: 6 8; -4
CDABEF
8/17/2019 Ying Jer Kao-2
46/90
A B
C
E FD
Network - launch
(((A * B) * C) * E) * (D * F)
C: -1; 7 1
D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3
F: 6 8; -4
net.launch() CDABEF
8/17/2019 Ying Jer Kao-2
47/90
A B
C
E FD
Network - launch
(((A * B) * C) * E) * (D * F)
C: -1; 7 1
D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3
F: 6 8; -4
net.launch() CDABEF
Using heuristics to generate
an “optimal” binary contraction tree
8/17/2019 Ying Jer Kao-2
48/90
Why binary?
Cost: abclmn
A
B C
a
b c
l
m
n
Dabc =
X
lmn
AalnBbmlC cnm
8/17/2019 Ying Jer Kao-2
49/90
A
B C
a
b c
lm
n
pairwise contractions
A
B C
Cost: b c l m n + a b c l n
Cost: a b c l m n
(pairwise)
(direct sum)
pairwise is better if: (1 / a + 1 / m) < 1
8/17/2019 Ying Jer Kao-2
50/90
A
B C
a
b c
lm
n
pairwise contractions
A
B C
(pairwise)
(direct sum)b c l n
Cost: b c l m n + a b c l n
Cost: a b c l m n
pairwise is better if: (1 / a + 1 / m) < 1
Intermediatetensor
8/17/2019 Ying Jer Kao-2
51/90
A
B C
a
b c
l
m
n
pairwise contractions
A
B C
B
C A
C
A B
(1 / a + 1 / m) (1 / b + 1 / n) (1 / c + 1 / l )
b c l n a c l m a b m n
Time
Space
8/17/2019 Ying Jer Kao-2
52/90
A B C D E F G
B D E A C F G
A G C FD EB
Nz
Nx Ny
getCost(Nz) =min( Cost(Nx * Ny) + getCost(Nx) + getCost(Ny) )
For all possible (Nx, Ny)(2n−1−
1)
n!(n− 1)!
2n−1Total:
Pfeifer et al., arXiv:1304.6112(2013)
a
8/17/2019 Ying Jer Kao-2
53/90
A
B C
a
b c
l
m
n
pairwise contractions
A
B C
B
C A
C
A B
(1 / a + 1 / m) (1 / b + 1 / n) (1 / c + 1 / l )
b c l n a c l m a b m n
Time
Space
Assume:a=b=c
a
8/17/2019 Ying Jer Kao-2
54/90
A
B C
a
b c
l
m
n
pairwise contractions
A
B C
Efficiency of B * C:(ElemNum(B) + ElemNum(C)) / ElemNum(B * C)
B * C: (lmb + nmc) / lnbc= m / nc + m / lb
8/17/2019 Ying Jer Kao-2
55/90
Network
C: -1; 7 1D: -2; 2 8
A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4
CDABEF
A
2
3 4
!
5 6
C
7
-1
D
8
-2
E- 3
F-4 Optimal contraction order: NP-hard
8/17/2019 Ying Jer Kao-2
56/90
Network
C: -1; 7 1D: -2; 2 8
A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4
CDABEF
A
2
3 4
!
5 6
C
7
-1
D
8
-2
E- 3
F-4 Use human intelligence
8/17/2019 Ying Jer Kao-2
57/90
Network
C: -1; 7 1D: -2; 2 8
A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4
CDABEF
A
2
3 4
!
5 6
C
7
-1
D
8
-2
E- 3
F-4
ORDER: ABCEDF
Give a suggested sequence of contraction
Use human intelligence
8/17/2019 Ying Jer Kao-2
58/90
O[log(n)] ~ O[n]n!(n− 1)!
2n−1
A B
C
E FD
ORDER: ABCEDF
Not always optimal, but the algorithm is fast,
and several trials can give a better sequence.
8/17/2019 Ying Jer Kao-2
59/90
Network - launch
A 1 2
3 4
!
5 6
C
7
- 1
D
8
- 2
E
- 3
F
- 4
ABCDEF
8/17/2019 Ying Jer Kao-2
60/90
Network - launch
A 1 2
3 4
!
5 6
C
7
- 1
D
8
- 2
E
- 3
F
- 4
ABCDEF
A B
8/17/2019 Ying Jer Kao-2
61/90
C
Network - launch
A 1 2
3 4
!
5 6
C
7
- 1
D
8
- 2
E
- 3
F
- 4
ABCDEF
A B
8/17/2019 Ying Jer Kao-2
62/90
D
C
Network - launch
A 1 2
3 4
!
5 6
C
7
- 1
D
8
- 2
E
- 3
F
- 4
ABCDEF
A B
8/17/2019 Ying Jer Kao-2
63/90
E
D
C
Network - launch
A 1 2
3 4
!
5 6
C
7
- 1
D
8
- 2
E
- 3
F
- 4
ABCDEF
A B
8/17/2019 Ying Jer Kao-2
64/90
Network - launch
ABCDEF
E D
C
A B
A 1 2
3 4
!
5 6
C
7
- 1
D
8
- 2
E
- 3
F
- 4
8/17/2019 Ying Jer Kao-2
65/90
Network - launch
ABCDEF
D
E
C
A B
A 1 2
3 4
!
5 6
C
7
- 1
D
8
- 2
E
- 3
F
- 4
8/17/2019 Ying Jer Kao-2
66/90
A B
C
E FD
Network - launch
ABCDEF
(((A * B) * C) * E) * (D * F)
A 1 2
3 4
!
5 6
C
7
- 1
D
8
- 2
E
- 3
F
- 4
8/17/2019 Ying Jer Kao-2
67/90
A B
C
E FD
Network - launch
C: -1; 7 1
D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4
net.launch()
CDABEF
ORDER: (((A * B) * C) * E) * (D * F)
8/17/2019 Ying Jer Kao-2
68/90
A B
C
E FD
Network - launch
(((A * B) * C) * E) * (D * F)
C: -1; 7 1D: -2; 2 8
A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4ABCDEF
8/17/2019 Ying Jer Kao-2
69/90
A B
C
E FD
Network - launch
(((A * B) * C) * E) * (D * F)
C: -1; 7 1D: -2; 2 8
A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4ABCDEF
for fermionic systemCDABEF != ABCEDF
8/17/2019 Ying Jer Kao-2
70/90
A B
C
E FD
Network - launch
(((A * B) * C) * E) * (D * F)
C: -1; 7 1D: -2; 2 8
A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4ABCDEF
for fermionic systemCDABEF != ABCEDF
CDABEF = net.launch()
E l C T f M t i
8/17/2019 Ying Jer Kao-2
71/90
Example: Corner Transfer Matrix
h ÔiRomán Orús and Guifré Vidal, PRB 80, 094403 (2009)
• Used in iPEPS toestimate the environment
• Different bond dims• $ bd: boundary index • $ int: internal index • d : physical index
• Expectation value of an
operator
CTM
http://ctm.net/
8/17/2019 Ying Jer Kao-2
72/90
CTM.net
C1: 1 2C2: 34 35
C3: 41 42
C4: 19 16
T1b: 1 20 3 4
T1a: 20 34 21 22
T2a: 35 38 36 37
T2b: 38 41 39 40
T3b: 42 33 31 32
T3a: 33 19 17 18
T4a: 16 13 14 15
T4b: 13 2 5 6
A1: 4 24 10 6 8
A1T: 3 23 9 5 7
B1: 22 37 27 24 25
B1T: 21 36 26 23 25
A2: 27 40 32 29 30
A2T: 26 39 31 28 30
B2: 10 29 18 15 12
B2T: 9 28 17 14 11O: 7 8 11 12
TOUT:
ORDER: C1 T1b T4b A1T A1 O B2T B2 T4a C4 T3a T1a B1T B1 A2T A2 T3b C2 T2a T2b C3
http://ctm.net/
8/17/2019 Ying Jer Kao-2
73/90
Memory Requirement: 37846846304
Sum of memory usage: 47505684008
Maximun tensor:
elemNum: 4304672100
10 bonds and labels: 20, 13, 23, 24, 28, 17, 14, 29, 18, 15,
((((((((((((((((((((C1 T1b) T4b) A1T) A1) O) B2T)
B2) T4a) C4) T3a) T1a) B1T) B1) A2T) A2) T3b) C2) T2a) T2b) C3)
8/17/2019 Ying Jer Kao-2
74/90
Memory Requirement: 6810336800
Sum of memory usage: 16039257608
Maximun tensor:
elemNum: 425152800
9 bonds and labels: 20, 13, 23, 24, 10, 12, 28, 17, 14,
8/17/2019 Ying Jer Kao-2
75/90
Memory Requirement: 6810336800
Sum of memory usage: 16039257608
Maximun tensor:
elemNum: 425152800
9 bonds and labels: 20, 13, 23, 24, 10, 12, 28, 17, 14,
Memory Requirement: 37846846304
Sum of memory usage: 47505684008
Maximun tensor:
elemNum: 4304672100
10 bonds and labels: 20, 13, 23, 24, 28, 17, 14, 29, 18, 15,
Memory Requirement:6 810 336 800 / 37 846 846 304 =
0.17994463119
Total Memory Usage
16 039 257 608 / 47 505 684 008 =0.33762817951
8/17/2019 Ying Jer Kao-2
76/90
M e m o r y
U s a g e
Bond Dimension
!
8
"!
7
Courtesy: Marc Ziegler @ U Mainz
C d S l MERA
8/17/2019 Ying Jer Kao-2
77/90
Code Sample: MERA
!"
!# !$
!%
!" !%
!# !$
&
"
% '
#
(
$
)
* +
"& ""
w1 w2
w†2
w†1
u†
u
Ascending operator:renormalization of a two-site operator
C d S l MERA
8/17/2019 Ying Jer Kao-2
78/90
!"
!# !$
!%
&
"
%
'
# (
$
)
*
+
"& ""
w1 w2
w†2
w†1
u†
u Qnum q10(1, PRT_EVEN);
Qnum q_10(-1, PRT_EVEN);
Qnum q30(3, PRT_EVEN);
Qnum q_11(PRTF_ODD, -1, PRT_EVEN);
Qnum q11(PRTF_ODD, 1, PRT_EVEN);
Qnum q_31(PRTF_ODD, -3, PRT_EVEN);
#include "uni10.hpp"
Define quantum numbers
Code Sample: MERA
Code Sample: MERA
8/17/2019 Ying Jer Kao-2
79/90
!"
!# !$
!%
&
"
%
'
# (
$
)
*
+
"& ""
w1 w2
w†
2w
†
1
u†
u
vector bonds;
vector qnums;
qnums.push_back(q10);
qnums.push_back(q_11);
Bond bdr(BD_IN, qnums);Bond bdc(BD_OUT, qnums);
bonds.push_back(bdr);
bonds.push_back(bdr);
bonds.push_back(bdc);
bonds.push_back(bdc);
Assign quantum numbers to bonds
Code Sample: MERA
Code Sample MERA
8/17/2019 Ying Jer Kao-2
80/90
!"
!# !$
!%
&
"
%
'
# (
$
)
*
+
"& ""
w1 w2
w†
2w
†
1
u†
u
Define Hamiltonian operator
double H_elem[] = {1.0/4, 0, 0, 0,
0, -1.0/4, 1.0/2, 0, 0, 1.0/2, -1.0/4, 0,
0, 0, 0, 1.0/4};
UniTensor H0(bonds, "Ob");
H0.addRawElem(H_elem);
Code Sample: MERA
Code Sample MERA
8/17/2019 Ying Jer Kao-2
81/90
!"
!# !$
!%
&
"
%
'
# (
$
)
*
+
"& ""
w1 w2
w†
2w
†
1
u†
u
vector qnums1;qnums1.push_back(q30);
qnums1.push_back(q11);
qnums1.push_back(q11);
qnums1.push_back(q11);
qnums1.push_back(q_10);
qnums1.push_back(q_10);
qnums1.push_back(q_10);
qnums1.push_back(q_31);
Bond bdr1(BD_IN, qnums1);
bonds.clear();
bonds.push_back(bdr1);
bonds.push_back(bdc);
bonds.push_back(bdc);
bonds.push_back(bdc);
UniTensor W1(bonds, "W1");
W1.orthoRand();
UniTensor W1T = W1;
W1T.transpose();
Code Sample: MERA
Define w, w†
Code Sample: MERA
8/17/2019 Ying Jer Kao-2
82/90
!"
!# !$
!%
&
"
%
'
# (
$
)
*
+
"& ""
w1 w2
w
†2w
†1
u†
u
vector tens;
tens.push_back(&W1);
tens.push_back(&W2);
tens.push_back(&U);
tens.push_back(&H0);tens.push_back(&UT);
tens.push_back(&W1T);
tens.push_back(&W2T);
UniTensor H1, H2;
Network asdL(“AscendL.net", tens);
H1 = asdL.launch();
Code Sample: MERA
Assign tensors into network
Code Sample: MERA
8/17/2019 Ying Jer Kao-2
83/90
!"
!# !$
!%
&
"
%
'
# (
$
)
*
+
"& ""
w1 w2
w†
2
w†
1
u†
u
W1: -1; 0 1 3
W2: -2; 7 10 11
U: 3 7; 4 8Ob: 1 4; 2 5
UT: 5 8; 6 9
W1T: 0 2 6; -3
W2T: 9 10 11; -4
TOUT:-1 -2; -3 -4
ORDER: (W1T ((W1 (Ob ((W2 * W2T) ( U, UT))))) )
AscendL.net
Code Sample: MERA
Code Sample: MERA
8/17/2019 Ying Jer Kao-2
84/90
!"
!# !$
!%
&
"
%
'
# (
$
)
*
+
"& ""
w1 w2
w†
2
w†
1
u†
u asdL.putTensor(0, &W1);
asdL.putTensor(1, &W2);asdL.putTensor(2, &U);
asdL.putTensor(3, &H0);
asdL.putTensor(4, &UT);
asdL.putTensor(5, &W1T);
asdL.putTensor(6, &W2T);
H2 = asdL.launch();
8/17/2019 Ying Jer Kao-2
85/90
pyUni10
• Programming in C++ is too hardcore.
• Need something that even a layman knows how toprogram.
• Take advantage of the beauty of Python.
• pyUni10: Wrapping the power of Uni10 with aeasy-to-program Python interface.
A l ti ith GPU
8/17/2019 Ying Jer Kao-2
86/90
Acceleration with GPU
GPU CPU
!
"
#
AA$
%
BB"
A l ti ith GPU
8/17/2019 Ying Jer Kao-2
87/90
Acceleration with GPU
GPU CPU
!
#
AA * B$
%
Switching from CPU to GPU versionwithout any change in your functions
Unified API
Uni10
8/17/2019 Ying Jer Kao-2
88/90
Uni10• Geared toward tensor network algorithms
• Reduce development time
• Behind-the-scene optimization
• Support for Python (pyUni10) and Matlab (soon)
• To do:
• GUI tools for network generation
• Non-abelian symmetries: SU(2)• OpenCL, MIC, Multi-GPU/Multi-node support
• Better search algorithm for contraction order (TensorContraction Engine, etc.)
http://uni10.org
N t k
http://uni10.org/
8/17/2019 Ying Jer Kao-2
89/90
A !
C
D
-1
-2
-3
-4
E
F
1
2
3
4
5
6
7
8
Network
Network
UniTensor Matrix
QnumBond Block
getBlock()
putBlock()
putTensor() launch()
UniTensor
2
1 3
4Block
QnumBond
Q1
Q2
Q3
QaQb Qc
Qd
Matrix
UniTensor
2
1 3
4Block
QnumBond
Q1
Q2
Q3
QaQb Qc
Qd
Matrix
UniTensor
2
1 3
4Block
QnumBond
Q1
Q2
Q3
QaQb Qc
Qd
Matrix
Memory Hierarchy
8/17/2019 Ying Jer Kao-2
90/90
Memory Hierarchy
"#$% '('$)*
")+, -
.#$/0 123 45.#$/0 143 45.#$/0 1-3 45
.#$/0 123 -5.#$/0 143 -5.#$/0 1-3 -5
")+, 4
.#$/0 143 45
.#$/0 143 -5
.#$/0 143 25
.#$/0 1-3 45
.#$/0 1-3 -5
.#$/0 1-3 25
67)(&, .#$/0
8()9%#$/0 :7&)(,
'('$)*
67)(&,
8()9;7)(&, #$/
'('$)*