format abstraction for sparse tensor algebra compilers
play

Format Abstraction for Sparse Tensor Algebra Compilers Stephen Chou , - PowerPoint PPT Presentation

Format Abstraction for Sparse Tensor Algebra Compilers Stephen Chou , Fredrik Kjolstad, and Saman Amarasinghe Sparse tensors are a natural way of representing real-world data 2 Sparse tensors are a natural way of representing real-world data 2


  1. 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

  2. Hand-coding support for a wide range of formats is infeasible A = B ∘ C Coordinate ✕ Dense array CSR ✕ Dense array CSR ✕ Coordinate 11

  3. Hand-coding support for a wide range of formats is infeasible A = B ∘ C Coordinate ✕ Dense array CSR ✕ Dense array CSR ✕ Coordinate 11

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  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

  14. 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

  15. 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

  16. 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

  17. The same level formats can be composed in many ways Dense Compressed Singleton 14

  18. 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

  19. 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

  20. 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

  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. The same level formats can be composed in many ways Dense Compressed Singleton 16

  27. 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

  28. 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

  29. 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

  30. 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

  31. 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

  32. <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

  33. <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

  34. <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

  35. <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

  36. <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

  37. Hand-coding support for a wide range of level formats is also infeasible Compressed Dense × + Dense Compressed 19

  38. 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

  39. Code generation is performed in two stages 20

  40. Code generation is performed in two stages Compressed Hashed × 20

  41. Code generation is performed in two stages Compressed Hashed × High-level algorithm 20

  42. Code generation is performed in two stages Compressed Hashed × High-level algorithm Runnable code 20

  43. Code generation is performed in two stages Compressed Hashed × High-level algorithm How to compute with di ff erent data structures Runnable code 20

  44. 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

  45. 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

  46. 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

  47. 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

  48. 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

  49. Level formats declare whether they support various high-level operations Dense Range Compressed Singleton Offset Hashed 22

  50. Level formats declare whether they support various high-level operations Random access Iteration Dense Range Compressed Singleton Offset Hashed 22

  51. Level formats declare whether they support various high-level operations Random access Iteration Dense Range Compressed Singleton Offset Hashed 22

  52. Level formats declare whether they support various high-level operations Random access Iteration Dense Range Compressed Singleton Offset Hashed 22

  53. Level formats declare whether they support various high-level operations Random access Iteration Dense Range Compressed Singleton Offset Hashed 22

  54. 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

  55. 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

  56. 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

  57. 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

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend