Computing with di ff erent formats can require very di ff erent code A = B ∘ C Coordinate ✕ Dense array CSR ✕ Dense array CSR ✕ Coordinate for (int pB = B1_pos[0]; for (int i = 0; int pC1 = C1_pos[0]; pB < B1_pos[1]; i < M; while (pC1 < C1_pos[1]) { pB++) { i++) { int i = C1_crd[pC1]; int i = B1_crd[pB]; for (int pB = B2_pos[i]; int C1_segend = pC1 + 1; int j = B2_crd[pB]; pB < B2_pos[i + 1]; while (C1_segend < C1_pos[1] && int pC = i * N + j; pB++) { C1_crd[C1_segend] == i) int pA = i * N + j; int j = B2_crd[pB]; C1_segend++; A[pA] = B[pB] * C[pC]; int pC = i * N + j; int pB2 = B2_pos[i]; } int pA = i * N + j; int pC2 = pC1; A[pA] = B[pB] * C[pC]; while (pB2 < B2_pos[i + 1] && } pC2 < C1_segend) { } int jB2 = B2_crd[pB2]; int jC2 = C2_crd[pC2]; int j = min(jB2, jC2); int pA = i * N + j; if (jB2 == j && jC2 == j) A[pA] = B[pB2] * C[pC2]; if (jB2 == j) pB2++; if (jC2 == j) pC2++; } pC1 = C1_segend; } 10
Hand-coding support for a wide range of formats is infeasible A = B ∘ C Coordinate ✕ Dense array CSR ✕ Dense array CSR ✕ Coordinate 11
Hand-coding support for a wide range of formats is infeasible A = B ∘ C Coordinate ✕ Dense array CSR ✕ Dense array CSR ✕ Coordinate 11
Hand-coding support for a wide range of formats is infeasible A = B ∘ C Coordinate ✕ Dense array CSR ✕ Dense array CSR ✕ Coordinate Dense array ✕ Dense array Coordinate ✕ Coordinate CSR ✕ CSR DIA ✕ DIA DIA ✕ Dense array DIA ✕ Coordinate DIA ✕ CSR ELLPACK ✕ ELLPACK ELLPACK ✕ Dense array ELLPACK ✕ Coordinate ELLPACK ✕ CSR ELLPACK ✕ DIA BCSR ✕ BCSR BCSR ✕ Dense array BCSR ✕ Coordinate 11
Hand-coding support for a wide range of formats is infeasible A = B ∘ C A = B ∘ C ∘ D Coordinate ✕ Dense array Dense array ✕ CSR ✕ CSR Coordinate ✕ CSR ✕ CSR CSR ✕ Dense array CSR ✕ CSR ✕ CSR CSR ✕ Coordinate Dense array ✕ Coordinate ✕ CSR Dense array ✕ Dense array Dense array ✕ Dense array ✕ CSR Coordinate ✕ Coordinate Coordinate ✕ Coordinate ✕ CSR CSR ✕ CSR DIA ✕ Coordinate ✕ Dense array DIA ✕ DIA DIA ✕ Coordinate ✕ CSR DIA ✕ Dense array DIA ✕ Dense array ✕ CSR DIA ✕ Coordinate DIA ✕ CSR ✕ CSR DIA ✕ CSR DIA ✕ Coordinate ✕ Coordinate ELLPACK ✕ ELLPACK DIA ✕ Dense array ✕ Dense array ELLPACK ✕ Dense array DIA ✕ DIA ✕ CSR ELLPACK ✕ Coordinate DIA ✕ DIA ✕ Coordinate ELLPACK ✕ CSR DIA ✕ DIA ✕ Dense array ELLPACK ✕ DIA DIA ✕ DIA ✕ DIA BCSR ✕ BCSR ELLPACK ✕ ELLPACK ✕ DIA BCSR ✕ Dense array ELLPACK ✕ CSR ✕ DIA BCSR ✕ Coordinate 11 ELLPACK ✕ BCSR ✕ DIA
Hand-coding support for a wide range of formats is infeasible A = B ∘ C A = B ∘ C ∘ D y = Ax + z Dense array ✕ Dense array ✕ Dense array Coordinate ✕ Dense array Dense array ✕ CSR ✕ CSR Dense array ✕ Dense array ✕ Sparse vector Coordinate ✕ CSR ✕ CSR CSR ✕ Dense array Dense array ✕ Dense array ✕ Hash map CSR ✕ CSR ✕ CSR CSR ✕ Coordinate Dense array ✕ Sparse vector ✕ Sparse vector Dense array ✕ Coordinate ✕ CSR Dense array ✕ Dense array Dense array ✕ Sparse vector ✕ Hash map Dense array ✕ Dense array ✕ CSR Coordinate ✕ Coordinate Dense array ✕ Hash map ✕ Sparse vector Coordinate ✕ Coordinate ✕ CSR CSR ✕ CSR Dense array ✕ Sparse vector ✕ Dense array DIA ✕ Coordinate ✕ Dense array DIA ✕ DIA Coordinate ✕ Dense array ✕ Dense array DIA ✕ Coordinate ✕ CSR DIA ✕ Dense array Coordinate ✕ Sparse vector ✕ Dense array DIA ✕ Dense array ✕ CSR DIA ✕ Coordinate Coordinate ✕ Dense array ✕ Hash map DIA ✕ CSR ✕ CSR DIA ✕ CSR Coordinate ✕ Sparse vector ✕ Hash map DIA ✕ Coordinate ✕ Coordinate Coordinate ✕ Hash map ✕ Sparse vector ELLPACK ✕ ELLPACK DIA ✕ Dense array ✕ Dense array CSR ✕ Dense array ✕ Dense array ELLPACK ✕ Dense array DIA ✕ DIA ✕ CSR CSR ✕ Dense array ✕ Sparse vector ELLPACK ✕ Coordinate DIA ✕ DIA ✕ Coordinate CSR ✕ Hash map ✕ Sparse vector ELLPACK ✕ CSR DIA ✕ DIA ✕ Dense array CSR ✕ Hash map ✕ Dense array ELLPACK ✕ DIA CSR ✕ Sparse vector ✕ Dense array DIA ✕ DIA ✕ DIA BCSR ✕ BCSR DIA ✕ Dense array ✕ Dense array ELLPACK ✕ ELLPACK ✕ DIA BCSR ✕ Dense array DIA ✕ Hash map ✕ Dense array ELLPACK ✕ CSR ✕ DIA BCSR ✕ Coordinate ELLPACK ✕ Dense array ✕ Sparse vector 11 ELLPACK ✕ BCSR ✕ DIA
Format Abstraction & Code Generation DIA x supports Dense no yes locate? Range y supports y supports Mode-generic tensor yes yes Offset locate? locate? Compressed no Singleton x unordered yes no and y ordered? Dense Dense no co-iterate over x iterate over x and iterate over y and and y locate into y locate into x Evaluation 12
Format Abstraction & Code Generation DIA x supports Dense no yes locate? Range y supports y supports Mode-generic tensor yes yes Offset locate? locate? Compressed no Singleton x unordered yes no and y ordered? Dense Dense no co-iterate over x iterate over x and iterate over y and and y locate into y locate into x Evaluation 12
Format Abstraction & Code Generation DIA x supports Dense no yes locate? Range y supports y supports Mode-generic tensor yes yes Offset locate? locate? Compressed no Singleton x unordered yes no and y ordered? Dense Dense no co-iterate over x iterate over x and iterate over y and and y locate into y locate into x Evaluation 12
Tensor formats can be viewed as compositions of level formats A 0 B C D 1 E F G 0 2 H J 1 0 1 2 3 13
Tensor formats can be viewed as compositions of level formats 3 A 0 B C 0 3 5 9 D 1 0 1 1 0 1 0 0 1 1 E F G 0 0 0 2 3 1 1 3 0 3 2 H J 1 0 1 2 3 A B C D E F G H J 0 1 2 3 4 5 6 7 8 13
Tensor formats can be viewed as compositions of level formats 3 A 0 B C 0 3 5 9 D 0 1 1 0 1 0 0 1 1 1 E F G 0 0 0 2 3 1 1 3 0 3 2 H J 1 0 1 2 3 A B C D E F G H J 0 1 2 3 4 5 6 7 8 13
Tensor formats can be viewed as compositions of level formats 3 Slices A 0 B C 0 3 5 9 D 0 1 1 0 1 0 0 1 1 1 E F G 0 0 0 2 3 1 1 3 0 3 2 H J 1 0 1 2 3 A B C D E F G H J 0 1 2 3 4 5 6 7 8 13
Tensor formats can be viewed as compositions of level formats 3 A 0 B C 0 3 5 9 D Rows 0 1 1 0 1 0 0 1 1 1 E F G 0 0 0 2 3 1 1 3 0 3 2 H J 1 0 1 2 3 A B C D E F G H J 0 1 2 3 4 5 6 7 8 13
Tensor formats can be viewed as compositions of level formats 3 A 0 B C 0 3 5 9 D 0 1 1 0 1 0 0 1 1 1 E F G 0 0 0 2 3 1 1 3 0 3 Columns 2 H J 1 0 1 2 3 A B C D E F G H J 0 1 2 3 4 5 6 7 8 13
Tensor formats can be viewed as compositions of level formats 3 Dense A 0 B C 0 3 5 9 D Compressed 0 1 1 0 1 0 0 1 1 1 E F G 0 0 0 2 3 1 1 3 0 3 Singleton 2 H J 1 0 1 2 3 A B C D E F G H J 0 1 2 3 4 5 6 7 8 13
The same level formats can be composed in many ways Dense Compressed Singleton 14
The same level formats can be composed in many ways Dense Compressed Singleton 0 1 2 3 A B 0 C D E 1 F 2 14
The same level formats can be composed in many ways Dense Compressed Singleton 3 0 1 2 3 Dense A B 0 C D E 1 F 2 14
The same level formats can be composed in many ways Dense Compressed Singleton 3 0 1 2 3 Dense A B 0 0 2 5 6 C D E 1 Compressed 0 2 1 2 3 3 F 2 A B C D E F 14
The same level formats can be composed in many ways Dense Compressed Singleton CSR { 3 0 1 2 3 A B 0 0 2 5 6 C D E 1 0 2 1 2 3 3 F 2 A B C D E F 14
The same level formats can be composed in many ways Dense Compressed Singleton 0 1 2 3 A B 0 C D E 1 F 2 15
The same level formats can be composed in many ways Dense Compressed Singleton 0 6 0 1 2 3 Compressed A B 0 0 1 1 1 2 0 C D E 1 F 2 15
The same level formats can be composed in many ways Dense Compressed Singleton 0 6 0 1 2 3 Compressed A B 0 0 1 1 1 2 0 C D E 1 0 2 1 2 3 3 Singleton F 2 A B C D E F 15
The same level formats can be composed in many ways Dense Compressed Singleton Coordinate { 0 6 0 1 2 3 A B 0 0 1 1 1 2 0 C D E 1 0 2 1 2 3 3 F 2 A B C D E F 15
The same level formats can be composed in many ways Dense Compressed Singleton 16
The same level formats can be composed in many ways Dense Compressed Singleton Level formats Coordinate matrix CSR Compressed Dense Singleton Compressed [Tinney and Walker, 1967] Tensor formats 16
The same level formats can be composed in many ways Dense Compressed Singleton Level formats Coordinate matrix CSR Dense array tensor Coordinate tensor Compressed Dense Dense Compressed Singleton Compressed Dense Singleton Dense Singleton [Tinney and Walker, 1967] Mode-generic tensor Compressed Singleton Tensor Dense formats Dense [Baskaran et al. 2012] 16
The same level formats can be composed in many ways Dense Compressed Singleton Level formats Coordinate matrix CSR Dense array tensor Coordinate tensor Compressed Dense Dense Compressed Singleton Compressed Dense Singleton Dense Singleton [Tinney and Walker, 1967] CSB Mode-generic tensor BCSR ELLPACK Dense Compressed Dense Dense Singleton Compressed Dense Dense Tensor Dense Dense Compressed Singleton formats Dense Dense Singleton [Kincaid et al. 1989] [Baskaran et al. 2012] [Im and Yelick 1998] [Buluç et al. 2009] 16
The same level formats can be composed in many ways Dense Compressed Singleton Level formats Hashed Range Offset Coordinate matrix CSR Dense array tensor Coordinate tensor Compressed Dense Dense Compressed Singleton Compressed Dense Singleton Dense Singleton [Tinney and Walker, 1967] CSB Mode-generic tensor BCSR ELLPACK Dense Compressed Dense Dense Singleton Compressed Dense Dense Tensor Dense Dense Compressed Singleton formats Dense Dense Singleton [Kincaid et al. 1989] [Baskaran et al. 2012] [Im and Yelick 1998] [Buluç et al. 2009] 16
The same level formats can be composed in many ways Dense Compressed Singleton Level formats Hashed Range Offset Coordinate matrix CSR Dense array tensor Coordinate tensor Compressed Dense Dense Compressed Singleton Compressed Dense Singleton Dense Singleton [Tinney and Walker, 1967] CSB Mode-generic tensor BCSR ELLPACK Dense Compressed Dense Dense Singleton Compressed Dense Dense Tensor Dense Dense Compressed Singleton formats Dense Dense Singleton [Kincaid et al. 1989] [Baskaran et al. 2012] [Im and Yelick 1998] [Buluç et al. 2009] Block DIA Hash map vector Hash map matrix DIA Dense Hashed Hashed Dense Range Hashed Range Offset [Patwary et al. 2015] Offset Dense Dense [Saad 2003] 16
<latexit sha1_base64="4q1Sk4lxncbqFoMX5S1GLw3t+GQ=">ACIXicbVDLSgMxFM34rPVdekmWIQKIjMiWFyVunFZwT6gLSWTuW2DmcyQ3BHL0F9x46+4caFId+LPmD4W2vZA4OSce29yjx9LYdB1v52V1bX1jc3MVnZ7Z3dvP3dwWDNRojlUeSQj3fCZASkUVFGghEasgYW+hLr/eDv260+gjYjUAw5iaIesp0RXcIZW6uSKZXpDCy2EZ0wDUAaG53R641FoJxkDwTLprJPLuxfuBHSReDOSJzNUOrlRK4h4EoJCLpkxTc+NsZ0yjYJLGZbiYGY8UfWg6alioVg2ulkwyE9tUpAu5G2RyGdqH87UhYaMwh9Wxky7Jt5bywu85oJdovtVKg4QVB8+lA3kRQjOo6LBkIDRzmwhHEt7F8p7zPNONpQszYEb37lRVK7vPAsv7/Kl8qzODLkmJyQAvHINSmRO1IhVcLJC3kjH+TeXenS9nNC1dcWY9R+QfnJ9fTfykRA=</latexit> <latexit sha1_base64="4q1Sk4lxncbqFoMX5S1GLw3t+GQ=">ACIXicbVDLSgMxFM34rPVdekmWIQKIjMiWFyVunFZwT6gLSWTuW2DmcyQ3BHL0F9x46+4caFId+LPmD4W2vZA4OSce29yjx9LYdB1v52V1bX1jc3MVnZ7Z3dvP3dwWDNRojlUeSQj3fCZASkUVFGghEasgYW+hLr/eDv260+gjYjUAw5iaIesp0RXcIZW6uSKZXpDCy2EZ0wDUAaG53R641FoJxkDwTLprJPLuxfuBHSReDOSJzNUOrlRK4h4EoJCLpkxTc+NsZ0yjYJLGZbiYGY8UfWg6alioVg2ulkwyE9tUpAu5G2RyGdqH87UhYaMwh9Wxky7Jt5bywu85oJdovtVKg4QVB8+lA3kRQjOo6LBkIDRzmwhHEt7F8p7zPNONpQszYEb37lRVK7vPAsv7/Kl8qzODLkmJyQAvHINSmRO1IhVcLJC3kjH+TeXenS9nNC1dcWY9R+QfnJ9fTfykRA=</latexit> <latexit sha1_base64="4q1Sk4lxncbqFoMX5S1GLw3t+GQ=">ACIXicbVDLSgMxFM34rPVdekmWIQKIjMiWFyVunFZwT6gLSWTuW2DmcyQ3BHL0F9x46+4caFId+LPmD4W2vZA4OSce29yjx9LYdB1v52V1bX1jc3MVnZ7Z3dvP3dwWDNRojlUeSQj3fCZASkUVFGghEasgYW+hLr/eDv260+gjYjUAw5iaIesp0RXcIZW6uSKZXpDCy2EZ0wDUAaG53R641FoJxkDwTLprJPLuxfuBHSReDOSJzNUOrlRK4h4EoJCLpkxTc+NsZ0yjYJLGZbiYGY8UfWg6alioVg2ulkwyE9tUpAu5G2RyGdqH87UhYaMwh9Wxky7Jt5bywu85oJdovtVKg4QVB8+lA3kRQjOo6LBkIDRzmwhHEt7F8p7zPNONpQszYEb37lRVK7vPAsv7/Kl8qzODLkmJyQAvHINSmRO1IhVcLJC3kjH+TeXenS9nNC1dcWY9R+QfnJ9fTfykRA=</latexit> <latexit sha1_base64="4q1Sk4lxncbqFoMX5S1GLw3t+GQ=">ACIXicbVDLSgMxFM34rPVdekmWIQKIjMiWFyVunFZwT6gLSWTuW2DmcyQ3BHL0F9x46+4caFId+LPmD4W2vZA4OSce29yjx9LYdB1v52V1bX1jc3MVnZ7Z3dvP3dwWDNRojlUeSQj3fCZASkUVFGghEasgYW+hLr/eDv260+gjYjUAw5iaIesp0RXcIZW6uSKZXpDCy2EZ0wDUAaG53R641FoJxkDwTLprJPLuxfuBHSReDOSJzNUOrlRK4h4EoJCLpkxTc+NsZ0yjYJLGZbiYGY8UfWg6alioVg2ulkwyE9tUpAu5G2RyGdqH87UhYaMwh9Wxky7Jt5bywu85oJdovtVKg4QVB8+lA3kRQjOo6LBkIDRzmwhHEt7F8p7zPNONpQszYEb37lRVK7vPAsv7/Kl8qzODLkmJyQAvHINSmRO1IhVcLJC3kjH+TeXenS9nNC1dcWY9R+QfnJ9fTfykRA=</latexit> <latexit sha1_base64="znx8HB3iu6URMn3Pu43WiyqTY=">ACAHicbVC7SgNBFJ31GeNr1cLCZjAIsQm7IihWQRvLCOYBSQizk7vJkNmdZeauGJY0/oqNhSK2foadf+PkUWjigYHDOfdw54gkcKg5307S8srq2vruY385tb2zq67t18zKtUcqlxJpRsBMyBFDFUKGRaGBRIKEeDG7Gfv0BtBEqvsdhAu2I9WIRCs7QSh3kNMrWmwhPGLGVWSzxkB3dNpxC17Jm4AuEn9GCmSGSsf9anUVTyOIkUtmTNP3EmxnTKPgEkb5VmogYXzAetC0NGYRmHY2OWBET6zSpaHS9sVIJ+rvRMYiY4ZRYCcjhn0z743F/7xmiuFlOxNxkiLEfLoTCVFRcdt0K7QwFEOLWFcC/tXyvtM462s7wtwZ8/eZHUzkq+5XfnhfL1rI4cOSLHpEh8ckHK5JZUSJVwMiLP5JW8OU/Oi/PufExHl5xZ5oD8gfP5Awmdlg0=</latexit> <latexit sha1_base64="znx8HB3iu6URMn3Pu43WiyqTY=">ACAHicbVC7SgNBFJ31GeNr1cLCZjAIsQm7IihWQRvLCOYBSQizk7vJkNmdZeauGJY0/oqNhSK2foadf+PkUWjigYHDOfdw54gkcKg5307S8srq2vruY385tb2zq67t18zKtUcqlxJpRsBMyBFDFUKGRaGBRIKEeDG7Gfv0BtBEqvsdhAu2I9WIRCs7QSh3kNMrWmwhPGLGVWSzxkB3dNpxC17Jm4AuEn9GCmSGSsf9anUVTyOIkUtmTNP3EmxnTKPgEkb5VmogYXzAetC0NGYRmHY2OWBET6zSpaHS9sVIJ+rvRMYiY4ZRYCcjhn0z743F/7xmiuFlOxNxkiLEfLoTCVFRcdt0K7QwFEOLWFcC/tXyvtM462s7wtwZ8/eZHUzkq+5XfnhfL1rI4cOSLHpEh8ckHK5JZUSJVwMiLP5JW8OU/Oi/PufExHl5xZ5oD8gfP5Awmdlg0=</latexit> <latexit sha1_base64="znx8HB3iu6URMn3Pu43WiyqTY=">ACAHicbVC7SgNBFJ31GeNr1cLCZjAIsQm7IihWQRvLCOYBSQizk7vJkNmdZeauGJY0/oqNhSK2foadf+PkUWjigYHDOfdw54gkcKg5307S8srq2vruY385tb2zq67t18zKtUcqlxJpRsBMyBFDFUKGRaGBRIKEeDG7Gfv0BtBEqvsdhAu2I9WIRCs7QSh3kNMrWmwhPGLGVWSzxkB3dNpxC17Jm4AuEn9GCmSGSsf9anUVTyOIkUtmTNP3EmxnTKPgEkb5VmogYXzAetC0NGYRmHY2OWBET6zSpaHS9sVIJ+rvRMYiY4ZRYCcjhn0z743F/7xmiuFlOxNxkiLEfLoTCVFRcdt0K7QwFEOLWFcC/tXyvtM462s7wtwZ8/eZHUzkq+5XfnhfL1rI4cOSLHpEh8ckHK5JZUSJVwMiLP5JW8OU/Oi/PufExHl5xZ5oD8gfP5Awmdlg0=</latexit> <latexit sha1_base64="znx8HB3iu6URMn3Pu43WiyqTY=">ACAHicbVC7SgNBFJ31GeNr1cLCZjAIsQm7IihWQRvLCOYBSQizk7vJkNmdZeauGJY0/oqNhSK2foadf+PkUWjigYHDOfdw54gkcKg5307S8srq2vruY385tb2zq67t18zKtUcqlxJpRsBMyBFDFUKGRaGBRIKEeDG7Gfv0BtBEqvsdhAu2I9WIRCs7QSh3kNMrWmwhPGLGVWSzxkB3dNpxC17Jm4AuEn9GCmSGSsf9anUVTyOIkUtmTNP3EmxnTKPgEkb5VmogYXzAetC0NGYRmHY2OWBET6zSpaHS9sVIJ+rvRMYiY4ZRYCcjhn0z743F/7xmiuFlOxNxkiLEfLoTCVFRcdt0K7QwFEOLWFcC/tXyvtM462s7wtwZ8/eZHUzkq+5XfnhfL1rI4cOSLHpEh8ckHK5JZUSJVwMiLP5JW8OU/Oi/PufExHl5xZ5oD8gfP5Awmdlg0=</latexit> X A ij = B ijk c k for (int i = 0; i < m; i++) { k for (int pB2 = B2_pos[pB1]; pB2 < B2_pos[pB1 + 1]; pB2++) { int j = B2_idx[pB2]; int pA2 = (i * n) + j; int pB3 = B3_pos[pB2]; int pc1 = c1_pos[0]; Tensor Algebra Compiler while (pB3 < B3_pos[pB2 + 1] && pc1 < c1_pos[1]) { int kB = B3_idx[pB3]; (taco) int kc = c1_idx[pc1]; int k = min(kB, kc); if (kB == k && kc == k) { a[pA2] += b[pB3] * c[pc1]; [Kjolstad et al. 2017] } if (kB == k) pB3++; if (kc == k) pc1++; } } } A : (dense , dense) B : (dense , compressed , compressed) c : (compressed) 17
<latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="ck8pdC+ekZH4nUmSP+ZG7r8lEyk=">AB2XicbZDNSgMxFIXv1L86Vq1rN8EiuCozbnQpuHFZwbZCO5RM5k4bmskMyR2hDH0BF25EfC93vo3pz0JbDwQ+zknIvSculLQUBN9ebWd3b/+gfugfNfzjk9Nmo2fz0gjsilzl5jnmFpXU2CVJCp8LgzyLFfbj6f0i7+gsTLXTzQrMr4WMtUCk7O6oyaraAdLMW2IVxDC9YaNb+GS7KDUJxa0dhEFBUcUNSaFw7g9LiwUXUz7GgUPNM7RtRxzi6dk7A0N+5oYkv394uKZ9bOstjdzDhN7Ga2MP/LBiWlt1EldVESarH6KC0Vo5wtdmaJNChIzRxwYaSblYkJN1yQa8Z3HYSbG29D7odOn4MoA7ncAFXEMIN3MEDdKALAhJ4hXdv4r15H6uat6tDP4I+/zBzjGijg=</latexit> <latexit sha1_base64="n5e1ptEuTL43cmV9t1ImHPSoNvM=">ACf3icbZFda9swFIZl76Ndlm1pb3sjWga7aINkN7FNGXTbTS87aNpCbIysKkW+QNJLgShH7O/tLv+m8pClu6A4KH9+jVOTqnaARXGqEHz3/1+s3bnd13vf9Dx8/Dfb616puJWUTWota3hZEMcErNtFcC3bSEbKQrCbYvmjy9/cM6l4XV3pVcOykiwqPueUaCflg98mXT8ylYsiM2iI4hEKT4/RcBwmCMcOEI7COLDfcsN/WQu/wlS1ZW6W1mxZ8Sg8TQLnCKMxDpGDOE5QgO3zrp03pTOag23bBEaB3HSFVqHgwiHUTyhubOZPB0XMOvgS8gSOwict8Ced1bQtWaWpIEpNMWp0ZojUnApme2mrWEPokizY1GFSqYys+7Jws9OmcF5Ld2pNFyrfzsMKZValYW7WRJ9p7Zznfi/3LTV8zgzvGpazSr6VGjeCqhr2O0FzrhkVIuVA0Ild71Cekckodptr+eGgLe/BKugyF2/BOBXADsEXgEzsEFuAQTQL0d78Qbe5Hf9wM/eRqX723mtg/+Cf/sEWMFufg=</latexit> <latexit sha1_base64="n5e1ptEuTL43cmV9t1ImHPSoNvM=">ACf3icbZFda9swFIZl76Ndlm1pb3sjWga7aINkN7FNGXTbTS87aNpCbIysKkW+QNJLgShH7O/tLv+m8pClu6A4KH9+jVOTqnaARXGqEHz3/1+s3bnd13vf9Dx8/Dfb616puJWUTWota3hZEMcErNtFcC3bSEbKQrCbYvmjy9/cM6l4XV3pVcOykiwqPueUaCflg98mXT8ylYsiM2iI4hEKT4/RcBwmCMcOEI7COLDfcsN/WQu/wlS1ZW6W1mxZ8Sg8TQLnCKMxDpGDOE5QgO3zrp03pTOag23bBEaB3HSFVqHgwiHUTyhubOZPB0XMOvgS8gSOwict8Ced1bQtWaWpIEpNMWp0ZojUnApme2mrWEPokizY1GFSqYys+7Jws9OmcF5Ld2pNFyrfzsMKZValYW7WRJ9p7Zznfi/3LTV8zgzvGpazSr6VGjeCqhr2O0FzrhkVIuVA0Ild71Cekckodptr+eGgLe/BKugyF2/BOBXADsEXgEzsEFuAQTQL0d78Qbe5Hf9wM/eRqX723mtg/+Cf/sEWMFufg=</latexit> <latexit sha1_base64="9QtCk7M63G3IchN+Z5Vs/Le7raY=">ACinicbZHfatswFMZld1u7rNvS9nI3YmGwiy1IdhPblELX7WKXLSxtITZGVpRUi/wHS4EoYfpK+1ubzM5zWBLe0Dw4zvn0znSKRrBlUbot+fvPHv+YnfvZe/V/us3b/sHh1eqbiVlE1qLWt4URDHBKzbRXAt20hGykKw62L5tctf3zGpeF390KuGZSVZVHzOKdFOyv3Jl1fMpWLIjNoiOIRCo8/oeE4TBCOHSAchXFgv+SG/7QWnsJUtWVultZsWfEoPE4C5wijMQ6RgzhOUIDteWdOm9KZ7WGW7YIjYM46Rqtw0GEwygeWUNzZ7J5f/A3Bx8D3sAbOIi7/9KZzVtS1ZpKohSU4wanRkiNaeC2V7aKtYQuiQLNnVYkZKpzKxnsvCDU2ZwXkt3Kg3X6r8OQ0qlVmXhKkuib9V2rhOfyk1bPY8zw6um1ayiD43mrYC6ht1e4IxLRrVYOSBUcjcrpLdEqrd9nruE/D2kx/DVTDEji/R4Ox8x174B14Dz4CDCJwBr6DCzAB1Nv1PntjL/L3/cBP/JOHUt/beI7Af+F/+wOGoLrq</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> taco generates code dimension by dimension X A ij = B ijk · c k k for (int i = 0; i < m; i++) { for (int pB2 = B2_pos[pB1]; pB2 < B2_pos[pB1 + 1]; pB2++) { int j = B2_idx[pB2]; int pA2 = (i * n) + j; int pB3 = B3_pos[pB2]; int pc1 = c1_pos[0]; while (pB3 < B3_pos[pB2 + 1] && pc1 < c1_pos[1]) { int kB = B3_crd[pB3]; int kc = c1_crd[pc1]; int k = min(kB, kc); if (kB == k && kc == k) { A[pA2] += B[pB3] * c[pc1]; } if (kB == k) pB3++; if (kc == k) pc1++; } } } 18
<latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="ck8pdC+ekZH4nUmSP+ZG7r8lEyk=">AB2XicbZDNSgMxFIXv1L86Vq1rN8EiuCozbnQpuHFZwbZCO5RM5k4bmskMyR2hDH0BF25EfC93vo3pz0JbDwQ+zknIvSculLQUBN9ebWd3b/+gfugfNfzjk9Nmo2fz0gjsilzl5jnmFpXU2CVJCp8LgzyLFfbj6f0i7+gsTLXTzQrMr4WMtUCk7O6oyaraAdLMW2IVxDC9YaNb+GS7KDUJxa0dhEFBUcUNSaFw7g9LiwUXUz7GgUPNM7RtRxzi6dk7A0N+5oYkv394uKZ9bOstjdzDhN7Ga2MP/LBiWlt1EldVESarH6KC0Vo5wtdmaJNChIzRxwYaSblYkJN1yQa8Z3HYSbG29D7odOn4MoA7ncAFXEMIN3MEDdKALAhJ4hXdv4r15H6uat6tDP4I+/zBzjGijg=</latexit> <latexit sha1_base64="n5e1ptEuTL43cmV9t1ImHPSoNvM=">ACf3icbZFda9swFIZl76Ndlm1pb3sjWga7aINkN7FNGXTbTS87aNpCbIysKkW+QNJLgShH7O/tLv+m8pClu6A4KH9+jVOTqnaARXGqEHz3/1+s3bnd13vf9Dx8/Dfb616puJWUTWota3hZEMcErNtFcC3bSEbKQrCbYvmjy9/cM6l4XV3pVcOykiwqPueUaCflg98mXT8ylYsiM2iI4hEKT4/RcBwmCMcOEI7COLDfcsN/WQu/wlS1ZW6W1mxZ8Sg8TQLnCKMxDpGDOE5QgO3zrp03pTOag23bBEaB3HSFVqHgwiHUTyhubOZPB0XMOvgS8gSOwict8Ced1bQtWaWpIEpNMWp0ZojUnApme2mrWEPokizY1GFSqYys+7Jws9OmcF5Ld2pNFyrfzsMKZValYW7WRJ9p7Zznfi/3LTV8zgzvGpazSr6VGjeCqhr2O0FzrhkVIuVA0Ild71Cekckodptr+eGgLe/BKugyF2/BOBXADsEXgEzsEFuAQTQL0d78Qbe5Hf9wM/eRqX723mtg/+Cf/sEWMFufg=</latexit> <latexit sha1_base64="n5e1ptEuTL43cmV9t1ImHPSoNvM=">ACf3icbZFda9swFIZl76Ndlm1pb3sjWga7aINkN7FNGXTbTS87aNpCbIysKkW+QNJLgShH7O/tLv+m8pClu6A4KH9+jVOTqnaARXGqEHz3/1+s3bnd13vf9Dx8/Dfb616puJWUTWota3hZEMcErNtFcC3bSEbKQrCbYvmjy9/cM6l4XV3pVcOykiwqPueUaCflg98mXT8ylYsiM2iI4hEKT4/RcBwmCMcOEI7COLDfcsN/WQu/wlS1ZW6W1mxZ8Sg8TQLnCKMxDpGDOE5QgO3zrp03pTOag23bBEaB3HSFVqHgwiHUTyhubOZPB0XMOvgS8gSOwict8Ced1bQtWaWpIEpNMWp0ZojUnApme2mrWEPokizY1GFSqYys+7Jws9OmcF5Ld2pNFyrfzsMKZValYW7WRJ9p7Zznfi/3LTV8zgzvGpazSr6VGjeCqhr2O0FzrhkVIuVA0Ild71Cekckodptr+eGgLe/BKugyF2/BOBXADsEXgEzsEFuAQTQL0d78Qbe5Hf9wM/eRqX723mtg/+Cf/sEWMFufg=</latexit> <latexit sha1_base64="9QtCk7M63G3IchN+Z5Vs/Le7raY=">ACinicbZHfatswFMZld1u7rNvS9nI3YmGwiy1IdhPblELX7WKXLSxtITZGVpRUi/wHS4EoYfpK+1ubzM5zWBLe0Dw4zvn0znSKRrBlUbot+fvPHv+YnfvZe/V/us3b/sHh1eqbiVlE1qLWt4URDHBKzbRXAt20hGykKw62L5tctf3zGpeF390KuGZSVZVHzOKdFOyv3Jl1fMpWLIjNoiOIRCo8/oeE4TBCOHSAchXFgv+SG/7QWnsJUtWVultZsWfEoPE4C5wijMQ6RgzhOUIDteWdOm9KZ7WGW7YIjYM46Rqtw0GEwygeWUNzZ7J5f/A3Bx8D3sAbOIi7/9KZzVtS1ZpKohSU4wanRkiNaeC2V7aKtYQuiQLNnVYkZKpzKxnsvCDU2ZwXkt3Kg3X6r8OQ0qlVmXhKkuib9V2rhOfyk1bPY8zw6um1ayiD43mrYC6ht1e4IxLRrVYOSBUcjcrpLdEqrd9nruE/D2kx/DVTDEji/R4Ox8x174B14Dz4CDCJwBr6DCzAB1Nv1PntjL/L3/cBP/JOHUt/beI7Af+F/+wOGoLrq</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> taco generates code dimension by dimension X A ij = B ijk · c k k for (int i = 0; i < m; i++) { for (int pB2 = B2_pos[pB1]; pB2 < B2_pos[pB1 + 1]; pB2++) { int j = B2_idx[pB2]; int pA2 = (i * n) + j; int pB3 = B3_pos[pB2]; int pc1 = c1_pos[0]; while (pB3 < B3_pos[pB2 + 1] && pc1 < c1_pos[1]) { int kB = B3_crd[pB3]; int kc = c1_crd[pc1]; int k = min(kB, kc); if (kB == k && kc == k) { A[pA2] += B[pB3] * c[pc1]; } if (kB == k) pB3++; if (kc == k) pc1++; } } } 18
<latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="ck8pdC+ekZH4nUmSP+ZG7r8lEyk=">AB2XicbZDNSgMxFIXv1L86Vq1rN8EiuCozbnQpuHFZwbZCO5RM5k4bmskMyR2hDH0BF25EfC93vo3pz0JbDwQ+zknIvSculLQUBN9ebWd3b/+gfugfNfzjk9Nmo2fz0gjsilzl5jnmFpXU2CVJCp8LgzyLFfbj6f0i7+gsTLXTzQrMr4WMtUCk7O6oyaraAdLMW2IVxDC9YaNb+GS7KDUJxa0dhEFBUcUNSaFw7g9LiwUXUz7GgUPNM7RtRxzi6dk7A0N+5oYkv394uKZ9bOstjdzDhN7Ga2MP/LBiWlt1EldVESarH6KC0Vo5wtdmaJNChIzRxwYaSblYkJN1yQa8Z3HYSbG29D7odOn4MoA7ncAFXEMIN3MEDdKALAhJ4hXdv4r15H6uat6tDP4I+/zBzjGijg=</latexit> <latexit sha1_base64="n5e1ptEuTL43cmV9t1ImHPSoNvM=">ACf3icbZFda9swFIZl76Ndlm1pb3sjWga7aINkN7FNGXTbTS87aNpCbIysKkW+QNJLgShH7O/tLv+m8pClu6A4KH9+jVOTqnaARXGqEHz3/1+s3bnd13vf9Dx8/Dfb616puJWUTWota3hZEMcErNtFcC3bSEbKQrCbYvmjy9/cM6l4XV3pVcOykiwqPueUaCflg98mXT8ylYsiM2iI4hEKT4/RcBwmCMcOEI7COLDfcsN/WQu/wlS1ZW6W1mxZ8Sg8TQLnCKMxDpGDOE5QgO3zrp03pTOag23bBEaB3HSFVqHgwiHUTyhubOZPB0XMOvgS8gSOwict8Ced1bQtWaWpIEpNMWp0ZojUnApme2mrWEPokizY1GFSqYys+7Jws9OmcF5Ld2pNFyrfzsMKZValYW7WRJ9p7Zznfi/3LTV8zgzvGpazSr6VGjeCqhr2O0FzrhkVIuVA0Ild71Cekckodptr+eGgLe/BKugyF2/BOBXADsEXgEzsEFuAQTQL0d78Qbe5Hf9wM/eRqX723mtg/+Cf/sEWMFufg=</latexit> <latexit sha1_base64="n5e1ptEuTL43cmV9t1ImHPSoNvM=">ACf3icbZFda9swFIZl76Ndlm1pb3sjWga7aINkN7FNGXTbTS87aNpCbIysKkW+QNJLgShH7O/tLv+m8pClu6A4KH9+jVOTqnaARXGqEHz3/1+s3bnd13vf9Dx8/Dfb616puJWUTWota3hZEMcErNtFcC3bSEbKQrCbYvmjy9/cM6l4XV3pVcOykiwqPueUaCflg98mXT8ylYsiM2iI4hEKT4/RcBwmCMcOEI7COLDfcsN/WQu/wlS1ZW6W1mxZ8Sg8TQLnCKMxDpGDOE5QgO3zrp03pTOag23bBEaB3HSFVqHgwiHUTyhubOZPB0XMOvgS8gSOwict8Ced1bQtWaWpIEpNMWp0ZojUnApme2mrWEPokizY1GFSqYys+7Jws9OmcF5Ld2pNFyrfzsMKZValYW7WRJ9p7Zznfi/3LTV8zgzvGpazSr6VGjeCqhr2O0FzrhkVIuVA0Ild71Cekckodptr+eGgLe/BKugyF2/BOBXADsEXgEzsEFuAQTQL0d78Qbe5Hf9wM/eRqX723mtg/+Cf/sEWMFufg=</latexit> <latexit sha1_base64="9QtCk7M63G3IchN+Z5Vs/Le7raY=">ACinicbZHfatswFMZld1u7rNvS9nI3YmGwiy1IdhPblELX7WKXLSxtITZGVpRUi/wHS4EoYfpK+1ubzM5zWBLe0Dw4zvn0znSKRrBlUbot+fvPHv+YnfvZe/V/us3b/sHh1eqbiVlE1qLWt4URDHBKzbRXAt20hGykKw62L5tctf3zGpeF390KuGZSVZVHzOKdFOyv3Jl1fMpWLIjNoiOIRCo8/oeE4TBCOHSAchXFgv+SG/7QWnsJUtWVultZsWfEoPE4C5wijMQ6RgzhOUIDteWdOm9KZ7WGW7YIjYM46Rqtw0GEwygeWUNzZ7J5f/A3Bx8D3sAbOIi7/9KZzVtS1ZpKohSU4wanRkiNaeC2V7aKtYQuiQLNnVYkZKpzKxnsvCDU2ZwXkt3Kg3X6r8OQ0qlVmXhKkuib9V2rhOfyk1bPY8zw6um1ayiD43mrYC6ht1e4IxLRrVYOSBUcjcrpLdEqrd9nruE/D2kx/DVTDEji/R4Ox8x174B14Dz4CDCJwBr6DCzAB1Nv1PntjL/L3/cBP/JOHUt/beI7Af+F/+wOGoLrq</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> taco generates code dimension by dimension X A ij = B ijk · c k k for (int i = 0; i < m; i++) { for (int pB2 = B2_pos[pB1]; pB2 < B2_pos[pB1 + 1]; pB2++) { int j = B2_idx[pB2]; int pA2 = (i * n) + j; int pB3 = B3_pos[pB2]; int pc1 = c1_pos[0]; while (pB3 < B3_pos[pB2 + 1] && pc1 < c1_pos[1]) { int kB = B3_crd[pB3]; int kc = c1_crd[pc1]; int k = min(kB, kc); if (kB == k && kc == k) { A[pA2] += B[pB3] * c[pc1]; } if (kB == k) pB3++; if (kc == k) pc1++; } } } 18
<latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="ck8pdC+ekZH4nUmSP+ZG7r8lEyk=">AB2XicbZDNSgMxFIXv1L86Vq1rN8EiuCozbnQpuHFZwbZCO5RM5k4bmskMyR2hDH0BF25EfC93vo3pz0JbDwQ+zknIvSculLQUBN9ebWd3b/+gfugfNfzjk9Nmo2fz0gjsilzl5jnmFpXU2CVJCp8LgzyLFfbj6f0i7+gsTLXTzQrMr4WMtUCk7O6oyaraAdLMW2IVxDC9YaNb+GS7KDUJxa0dhEFBUcUNSaFw7g9LiwUXUz7GgUPNM7RtRxzi6dk7A0N+5oYkv394uKZ9bOstjdzDhN7Ga2MP/LBiWlt1EldVESarH6KC0Vo5wtdmaJNChIzRxwYaSblYkJN1yQa8Z3HYSbG29D7odOn4MoA7ncAFXEMIN3MEDdKALAhJ4hXdv4r15H6uat6tDP4I+/zBzjGijg=</latexit> <latexit sha1_base64="n5e1ptEuTL43cmV9t1ImHPSoNvM=">ACf3icbZFda9swFIZl76Ndlm1pb3sjWga7aINkN7FNGXTbTS87aNpCbIysKkW+QNJLgShH7O/tLv+m8pClu6A4KH9+jVOTqnaARXGqEHz3/1+s3bnd13vf9Dx8/Dfb616puJWUTWota3hZEMcErNtFcC3bSEbKQrCbYvmjy9/cM6l4XV3pVcOykiwqPueUaCflg98mXT8ylYsiM2iI4hEKT4/RcBwmCMcOEI7COLDfcsN/WQu/wlS1ZW6W1mxZ8Sg8TQLnCKMxDpGDOE5QgO3zrp03pTOag23bBEaB3HSFVqHgwiHUTyhubOZPB0XMOvgS8gSOwict8Ced1bQtWaWpIEpNMWp0ZojUnApme2mrWEPokizY1GFSqYys+7Jws9OmcF5Ld2pNFyrfzsMKZValYW7WRJ9p7Zznfi/3LTV8zgzvGpazSr6VGjeCqhr2O0FzrhkVIuVA0Ild71Cekckodptr+eGgLe/BKugyF2/BOBXADsEXgEzsEFuAQTQL0d78Qbe5Hf9wM/eRqX723mtg/+Cf/sEWMFufg=</latexit> <latexit sha1_base64="n5e1ptEuTL43cmV9t1ImHPSoNvM=">ACf3icbZFda9swFIZl76Ndlm1pb3sjWga7aINkN7FNGXTbTS87aNpCbIysKkW+QNJLgShH7O/tLv+m8pClu6A4KH9+jVOTqnaARXGqEHz3/1+s3bnd13vf9Dx8/Dfb616puJWUTWota3hZEMcErNtFcC3bSEbKQrCbYvmjy9/cM6l4XV3pVcOykiwqPueUaCflg98mXT8ylYsiM2iI4hEKT4/RcBwmCMcOEI7COLDfcsN/WQu/wlS1ZW6W1mxZ8Sg8TQLnCKMxDpGDOE5QgO3zrp03pTOag23bBEaB3HSFVqHgwiHUTyhubOZPB0XMOvgS8gSOwict8Ced1bQtWaWpIEpNMWp0ZojUnApme2mrWEPokizY1GFSqYys+7Jws9OmcF5Ld2pNFyrfzsMKZValYW7WRJ9p7Zznfi/3LTV8zgzvGpazSr6VGjeCqhr2O0FzrhkVIuVA0Ild71Cekckodptr+eGgLe/BKugyF2/BOBXADsEXgEzsEFuAQTQL0d78Qbe5Hf9wM/eRqX723mtg/+Cf/sEWMFufg=</latexit> <latexit sha1_base64="9QtCk7M63G3IchN+Z5Vs/Le7raY=">ACinicbZHfatswFMZld1u7rNvS9nI3YmGwiy1IdhPblELX7WKXLSxtITZGVpRUi/wHS4EoYfpK+1ubzM5zWBLe0Dw4zvn0znSKRrBlUbot+fvPHv+YnfvZe/V/us3b/sHh1eqbiVlE1qLWt4URDHBKzbRXAt20hGykKw62L5tctf3zGpeF390KuGZSVZVHzOKdFOyv3Jl1fMpWLIjNoiOIRCo8/oeE4TBCOHSAchXFgv+SG/7QWnsJUtWVultZsWfEoPE4C5wijMQ6RgzhOUIDteWdOm9KZ7WGW7YIjYM46Rqtw0GEwygeWUNzZ7J5f/A3Bx8D3sAbOIi7/9KZzVtS1ZpKohSU4wanRkiNaeC2V7aKtYQuiQLNnVYkZKpzKxnsvCDU2ZwXkt3Kg3X6r8OQ0qlVmXhKkuib9V2rhOfyk1bPY8zw6um1ayiD43mrYC6ht1e4IxLRrVYOSBUcjcrpLdEqrd9nruE/D2kx/DVTDEji/R4Ox8x174B14Dz4CDCJwBr6DCzAB1Nv1PntjL/L3/cBP/JOHUt/beI7Af+F/+wOGoLrq</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> <latexit sha1_base64="N+Gz0mErqtYlWzSRJfkrAyiSckE=">ACinicbZHfbtMwFMadMNgoAwq75MZahcQFVHbSNonQpLHtYpdDotukJoc1+1MnT+yHaTK8sPwStzxNjhdkVjHkSz9J3z+Rz7FI3gSiP02/Of7D19tn/wvPfi8OWr1/03b69V3UrKprQWtbwtiGKCV2yquRbstpGMlIVgN8XqvMvf/GBS8br6ptcNy0qyrPiCU6KdlPd/mnRzyUwui8ygIYrHKBx9RMNJmCAcO0A4CuPAfskN/24tPIGpasvcrKzZseJxOEoC5wijCQ6RgzhOUIDtWdOW9K57WGO7YITYI46RptwkGEwygeW0NzZ7J5f/A3Bx8D3sIAbOMq7/9K5zVtS1ZpKohSM4wanRkiNaeC2V7aKtYQuiJLNnNYkZKpzGxmsvC9U+ZwUt3Kg036r8OQ0ql1mXhKkui79RurhP/l5u1ehFnhldNq1lF7xstWgF1Dbu9wDmXjGqxdkCo5G5WSO+IJFS7fXcJ+DdJz+G62CIHX8dDU7Pt9xAN6BY/ABYBCBU3AJrsAUG/f+RNvMg/9AM/8T/fl/re1nMEHoR/8QeH4Lru</latexit> taco generates code dimension by dimension X A ij = B ijk · c k k for (int i = 0; i < m; i++) { for (int pB2 = B2_pos[pB1]; pB2 < B2_pos[pB1 + 1]; pB2++) { int j = B2_idx[pB2]; int pA2 = (i * n) + j; int pB3 = B3_pos[pB2]; int pc1 = c1_pos[0]; while (pB3 < B3_pos[pB2 + 1] && pc1 < c1_pos[1]) { int kB = B3_crd[pB3]; int kc = c1_crd[pc1]; int k = min(kB, kc); if (kB == k && kc == k) { A[pA2] += B[pB3] * c[pc1]; } if (kB == k) pB3++; if (kc == k) pc1++; } } } 18
Hand-coding support for a wide range of level formats is also infeasible Compressed Dense × + Dense Compressed 19
Hand-coding support for a wide range of level formats is also infeasible Compressed Dense × + Dense Compressed Compressed Hashed × + Compressed Singleton + Dense Range + Compressed Offset Dense Compressed Hashed × × Singleton Compressed Hashed × × + Singleton Compressed Dense × + + Singleton Compressed Dense . . . 19
Code generation is performed in two stages 20
Code generation is performed in two stages Compressed Hashed × 20
Code generation is performed in two stages Compressed Hashed × High-level algorithm 20
Code generation is performed in two stages Compressed Hashed × High-level algorithm Runnable code 20
Code generation is performed in two stages Compressed Hashed × High-level algorithm How to compute with di ff erent data structures Runnable code 20
Code generation is performed in two stages Compressed Hashed × How to compute with multiple operands High-level algorithm How to compute with di ff erent data structures Runnable code 20
Tensor algebra computations can be expressed in terms of high-level operations on tensor operands B C A B K L C D E F M N O P ∘ G H Q R S I J T U 21
Tensor algebra computations can be expressed in terms of high-level operations on tensor operands B C A B K L C D E F M N O P ∘ G H Q R S I J T U 21
Tensor algebra computations can be expressed in terms of high-level operations on tensor operands B C A B K L C D E F M N O P ∘ G H Q R S I J T U 21
Tensor algebra computations can be expressed in terms of high-level operations on tensor operands B C A B K L C D E F M N O P ∘ G H Q R S I J T U 21
Level formats declare whether they support various high-level operations Dense Range Compressed Singleton Offset Hashed 22
Level formats declare whether they support various high-level operations Random access Iteration Dense Range Compressed Singleton Offset Hashed 22
Level formats declare whether they support various high-level operations Random access Iteration Dense Range Compressed Singleton Offset Hashed 22
Level formats declare whether they support various high-level operations Random access Iteration Dense Range Compressed Singleton Offset Hashed 22
Level formats declare whether they support various high-level operations Random access Iteration Dense Range Compressed Singleton Offset Hashed 22
Compiler constructs e ffi cient algorithm by reasoning about whether operands support required high-level operations Random access Dense Range Compressed Singleton Offset Hashed 23
Compiler constructs e ffi cient algorithm by reasoning about whether operands support required high-level operations Random access B C ∘ Dense Range Compressed Singleton Offset Hashed 23
Compiler constructs e ffi cient algorithm by reasoning about whether operands support required high-level operations Random access B C ∘ Dense Compressed Hashed × Range Compressed Singleton Offset Hashed 23
Compiler constructs e ffi cient algorithm by reasoning about whether operands support required high-level operations Random access B C ∘ Dense Compressed Hashed × Range Compressed Singleton Offset Iterate over B and random access C Hashed 23
Recommend
More recommend