-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Faster Khatri-Rao #41
Conversation
Simple fix to avoid extra copy of the Khatri-Rao product already yields some significant savings. |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #41 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 7 7
Lines 217 217
=========================================
Hits 217 217 ☔ View full report in Codecov by Sentry. |
43f1113
to
069cda9
Compare
1. use `reduce` to compute all but the last `kron` 2. use `kron!` for the last one
069cda9
to
b0a6d2b
Compare
Benchmark Report for
|
ID | time ratio | memory ratio |
---|---|---|
["khatrirao", "size=(100, 1000, 30), rank=30"] |
0.35 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(100, 1000, 30), rank=5"] |
0.37 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(100, 1000, 30), rank=60"] |
0.35 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(100, 1000, 30), rank=90"] |
0.35 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(1000, 30, 100), rank=30"] |
0.34 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(1000, 30, 100), rank=5"] |
0.35 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(1000, 30, 100), rank=60"] |
0.34 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(1000, 30, 100), rank=90"] |
0.34 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(20, 40, 80, 500), rank=30"] |
0.34 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(20, 40, 80, 500), rank=5"] |
0.34 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(20, 40, 80, 500), rank=60"] |
0.36 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(20, 40, 80, 500), rank=90"] |
0.36 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(30, 100, 1000), rank=30"] |
0.33 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(30, 100, 1000), rank=5"] |
0.34 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(30, 100, 1000), rank=60"] |
0.34 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(30, 100, 1000), rank=90"] |
0.33 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(30, 30), rank=30"] |
0.47 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(30, 30), rank=5"] |
0.55 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(30, 30), rank=60"] |
0.47 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(30, 30), rank=90"] |
0.42 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(30, 30, 30), rank=30"] |
0.42 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(30, 30, 30), rank=5"] |
0.38 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(30, 30, 30), rank=60"] |
0.40 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(30, 30, 30), rank=90"] |
0.38 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(30, 30, 30, 30), rank=30"] |
0.39 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(30, 30, 30, 30), rank=5"] |
0.34 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(30, 30, 30, 30), rank=60"] |
0.39 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(30, 30, 30, 30), rank=90"] |
0.37 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(40, 80, 500, 20), rank=30"] |
0.35 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(40, 80, 500, 20), rank=5"] |
0.36 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(40, 80, 500, 20), rank=60"] |
0.35 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(40, 80, 500, 20), rank=90"] |
0.35 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(500, 20, 40, 80), rank=30"] |
0.35 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(500, 20, 40, 80), rank=5"] |
0.34 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(500, 20, 40, 80), rank=60"] |
0.35 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(500, 20, 40, 80), rank=90"] |
0.36 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(60, 60), rank=30"] |
0.28 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(60, 60), rank=5"] |
0.39 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(60, 60), rank=60"] |
0.34 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(60, 60), rank=90"] |
0.35 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(60, 60, 60), rank=30"] |
0.36 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(60, 60, 60), rank=5"] |
0.38 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(60, 60, 60), rank=60"] |
0.38 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(60, 60, 60), rank=90"] |
0.38 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(60, 60, 60, 60), rank=30"] |
0.34 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(60, 60, 60, 60), rank=5"] |
0.34 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(60, 60, 60, 60), rank=60"] |
0.34 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(60, 60, 60, 60), rank=90"] |
0.35 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(80, 500, 20, 40), rank=30"] |
0.36 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(80, 500, 20, 40), rank=5"] |
0.35 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(80, 500, 20, 40), rank=60"] |
0.36 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(80, 500, 20, 40), rank=90"] |
0.36 (5%) ✅ | 0.51 (1%) ✅ |
["khatrirao", "size=(90, 90), rank=30"] |
0.39 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(90, 90), rank=5"] |
0.38 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(90, 90), rank=60"] |
0.43 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(90, 90), rank=90"] |
0.41 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(90, 90, 90), rank=30"] |
0.37 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(90, 90, 90), rank=5"] |
0.32 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(90, 90, 90), rank=60"] |
0.39 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(90, 90, 90), rank=90"] |
0.35 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(90, 90, 90, 90), rank=30"] |
0.35 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(90, 90, 90, 90), rank=5"] |
0.34 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(90, 90, 90, 90), rank=60"] |
0.36 (5%) ✅ | 0.50 (1%) ✅ |
["khatrirao", "size=(90, 90, 90, 90), rank=90"] |
0.36 (5%) ✅ | 0.50 (1%) ✅ |
Benchmark Group List
Here's a list of all the benchmark groups executed by this job:
["khatrirao"]
Julia versioninfo
Target
Julia Version 1.9.3
Commit bed2cd540a1 (2023-08-24 14:43 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: macOS (arm64-apple-darwin22.4.0)
uname: Darwin 23.2.0 Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:18 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T6000 arm64 arm
CPU: Apple M1 Max:
speed user nice sys idle irq
#1-10 2400 MHz 1142917 s 0 s 430158 s 16110622 s 0 s
Memory: 64.0 GB (45379.59375 MB free)
Uptime: 268574.0 sec
Load Avg: 2.03173828125 2.1787109375 2.23046875
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, apple-m1)
Threads: 1 on 8 virtual cores
Baseline
Julia Version 1.9.3
Commit bed2cd540a1 (2023-08-24 14:43 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: macOS (arm64-apple-darwin22.4.0)
uname: Darwin 23.2.0 Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:18 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T6000 arm64 arm
CPU: Apple M1 Max:
speed user nice sys idle irq
#1-10 2400 MHz 1143977 s 0 s 431014 s 16122435 s 0 s
Memory: 64.0 GB (42579.40625 MB free)
Uptime: 268712.0 sec
Load Avg: 2.283203125 2.1982421875 2.224609375
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, apple-m1)
Threads: 1 on 8 virtual cores
Benchmark Report for
|
ID | time ratio | memory ratio |
---|---|---|
["khatrirao", "size=(30, 30), rank=30"] |
0.88 (5%) ✅ | 0.98 (1%) ✅ |
["khatrirao", "size=(30, 30), rank=5"] |
1.08 (5%) ❌ | 0.98 (1%) ✅ |
["khatrirao", "size=(30, 30), rank=60"] |
0.97 (5%) | 0.98 (1%) ✅ |
["khatrirao", "size=(30, 30), rank=90"] |
0.92 (5%) ✅ | 0.98 (1%) ✅ |
["khatrirao", "size=(500, 20, 40, 80), rank=90"] |
1.05 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(60, 60), rank=5"] |
0.91 (5%) ✅ | 1.00 (1%) |
["khatrirao", "size=(60, 60), rank=60"] |
0.91 (5%) ✅ | 1.00 (1%) |
Benchmark Group List
Here's a list of all the benchmark groups executed by this job:
["khatrirao"]
Julia versioninfo
Target
Julia Version 1.9.3
Commit bed2cd540a1 (2023-08-24 14:43 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: macOS (arm64-apple-darwin22.4.0)
uname: Darwin 23.2.0 Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:18 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T6000 arm64 arm
CPU: Apple M1 Max:
speed user nice sys idle irq
#1-10 2400 MHz 1150896 s 0 s 434838 s 16202342 s 0 s
Memory: 64.0 GB (44430.15625 MB free)
Uptime: 269627.0 sec
Load Avg: 2.48828125 2.35009765625 2.38671875
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, apple-m1)
Threads: 1 on 8 virtual cores
Baseline
Julia Version 1.9.3
Commit bed2cd540a1 (2023-08-24 14:43 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: macOS (arm64-apple-darwin22.4.0)
uname: Darwin 23.2.0 Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:18 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T6000 arm64 arm
CPU: Apple M1 Max:
speed user nice sys idle irq
#1-10 2400 MHz 1151487 s 0 s 435382 s 16209347 s 0 s
Memory: 64.0 GB (44424.984375 MB free)
Uptime: 269709.0 sec
Load Avg: 2.64794921875 2.4150390625 2.40625
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, apple-m1)
Threads: 1 on 8 virtual cores
Benchmark Report for
|
ID | time ratio | memory ratio |
---|---|---|
["khatrirao", "size=(100, 1000, 30), rank=30"] |
0.95 (5%) ✅ | 0.98 (1%) ✅ |
["khatrirao", "size=(100, 1000, 30), rank=5"] |
0.98 (5%) | 0.98 (1%) ✅ |
["khatrirao", "size=(100, 1000, 30), rank=60"] |
0.97 (5%) | 0.98 (1%) ✅ |
["khatrirao", "size=(100, 1000, 30), rank=90"] |
0.97 (5%) | 0.98 (1%) ✅ |
["khatrirao", "size=(30, 30), rank=30"] |
0.80 (5%) ✅ | 1.00 (1%) |
["khatrirao", "size=(30, 30), rank=5"] |
0.84 (5%) ✅ | 1.01 (1%) |
["khatrirao", "size=(30, 30), rank=60"] |
0.76 (5%) ✅ | 1.00 (1%) |
["khatrirao", "size=(30, 30), rank=90"] |
0.91 (5%) ✅ | 1.00 (1%) |
["khatrirao", "size=(30, 30, 30, 30), rank=30"] |
0.96 (5%) | 0.97 (1%) ✅ |
["khatrirao", "size=(30, 30, 30, 30), rank=5"] |
0.94 (5%) ✅ | 0.97 (1%) ✅ |
["khatrirao", "size=(30, 30, 30, 30), rank=60"] |
0.93 (5%) ✅ | 0.97 (1%) ✅ |
["khatrirao", "size=(30, 30, 30, 30), rank=90"] |
0.96 (5%) | 0.97 (1%) ✅ |
["khatrirao", "size=(30,), rank=60"] |
0.00 (5%) ✅ | 1.00 (1%) |
["khatrirao", "size=(40, 80, 500, 20), rank=30"] |
0.94 (5%) ✅ | 0.95 (1%) ✅ |
["khatrirao", "size=(40, 80, 500, 20), rank=5"] |
0.91 (5%) ✅ | 0.95 (1%) ✅ |
["khatrirao", "size=(40, 80, 500, 20), rank=60"] |
0.94 (5%) ✅ | 0.95 (1%) ✅ |
["khatrirao", "size=(40, 80, 500, 20), rank=90"] |
0.96 (5%) | 0.95 (1%) ✅ |
["khatrirao", "size=(500, 20, 40, 80), rank=30"] |
1.00 (5%) | 0.99 (1%) ✅ |
["khatrirao", "size=(500, 20, 40, 80), rank=5"] |
1.01 (5%) | 0.99 (1%) ✅ |
["khatrirao", "size=(500, 20, 40, 80), rank=60"] |
1.01 (5%) | 0.99 (1%) ✅ |
["khatrirao", "size=(500, 20, 40, 80), rank=90"] |
1.00 (5%) | 0.99 (1%) ✅ |
["khatrirao", "size=(60, 60), rank=30"] |
0.94 (5%) ✅ | 1.00 (1%) |
["khatrirao", "size=(60, 60), rank=60"] |
0.94 (5%) ✅ | 1.00 (1%) |
["khatrirao", "size=(60, 60), rank=90"] |
0.93 (5%) ✅ | 1.00 (1%) |
["khatrirao", "size=(60, 60, 60, 60), rank=30"] |
0.97 (5%) | 0.98 (1%) ✅ |
["khatrirao", "size=(60, 60, 60, 60), rank=5"] |
0.99 (5%) | 0.98 (1%) ✅ |
["khatrirao", "size=(60, 60, 60, 60), rank=60"] |
0.94 (5%) ✅ | 0.98 (1%) ✅ |
["khatrirao", "size=(60, 60, 60, 60), rank=90"] |
0.94 (5%) ✅ | 0.98 (1%) ✅ |
["khatrirao", "size=(80, 500, 20, 40), rank=30"] |
1.01 (5%) | 0.98 (1%) ✅ |
["khatrirao", "size=(80, 500, 20, 40), rank=5"] |
1.03 (5%) | 0.98 (1%) ✅ |
["khatrirao", "size=(80, 500, 20, 40), rank=60"] |
0.95 (5%) | 0.98 (1%) ✅ |
["khatrirao", "size=(80, 500, 20, 40), rank=90"] |
0.96 (5%) | 0.98 (1%) ✅ |
["khatrirao", "size=(90, 90), rank=30"] |
1.07 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(90, 90), rank=5"] |
0.93 (5%) ✅ | 1.00 (1%) |
["khatrirao", "size=(90, 90), rank=60"] |
0.87 (5%) ✅ | 1.00 (1%) |
["khatrirao", "size=(90, 90, 90), rank=5"] |
1.10 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(90, 90, 90, 90), rank=30"] |
0.92 (5%) ✅ | 0.99 (1%) ✅ |
["khatrirao", "size=(90, 90, 90, 90), rank=5"] |
0.97 (5%) | 0.99 (1%) ✅ |
["khatrirao", "size=(90, 90, 90, 90), rank=60"] |
0.91 (5%) ✅ | 0.99 (1%) ✅ |
["khatrirao", "size=(90, 90, 90, 90), rank=90"] |
0.93 (5%) ✅ | 0.99 (1%) ✅ |
Benchmark Group List
Here's a list of all the benchmark groups executed by this job:
["khatrirao"]
Julia versioninfo
Target
Julia Version 1.9.3
Commit bed2cd540a1 (2023-08-24 14:43 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: macOS (arm64-apple-darwin22.4.0)
uname: Darwin 23.2.0 Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:18 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T6000 arm64 arm
CPU: Apple M1 Max:
speed user nice sys idle irq
#1-10 2400 MHz 1153686 s 0 s 436667 s 16234423 s 0 s
Memory: 64.0 GB (44351.65625 MB free)
Uptime: 269997.0 sec
Load Avg: 1.9755859375 2.333984375 2.38671875
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, apple-m1)
Threads: 1 on 8 virtual cores
Baseline
Julia Version 1.9.3
Commit bed2cd540a1 (2023-08-24 14:43 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: macOS (arm64-apple-darwin22.4.0)
uname: Darwin 23.2.0 Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:18 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T6000 arm64 arm
CPU: Apple M1 Max:
speed user nice sys idle irq
#1-10 2400 MHz 1154209 s 0 s 437214 s 16241581 s 0 s
Memory: 64.0 GB (44274.09375 MB free)
Uptime: 270080.0 sec
Load Avg: 1.7626953125 2.1796875 2.3193359375
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, apple-m1)
Threads: 1 on 8 virtual cores
Avoids allocating intermediate arrays, at a cost of additional multiplies.
Benchmark Report for
|
ID | time ratio | memory ratio |
---|---|---|
["khatrirao", "size=(100, 1000, 30), rank=30"] |
1.53 (5%) ❌ | 0.99 (1%) |
["khatrirao", "size=(100, 1000, 30), rank=5"] |
1.53 (5%) ❌ | 0.99 (1%) |
["khatrirao", "size=(100, 1000, 30), rank=60"] |
1.57 (5%) ❌ | 0.99 (1%) |
["khatrirao", "size=(100, 1000, 30), rank=90"] |
1.61 (5%) ❌ | 0.99 (1%) |
["khatrirao", "size=(1000, 30, 100), rank=30"] |
1.57 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(1000, 30, 100), rank=5"] |
1.51 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(1000, 30, 100), rank=60"] |
1.60 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(1000, 30, 100), rank=90"] |
1.60 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(20, 40, 80, 500), rank=30"] |
1.82 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(20, 40, 80, 500), rank=5"] |
1.86 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(20, 40, 80, 500), rank=60"] |
1.80 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(20, 40, 80, 500), rank=90"] |
1.89 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(30, 100, 1000), rank=30"] |
1.50 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(30, 100, 1000), rank=5"] |
1.43 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(30, 100, 1000), rank=60"] |
1.49 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(30, 100, 1000), rank=90"] |
1.51 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(30, 30), rank=30"] |
1.10 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(30, 30), rank=5"] |
1.27 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(30, 30), rank=90"] |
0.89 (5%) ✅ | 1.00 (1%) |
["khatrirao", "size=(30, 30, 30), rank=30"] |
1.49 (5%) ❌ | 0.97 (1%) ✅ |
["khatrirao", "size=(30, 30, 30), rank=5"] |
1.54 (5%) ❌ | 0.97 (1%) ✅ |
["khatrirao", "size=(30, 30, 30), rank=60"] |
1.49 (5%) ❌ | 0.97 (1%) ✅ |
["khatrirao", "size=(30, 30, 30), rank=90"] |
1.51 (5%) ❌ | 0.97 (1%) ✅ |
["khatrirao", "size=(30, 30, 30, 30), rank=30"] |
2.03 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(30, 30, 30, 30), rank=5"] |
2.14 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(30, 30, 30, 30), rank=60"] |
2.06 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(30, 30, 30, 30), rank=90"] |
2.08 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(40, 80, 500, 20), rank=30"] |
2.20 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(40, 80, 500, 20), rank=5"] |
2.18 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(40, 80, 500, 20), rank=60"] |
2.12 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(40, 80, 500, 20), rank=90"] |
2.13 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(500, 20, 40, 80), rank=30"] |
1.83 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(500, 20, 40, 80), rank=5"] |
1.93 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(500, 20, 40, 80), rank=60"] |
1.89 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(500, 20, 40, 80), rank=90"] |
1.79 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(60, 60, 60), rank=30"] |
1.46 (5%) ❌ | 0.98 (1%) ✅ |
["khatrirao", "size=(60, 60, 60), rank=5"] |
1.48 (5%) ❌ | 0.98 (1%) ✅ |
["khatrirao", "size=(60, 60, 60), rank=60"] |
1.48 (5%) ❌ | 0.98 (1%) ✅ |
["khatrirao", "size=(60, 60, 60), rank=90"] |
1.52 (5%) ❌ | 0.98 (1%) ✅ |
["khatrirao", "size=(60, 60, 60, 60), rank=30"] |
2.03 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(60, 60, 60, 60), rank=5"] |
1.97 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(60, 60, 60, 60), rank=60"] |
2.00 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(60, 60, 60, 60), rank=90"] |
1.99 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(80, 500, 20, 40), rank=30"] |
1.96 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(80, 500, 20, 40), rank=5"] |
1.90 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(80, 500, 20, 40), rank=60"] |
1.95 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(80, 500, 20, 40), rank=90"] |
1.93 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(90, 90), rank=5"] |
1.06 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(90, 90), rank=60"] |
1.19 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(90, 90), rank=90"] |
1.13 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(90, 90, 90), rank=30"] |
1.53 (5%) ❌ | 0.99 (1%) ✅ |
["khatrirao", "size=(90, 90, 90), rank=5"] |
1.59 (5%) ❌ | 0.99 (1%) ✅ |
["khatrirao", "size=(90, 90, 90), rank=60"] |
1.51 (5%) ❌ | 0.99 (1%) ✅ |
["khatrirao", "size=(90, 90, 90), rank=90"] |
1.52 (5%) ❌ | 0.99 (1%) ✅ |
["khatrirao", "size=(90, 90, 90, 90), rank=30"] |
1.95 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(90, 90, 90, 90), rank=5"] |
1.98 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(90, 90, 90, 90), rank=60"] |
1.97 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(90, 90, 90, 90), rank=90"] |
1.94 (5%) ❌ | 1.00 (1%) |
Benchmark Group List
Here's a list of all the benchmark groups executed by this job:
["khatrirao"]
Julia versioninfo
Target
Julia Version 1.9.3
Commit bed2cd540a1 (2023-08-24 14:43 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: macOS (arm64-apple-darwin22.4.0)
uname: Darwin 23.2.0 Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:18 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T6000 arm64 arm
CPU: Apple M1 Max:
speed user nice sys idle irq
#1-10 2400 MHz 1158196 s 0 s 439403 s 16286523 s 0 s
Memory: 64.0 GB (44441.828125 MB free)
Uptime: 270595.0 sec
Load Avg: 3.8408203125 3.01953125 2.625
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, apple-m1)
Threads: 1 on 8 virtual cores
Baseline
Julia Version 1.9.3
Commit bed2cd540a1 (2023-08-24 14:43 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: macOS (arm64-apple-darwin22.4.0)
uname: Darwin 23.2.0 Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:18 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T6000 arm64 arm
CPU: Apple M1 Max:
speed user nice sys idle irq
#1-10 2400 MHz 1158763 s 0 s 439942 s 16293707 s 0 s
Memory: 64.0 GB (44355.34375 MB free)
Uptime: 270679.0 sec
Load Avg: 2.31640625 2.7197265625 2.54541015625
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, apple-m1)
Threads: 1 on 8 virtual cores
This reverts commit f9a78c9.
This PR adds benchmarks for Khatri-Rao and tests out some alternative implementations:
|
Should probably also add some Khatri-Rao specific tests in the future.
Benchmark for bugfix. Benchmark Report for
|
ID | time ratio | memory ratio |
---|---|---|
["khatrirao", "size=(100, 1000, 30), rank=30"] |
1.09 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(100, 1000, 30), rank=5"] |
1.06 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(100, 1000, 30), rank=60"] |
1.05 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(100, 1000, 30), rank=90"] |
1.07 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(20, 40, 80, 500), rank=5"] |
1.08 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(30, 30), rank=5"] |
1.16 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(30, 30), rank=60"] |
1.12 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(30, 30, 30), rank=5"] |
0.90 (5%) ✅ | 1.00 (1%) |
["khatrirao", "size=(30, 30, 30), rank=60"] |
1.07 (5%) ❌ | 1.00 (1%) |
["khatrirao", "size=(90, 90), rank=5"] |
0.93 (5%) ✅ | 1.00 (1%) |
["khatrirao", "size=(90, 90), rank=60"] |
0.91 (5%) ✅ | 1.00 (1%) |
Benchmark Group List
Here's a list of all the benchmark groups executed by this job:
["khatrirao"]
Julia versioninfo
Target
Julia Version 1.9.3
Commit bed2cd540a1 (2023-08-24 14:43 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: macOS (arm64-apple-darwin22.4.0)
uname: Darwin 23.2.0 Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:18 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T6000 arm64 arm
CPU: Apple M1 Max:
speed user nice sys idle irq
#1-10 2400 MHz 1299022 s 0 s 495685 s 17671955 s 0 s
Memory: 64.0 GB (44493.9375 MB free)
Uptime: 293749.0 sec
Load Avg: 1.75390625 2.35302734375 2.923828125
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, apple-m1)
Threads: 1 on 8 virtual cores
Baseline
Julia Version 1.9.3
Commit bed2cd540a1 (2023-08-24 14:43 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: macOS (arm64-apple-darwin22.4.0)
uname: Darwin 23.2.0 Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:18 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T6000 arm64 arm
CPU: Apple M1 Max:
speed user nice sys idle irq
#1-10 2400 MHz 1299540 s 0 s 496208 s 17678983 s 0 s
Memory: 64.0 GB (44444.671875 MB free)
Uptime: 293830.0 sec
Load Avg: 1.69775390625 2.193359375 2.80859375
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, apple-m1)
Threads: 1 on 8 virtual cores
Testing with the MTTKRP benchmark. Greatest impact is to Benchmark Report for
|
ID | time ratio | memory ratio |
---|---|---|
["mttkrp", "size=(100, 100, 100), rank=10, mode=1"] |
0.85 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(100, 100, 100), rank=10, mode=3"] |
0.83 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(100, 100, 100), rank=100, mode=1"] |
0.69 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(100, 100, 100), rank=100, mode=3"] |
0.70 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(100, 100, 100), rank=150, mode=1"] |
0.65 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(100, 100, 100), rank=150, mode=3"] |
0.63 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(100, 100, 100), rank=200, mode=1"] |
0.65 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(100, 100, 100), rank=200, mode=3"] |
0.64 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(100, 100, 100), rank=250, mode=1"] |
0.64 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(100, 100, 100), rank=250, mode=3"] |
0.65 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(100, 100, 100), rank=300, mode=1"] |
0.66 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(100, 100, 100), rank=300, mode=3"] |
0.66 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(100, 100, 100), rank=50, mode=1"] |
0.73 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(100, 100, 100), rank=50, mode=3"] |
0.73 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(1000, 100, 30), rank=10, mode=1"] |
0.95 (5%) ✅ | 0.57 (1%) ✅ |
["mttkrp", "size=(1000, 100, 30), rank=10, mode=3"] |
0.70 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(1000, 100, 30), rank=100, mode=1"] |
0.90 (5%) ✅ | 0.57 (1%) ✅ |
["mttkrp", "size=(1000, 100, 30), rank=100, mode=3"] |
0.59 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(1000, 100, 30), rank=200, mode=1"] |
0.87 (5%) ✅ | 0.57 (1%) ✅ |
["mttkrp", "size=(1000, 100, 30), rank=200, mode=3"] |
0.57 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(1000, 100, 30), rank=300, mode=1"] |
0.88 (5%) ✅ | 0.57 (1%) ✅ |
["mttkrp", "size=(1000, 100, 30), rank=300, mode=3"] |
0.55 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(150, 150, 150), rank=10, mode=1"] |
0.94 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(150, 150, 150), rank=10, mode=3"] |
0.86 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(150, 150, 150), rank=100, mode=1"] |
0.72 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(150, 150, 150), rank=100, mode=3"] |
0.72 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(150, 150, 150), rank=150, mode=1"] |
0.69 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(150, 150, 150), rank=150, mode=3"] |
0.68 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(150, 150, 150), rank=200, mode=1"] |
0.72 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(150, 150, 150), rank=200, mode=3"] |
0.68 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(150, 150, 150), rank=250, mode=1"] |
0.70 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(150, 150, 150), rank=250, mode=3"] |
0.68 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(150, 150, 150), rank=300, mode=1"] |
0.67 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(150, 150, 150), rank=300, mode=3"] |
0.70 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(150, 150, 150), rank=50, mode=1"] |
0.75 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(150, 150, 150), rank=50, mode=3"] |
0.79 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(200, 200, 200), rank=10, mode=1"] |
0.84 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(200, 200, 200), rank=10, mode=3"] |
0.87 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(200, 200, 200), rank=100, mode=1"] |
0.72 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(200, 200, 200), rank=100, mode=3"] |
0.73 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(200, 200, 200), rank=150, mode=1"] |
0.72 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(200, 200, 200), rank=150, mode=3"] |
0.70 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(200, 200, 200), rank=200, mode=1"] |
0.71 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(200, 200, 200), rank=200, mode=3"] |
0.72 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(200, 200, 200), rank=250, mode=1"] |
0.70 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(200, 200, 200), rank=250, mode=3"] |
0.69 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(200, 200, 200), rank=300, mode=1"] |
0.70 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(200, 200, 200), rank=300, mode=3"] |
0.70 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(200, 200, 200), rank=50, mode=1"] |
0.78 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(200, 200, 200), rank=50, mode=3"] |
0.80 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(30, 100, 1000), rank=10, mode=1"] |
0.75 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(30, 100, 1000), rank=10, mode=3"] |
0.94 (5%) ✅ | 0.57 (1%) ✅ |
["mttkrp", "size=(30, 100, 1000), rank=100, mode=1"] |
0.61 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(30, 100, 1000), rank=100, mode=3"] |
0.89 (5%) ✅ | 0.57 (1%) ✅ |
["mttkrp", "size=(30, 100, 1000), rank=200, mode=1"] |
0.62 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(30, 100, 1000), rank=200, mode=3"] |
0.87 (5%) ✅ | 0.57 (1%) ✅ |
["mttkrp", "size=(30, 100, 1000), rank=300, mode=1"] |
0.58 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(30, 100, 1000), rank=300, mode=3"] |
0.89 (5%) ✅ | 0.57 (1%) ✅ |
["mttkrp", "size=(50, 50, 50), rank=10, mode=1"] |
0.86 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(50, 50, 50), rank=10, mode=3"] |
0.86 (5%) ✅ | 0.51 (1%) ✅ |
["mttkrp", "size=(50, 50, 50), rank=100, mode=1"] |
0.64 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(50, 50, 50), rank=100, mode=3"] |
0.65 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(50, 50, 50), rank=150, mode=1"] |
0.66 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(50, 50, 50), rank=150, mode=3"] |
0.61 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(50, 50, 50), rank=200, mode=1"] |
0.60 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(50, 50, 50), rank=200, mode=3"] |
0.63 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(50, 50, 50), rank=250, mode=1"] |
0.59 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(50, 50, 50), rank=250, mode=3"] |
0.62 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(50, 50, 50), rank=300, mode=1"] |
0.64 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(50, 50, 50), rank=300, mode=3"] |
0.61 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(50, 50, 50), rank=50, mode=1"] |
0.69 (5%) ✅ | 0.50 (1%) ✅ |
["mttkrp", "size=(50, 50, 50), rank=50, mode=2"] |
0.94 (5%) ✅ | 1.00 (1%) |
["mttkrp", "size=(50, 50, 50), rank=50, mode=3"] |
0.71 (5%) ✅ | 0.50 (1%) ✅ |
Benchmark Group List
Here's a list of all the benchmark groups executed by this job:
["mttkrp"]
Julia versioninfo
Target
Julia Version 1.9.3
Commit bed2cd540a1 (2023-08-24 14:43 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: macOS (arm64-apple-darwin22.4.0)
uname: Darwin 23.2.0 Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:18 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T6000 arm64 arm
CPU: Apple M1 Max:
speed user nice sys idle irq
#1-10 2400 MHz 1294965 s 0 s 492258 s 17634484 s 0 s
Memory: 64.0 GB (17078.03125 MB free)
Uptime: 293295.0 sec
Load Avg: 4.90576171875 3.03515625 3.359375
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, apple-m1)
Threads: 1 on 8 virtual cores
Baseline
Julia Version 1.9.3
Commit bed2cd540a1 (2023-08-24 14:43 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: macOS (arm64-apple-darwin22.4.0)
uname: Darwin 23.2.0 Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:18 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T6000 arm64 arm
CPU: Apple M1 Max:
speed user nice sys idle irq
#1-10 2400 MHz 1296314 s 0 s 493388 s 17635366 s 0 s
Memory: 64.0 GB (16610.0625 MB free)
Uptime: 293329.0 sec
Load Avg: 6.3515625 3.5576171875 3.5361328125
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, apple-m1)
Threads: 1 on 8 virtual cores
MTTKRP benchmark plots
Runtime vs. size (for square tensors)
Below are plots showing the runtime in miliseconds of MTTKRP as a function of the size of the square tensor, for varying ranks and modes:
ndims = 3, rank = 10, mode = 1 | ndims = 3, rank = 10, mode = 2 | ndims = 3, rank = 10, mode = 3 | ndims = 3, rank = 50, mode = 1 | ndims = 3, rank = 50, mode = 2 | ndims = 3, rank = 50, mode = 3 | ndims = 3, rank = 100, mode = 1 | ndims = 3, rank = 100, mode = 2 | ndims = 3, rank = 100, mode = 3 | ndims = 3, rank = 150, mode = 1 | ndims = 3, rank = 150, mode = 2 | ndims = 3, rank = 150, mode = 3 | ndims = 3, rank = 200, mode = 1 | ndims = 3, rank = 200, mode = 2 | ndims = 3, rank = 200, mode = 3 | ndims = 3, rank = 250, mode = 1 | ndims = 3, rank = 250, mode = 2 | ndims = 3, rank = 250, mode = 3 | ndims = 3, rank = 300, mode = 1 | ndims = 3, rank = 300, mode = 2 | ndims = 3, rank = 300, mode = 3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Target |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Baseline |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Runtime vs. rank
Below are plots showing the runtime in miliseconds of MTTKRP as a function of the size of the rank, for varying sizes and modes:
size = (30, 100, 1000), mode = 1 | size = (30, 100, 1000), mode = 2 | size = (30, 100, 1000), mode = 3 | size = (50, 50, 50), mode = 1 | size = (50, 50, 50), mode = 2 | size = (50, 50, 50), mode = 3 | size = (100, 100, 100), mode = 1 | size = (100, 100, 100), mode = 2 | size = (100, 100, 100), mode = 3 | size = (150, 150, 150), mode = 1 | size = (150, 150, 150), mode = 2 | size = (150, 150, 150), mode = 3 | size = (200, 200, 200), mode = 1 | size = (200, 200, 200), mode = 2 | size = (200, 200, 200), mode = 3 | size = (1000, 100, 30), mode = 1 | size = (1000, 100, 30), mode = 2 | size = (1000, 100, 30), mode = 3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Target |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Baseline |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Runtime vs. mode
Below are plots showing the runtime in miliseconds of MTTKRP as a function of the mode, for varying sizes and ranks:
size = (30, 100, 1000), rank = 10 | size = (30, 100, 1000), rank = 100 | size = (30, 100, 1000), rank = 200 | size = (30, 100, 1000), rank = 300 | size = (50, 50, 50), rank = 10 | size = (50, 50, 50), rank = 50 | size = (50, 50, 50), rank = 100 | size = (50, 50, 50), rank = 150 | size = (50, 50, 50), rank = 200 | size = (50, 50, 50), rank = 250 | size = (50, 50, 50), rank = 300 | size = (100, 100, 100), rank = 10 | size = (100, 100, 100), rank = 50 | size = (100, 100, 100), rank = 100 | size = (100, 100, 100), rank = 150 | size = (100, 100, 100), rank = 200 | size = (100, 100, 100), rank = 250 | size = (100, 100, 100), rank = 300 | size = (150, 150, 150), rank = 10 | size = (150, 150, 150), rank = 50 | size = (150, 150, 150), rank = 100 | size = (150, 150, 150), rank = 150 | size = (150, 150, 150), rank = 200 | size = (150, 150, 150), rank = 250 | size = (150, 150, 150), rank = 300 | size = (200, 200, 200), rank = 10 | size = (200, 200, 200), rank = 50 | size = (200, 200, 200), rank = 100 | size = (200, 200, 200), rank = 150 | size = (200, 200, 200), rank = 200 | size = (200, 200, 200), rank = 250 | size = (200, 200, 200), rank = 300 | size = (1000, 100, 30), rank = 10 | size = (1000, 100, 30), rank = 100 | size = (1000, 100, 30), rank = 200 | size = (1000, 100, 30), rank = 300 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Target |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Baseline |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
All done. Test failures seem related to TestItemRunner's on Julia nightly. Merging! |
Fixes #34