Skip to content
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

In-place versions of mttkrp and khatrirao #43

Merged
merged 22 commits into from
Mar 4, 2024

Conversation

dahong67
Copy link
Owner

@dahong67 dahong67 commented Mar 1, 2024

Fixes #42

Without buffers for temp arrays.
@dahong67 dahong67 linked an issue Mar 1, 2024 that may be closed by this pull request
Copy link

codecov bot commented Mar 1, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 100.00%. Comparing base (940a3a4) to head (85a8ed3).

Additional details and impacted files
@@            Coverage Diff            @@
##            master       #43   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            8         8           
  Lines          220       240   +20     
=========================================
+ Hits           220       240   +20     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@dahong67
Copy link
Owner Author

dahong67 commented Mar 4, 2024

Using khatrirao! in-place of khatrirao in mttkrp! results in more memory use for intermediate modes in some cases, as shown in the following benchmark. Reason is that we have some calls to khatrirao! with a single matrix - before this was essentially a no-op but now we make a new copy. Consider, e.g., the following lines when n == 2:

# Inner multiplication: left side
buffer_kr_inner = similar(U[1], prod(I[1:n-1]), r)
khatrirao!(buffer_kr_inner, U[reverse(1:n-1)]...)

Benchmark Report for GCPDecompositions

Job Properties

  • Time of benchmarks:
    • Target: 3 Mar 2024 - 20:58
    • Baseline: 3 Mar 2024 - 20:59
  • Package commits:
    • Target: 2bbf6f
    • Baseline: 38648a
  • Julia commits:
    • Target: bed2cd
    • Baseline: bed2cd
  • Julia command flags:
    • Target: None
    • Baseline: None
  • Environment variables:
    • Target: GCP_BENCHMARK_SUITES => mttkrp
    • Baseline: GCP_BENCHMARK_SUITES => mttkrp

Results

A ratio greater than 1.0 denotes a possible regression (marked with ❌), while a ratio less
than 1.0 denotes a possible improvement (marked with ✅). Only significant results - results
that indicate possible regressions or improvements - are shown below (thus, an empty table means that all
benchmark results remained invariant between builds).

ID time ratio memory ratio
["mttkrp", "size=(100, 100, 100), rank=10, mode=2"] 1.00 (5%) 1.02 (1%) ❌
["mttkrp", "size=(100, 100, 100), rank=100, mode=2"] 1.00 (5%) 1.02 (1%) ❌
["mttkrp", "size=(100, 100, 100), rank=150, mode=1"] 0.95 (5%) ✅ 1.00 (1%)
["mttkrp", "size=(100, 100, 100), rank=150, mode=2"] 0.92 (5%) ✅ 1.02 (1%) ❌
["mttkrp", "size=(100, 100, 100), rank=200, mode=2"] 0.99 (5%) 1.02 (1%) ❌
["mttkrp", "size=(100, 100, 100), rank=250, mode=1"] 1.06 (5%) ❌ 1.00 (1%)
["mttkrp", "size=(100, 100, 100), rank=250, mode=2"] 0.96 (5%) 1.02 (1%) ❌
["mttkrp", "size=(100, 100, 100), rank=300, mode=2"] 0.96 (5%) 1.02 (1%) ❌
["mttkrp", "size=(100, 100, 100), rank=50, mode=2"] 0.98 (5%) 1.02 (1%) ❌
["mttkrp", "size=(1000, 100, 30), rank=10, mode=2"] 1.08 (5%) ❌ 1.33 (1%) ❌
["mttkrp", "size=(1000, 100, 30), rank=100, mode=2"] 1.02 (5%) 1.33 (1%) ❌
["mttkrp", "size=(1000, 100, 30), rank=200, mode=2"] 1.01 (5%) 1.33 (1%) ❌
["mttkrp", "size=(1000, 100, 30), rank=300, mode=2"] 1.02 (5%) 1.33 (1%) ❌
["mttkrp", "size=(150, 150, 150), rank=10, mode=2"] 1.00 (5%) 1.01 (1%) ❌
["mttkrp", "size=(150, 150, 150), rank=100, mode=2"] 0.99 (5%) 1.01 (1%) ❌
["mttkrp", "size=(150, 150, 150), rank=150, mode=2"] 1.00 (5%) 1.01 (1%) ❌
["mttkrp", "size=(150, 150, 150), rank=200, mode=2"] 1.00 (5%) 1.01 (1%) ❌
["mttkrp", "size=(150, 150, 150), rank=250, mode=2"] 0.99 (5%) 1.01 (1%) ❌
["mttkrp", "size=(150, 150, 150), rank=300, mode=2"] 1.02 (5%) 1.01 (1%) ❌
["mttkrp", "size=(150, 150, 150), rank=50, mode=2"] 1.06 (5%) ❌ 1.01 (1%) ❌
["mttkrp", "size=(200, 200, 200), rank=10, mode=1"] 0.93 (5%) ✅ 1.00 (1%)
["mttkrp", "size=(200, 200, 200), rank=10, mode=2"] 0.98 (5%) 1.01 (1%) ❌
["mttkrp", "size=(30, 100, 1000), rank=10, mode=2"] 1.03 (5%) 1.33 (1%) ❌
["mttkrp", "size=(30, 100, 1000), rank=100, mode=1"] 1.09 (5%) ❌ 1.00 (1%)
["mttkrp", "size=(30, 100, 1000), rank=100, mode=2"] 1.00 (5%) 1.33 (1%) ❌
["mttkrp", "size=(30, 100, 1000), rank=200, mode=1"] 1.11 (5%) ❌ 1.00 (1%)
["mttkrp", "size=(30, 100, 1000), rank=200, mode=2"] 1.01 (5%) 1.33 (1%) ❌
["mttkrp", "size=(30, 100, 1000), rank=300, mode=2"] 1.02 (5%) 1.32 (1%) ❌
["mttkrp", "size=(50, 50, 50), rank=10, mode=2"] 1.06 (5%) ❌ 1.04 (1%) ❌
["mttkrp", "size=(50, 50, 50), rank=100, mode=2"] 0.93 (5%) ✅ 1.04 (1%) ❌
["mttkrp", "size=(50, 50, 50), rank=150, mode=2"] 0.93 (5%) ✅ 1.04 (1%) ❌
["mttkrp", "size=(50, 50, 50), rank=200, mode=2"] 0.93 (5%) ✅ 1.04 (1%) ❌
["mttkrp", "size=(50, 50, 50), rank=250, mode=2"] 0.91 (5%) ✅ 1.04 (1%) ❌
["mttkrp", "size=(50, 50, 50), rank=300, mode=2"] 0.91 (5%) ✅ 1.04 (1%) ❌
["mttkrp", "size=(50, 50, 50), rank=50, mode=2"] 0.94 (5%) ✅ 1.04 (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    1482743 s          0 s     567725 s   20188677 s          0 s
  Memory: 64.0 GB (36831.0625 MB free)
  Uptime: 488287.0 sec
  Load Avg:  5.26708984375  2.78662109375  2.3720703125
  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    1484453 s          0 s     568304 s   20189652 s          0 s
  Memory: 64.0 GB (36949.71875 MB free)
  Uptime: 488320.0 sec
  Load Avg:  5.80224609375  3.189453125  2.5341796875
  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
             ndims = 3, rank = 10, mode = 1  
            ┌──────────────────────────────┐ 
          4 │                             .│ 
            │                            : │ 
            │                          .'  │ 
            │                        .'    │ 
Time (ms)   │                       .'     │ 
            │                      :       │ 
            │                   ..'        │ 
            │                 .'           │ 
            │            ....'             │ 
          0 │       ..'''                  │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
             ndims = 3, rank = 10, mode = 2  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                             .│ 
            │                           .' │ 
            │                         .'   │ 
Time (ms)   │                       .'     │ 
            │                     .'       │ 
            │                   .'         │ 
            │                 .'           │ 
            │             ...'             │ 
          0 │       ..''''                 │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
             ndims = 3, rank = 10, mode = 3  
            ┌──────────────────────────────┐ 
          3 │                             .│ 
            │                            .'│ 
            │                          .'  │ 
            │                        .'    │ 
Time (ms)   │                       .'     │ 
            │                     .'       │ 
            │                   .'         │ 
            │                .''           │ 
            │           ..'''              │ 
          0 │       .'''                   │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
              ndims = 3, rank = 50, mode = 1  
             ┌──────────────────────────────┐ 
          10 │                             .│ 
             │                           .' │ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                      :       │ 
             │                   .''        │ 
             │                ..'           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 50, mode = 2  
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                      ..      │ 
Time (ms)    │                     :  '.    │ 
             │                   .'     '.. │ 
             │                  .'         '│ 
             │                 .'           │ 
             │                :             │ 
           0 │       ........:              │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 50, mode = 3  
             ┌──────────────────────────────┐ 
          10 │                              │ 
             │                            .'│ 
             │                           .' │ 
             │                         .'   │ 
Time (ms)    │                        :     │ 
             │                      .'      │ 
             │                   ..'        │ 
             │                 .'           │ 
             │            ...''             │ 
           0 │       .''''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 100, mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                             .│ 
Time (ms)    │                          ..' │ 
             │                        .'    │ 
             │                      .'      │ 
             │                  ..''        │ 
             │             ...''            │ 
           0 │       ..''''                 │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 100, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                              │ 
Time (ms)    │                           .''│ 
             │                         .'   │ 
             │                       .'     │ 
             │                     .'       │ 
             │                 ..''         │ 
           0 │       ......''''             │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 100, mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                             .│ 
Time (ms)    │                          .'' │ 
             │                        .'    │ 
             │                      .'      │ 
             │                  ..''        │ 
             │             ...''            │ 
           0 │       ..''''                 │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .:       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                     .:       │ 
             │                 ..''         │ 
             │            ...''             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         .'   │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 1 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    ..'       │ 
             │                 ..'          │ 
             │            ...''             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                             .│ 
             │                            .'│ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                     .:       │ 
             │                  ..'         │ 
             │                .'            │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 3 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    ..'       │ 
             │                 ..'          │ 
             │            ...''             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 1 
             ┌──────────────────────────────┐ 
          30 │                             .│ 
             │                            .'│ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                  .''         │ 
             │               ..'            │ 
             │          ...''               │ 
           0 │       .''                    │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 2 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    ..'       │ 
             │                 .''          │ 
             │            ..'''             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 3 
             ┌──────────────────────────────┐ 
          30 │                             .│ 
             │                            .'│ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                  ..'         │ 
             │                .'            │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 1 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             .│ 
             │                            : │ 
             │                          .'  │ 
Time (ms)    │                        .'    │ 
             │                      .'      │ 
             │                   .''        │ 
             │                ..'           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 2 
             ┌──────────────────────────────┐ 
          30 │                             .│ 
             │                           .' │ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │               ....    .'     │ 
             │             .'    ''''       │ 
             │            :                 │ 
             │          .'                  │ 
             │         :                    │ 
           0 │       .'                     │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 3 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                              │ 
             │                            .'│ 
             │                          .'  │ 
Time (ms)    │                        .'    │ 
             │                      .'      │ 
             │                   .''        │ 
             │                ..'           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
Baseline
             ndims = 3, rank = 10, mode = 1  
            ┌──────────────────────────────┐ 
          4 │                              │ 
            │                            .'│ 
            │                           :  │ 
            │                         .'   │ 
Time (ms)   │                        :     │ 
            │                      .'      │ 
            │                    .'        │ 
            │                 .''          │ 
            │             ...'             │ 
          0 │       ..''''                 │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
             ndims = 3, rank = 10, mode = 2  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                            .'│ 
            │                          .'  │ 
            │                        .'    │ 
Time (ms)   │                      .'      │ 
            │                    .'        │ 
            │                  .'          │ 
            │                .'            │ 
            │             ..:              │ 
          0 │       ..''''                 │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
             ndims = 3, rank = 10, mode = 3  
            ┌──────────────────────────────┐ 
          3 │                             :│ 
            │                           .' │ 
            │                          :   │ 
            │                        .'    │ 
Time (ms)   │                       :      │ 
            │                     .:       │ 
            │                   .'         │ 
            │                .''           │ 
            │           ...''              │ 
          0 │       .'''                   │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
              ndims = 3, rank = 50, mode = 1  
             ┌──────────────────────────────┐ 
          10 │                             .│ 
             │                            .'│ 
             │                          .'  │ 
             │                         .'   │ 
Time (ms)    │                       .'     │ 
             │                      .'      │ 
             │                   ..'        │ 
             │                 .'           │ 
             │           ...'''             │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 50, mode = 2  
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                      ..      │ 
Time (ms)    │                     :  '.    │ 
             │                   .'     ''. │ 
             │                  .'         '│ 
             │                 .'           │ 
             │                :             │ 
           0 │       ........:              │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
             ndims = 3, rank = 50, mode = 3  
            ┌──────────────────────────────┐ 
          9 │                             .│ 
            │                           .' │ 
            │                          .'  │ 
            │                        .'    │ 
Time (ms)   │                       .'     │ 
            │                     .'       │ 
            │                  ..'         │ 
            │                .'            │ 
            │           ...''              │ 
          0 │       .'''                   │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
              ndims = 3, rank = 100, mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                            ..│ 
Time (ms)    │                          .'  │ 
             │                        .'    │ 
             │                     ..'      │ 
             │                  ..'         │ 
             │             ...''            │ 
           0 │       ..''''                 │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 100, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                      ..      │ 
             │                     :  ''..  │ 
Time (ms)    │                   .'       ''│ 
             │                  .'          │ 
             │                 .'           │ 
             │                .'            │ 
             │               .'             │ 
           0 │       ......'''              │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 100, mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                             .│ 
Time (ms)    │                          .'' │ 
             │                        .'    │ 
             │                      .'      │ 
             │                  ..''        │ 
             │             ....'            │ 
           0 │       ..''''                 │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 1 
             ┌──────────────────────────────┐ 
          20 │                             .│ 
             │                            .'│ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    ..'       │ 
             │                 ..'          │ 
             │            ..'''             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .:       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 1 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    ..'       │ 
             │                 ..'          │ 
             │            ...''             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                  ..'         │ 
             │                .'            │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 3 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    ..'       │ 
             │                 ..'          │ 
             │            ....'             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 1 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                  ..'         │ 
             │                .'            │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 2 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                      ...'''''│ 
             │                     :        │ 
Time (ms)    │                   .'         │ 
             │                  .'          │ 
             │                 :            │ 
             │               .'             │ 
             │           ...''              │ 
           0 │       ..''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 3 
             ┌──────────────────────────────┐ 
          30 │                             .│ 
             │                            .'│ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 1 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             .│ 
             │                           .' │ 
             │                          :   │ 
Time (ms)    │                        .'    │ 
             │                      .'      │ 
             │                   .''        │ 
             │                ..'           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 2 
             ┌──────────────────────────────┐ 
          40 │                             .│ 
             │                            : │ 
             │                          .'  │ 
             │                         .'   │ 
Time (ms)    │                        .'    │ 
             │                       :      │ 
             │                     .:       │ 
             │                 ..''         │ 
             │            ..'''             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 3 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             .│ 
             │                           .' │ 
             │                          :   │ 
Time (ms)    │                        .'    │ 
             │                      .'      │ 
             │                   ..'        │ 
             │                ..'           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               

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
             size = (30, 100, 1000), mode = 1 
             ┌──────────────────────────────┐ 
          50 │                             .│ 
             │                          ..''│ 
             │                      ..''    │ 
             │                  ..''        │ 
Time (ms)    │               ..'            │ 
             │            .''               │ 
             │         .''                  │ 
             │      .''                     │ 
             │   .''                        │ 
           0 │ ''                           │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (30, 100, 1000), mode = 2 
            ┌──────────────────────────────┐ 
          8 │                              │ 
            │                            .'│ 
            │                         .''  │ 
            │                      .''     │ 
Time (ms)   │                 ...''        │ 
            │             ..''             │ 
            │         .'''                 │ 
            │     ..''                     │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (30, 100, 1000), mode = 3 
            ┌──────────────────────────────┐ 
          8 │                             .│ 
            │                           .''│ 
            │                        .''   │ 
            │                    ..''      │ 
Time (ms)   │                ..''          │ 
            │            ..''              │ 
            │        ..''                  │ 
            │     ..'                      │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
              size = (50, 50, 50), mode = 1  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                              │ 
            │                              │ 
            │                         ...''│ 
Time (ms)   │                     ..''     │ 
            │                 ..''         │ 
            │            ..'''             │ 
            │       ...''                  │ 
            │   .'''                       │ 
          0 │ ''                           │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
              size = (50, 50, 50), mode = 2  
            ┌──────────────────────────────┐ 
          1 │                             .│ 
            │                          .'' │ 
            │                      ..''    │ 
            │                   ..'        │ 
Time (ms)   │                .''           │ 
            │            ..''              │ 
            │         ..'                  │ 
            │     ..''                     │ 
            │  ..'                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
              size = (50, 50, 50), mode = 3  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                              │ 
            │                             .│ 
            │                           ..'│ 
Time (ms)   │                     ....''   │ 
            │                ...''         │ 
            │            ..''              │ 
            │       ..'''                  │ 
            │   .'''                       │ 
          0 │ ''                           │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (100, 100, 100), mode = 1 
            ┌──────────────────────────────┐ 
          7 │                           ..:│ 
            │                        .''   │ 
            │                      .'      │ 
            │                   ..'        │ 
Time (ms)   │                .''           │ 
            │            ..''              │ 
            │        ..''                  │ 
            │     .''                      │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (100, 100, 100), mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                             .│ 
             │                            .'│ 
Time (ms)    │                           .' │ 
             │                          .'  │ 
             │                         .'   │ 
             │                     ....:    │ 
             │             ..''''''         │ 
           0 │ .......'''''                 │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (100, 100, 100), mode = 3 
            ┌──────────────────────────────┐ 
          7 │                            .:│ 
            │                         ..'  │ 
            │                      ..'     │ 
            │                   .''        │ 
Time (ms)   │               ..''           │ 
            │            ..'               │ 
            │         ..'                  │ 
            │     ..''                     │ 
            │  ..'                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (150, 150, 150), mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                        ..''  │ 
             │                     ..'      │ 
Time (ms)    │                 ..''         │ 
             │             ..''             │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  .''                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (150, 150, 150), mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                             .│ 
             │     .                    ..''│ 
Time (ms)    │    :'.               ..''    │ 
             │   .'  :         ...''        │ 
             │   :    '.  ...''             │ 
             │  :      '''                  │ 
             │ .'                           │ 
           0 │ :                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (150, 150, 150), mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                         .''  │ 
             │                     ..''     │ 
Time (ms)    │                 ..''         │ 
             │             ..''             │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  ..'                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 1 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             :│ 
             │                         ..'' │ 
             │                     ..''     │ 
Time (ms)    │                 ..''         │ 
             │             ..''             │ 
             │         ..''                 │ 
             │     .'''                     │ 
             │  .''                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 2 
             ┌──────────────────────────────┐ 
          30 │                             :│ 
             │                          ..' │ 
             │                       ..'    │ 
             │                    ..'       │ 
Time (ms)    │                ..''          │ 
             │          ...'''              │ 
             │       ..'                    │ 
             │     .'                       │ 
             │  ..'                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 3 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             .│ 
             │                          .'' │ 
             │                      ..''    │ 
Time (ms)    │                  ..''        │ 
             │             ...''            │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  ..'                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (1000, 100, 30), mode = 1 
            ┌──────────────────────────────┐ 
          8 │                             .│ 
            │                          ..' │ 
            │                        .'    │ 
            │                     .''      │ 
Time (ms)   │                ..'''         │ 
            │            ..''              │ 
            │        ..''                  │ 
            │     .''                      │ 
            │ ..''                         │ 
          0 │                              │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (1000, 100, 30), mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │          .                   │ 
Time (ms)    │        .' ''.                │ 
             │       :      '.              │ 
             │     .'         '..       ...:│ 
             │    :              '..''''    │ 
             │  .'                          │ 
           0 │ :                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (1000, 100, 30), mode = 3 
             ┌──────────────────────────────┐ 
          50 │                             .│ 
             │                          ..''│ 
             │                       ..'    │ 
             │                   ..''       │ 
Time (ms)    │                .''           │ 
             │            ..''              │ 
             │         .''                  │ 
             │      .''                     │ 
             │   .''                        │ 
           0 │ ''                           │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
Baseline
             size = (30, 100, 1000), mode = 1 
             ┌──────────────────────────────┐ 
          50 │                              │ 
             │                           ..'│ 
             │                       ..''   │ 
             │                    ..'       │ 
Time (ms)    │                ..''          │ 
             │             .''              │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  .''                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (30, 100, 1000), mode = 2 
            ┌──────────────────────────────┐ 
          7 │                            .'│ 
            │                         .''  │ 
            │                      ..'     │ 
            │                   ..'        │ 
Time (ms)   │               ..''           │ 
            │           ..''               │ 
            │       ..''                   │ 
            │    ..'                       │ 
            │ ..'                          │ 
          0 │                              │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (30, 100, 1000), mode = 3 
            ┌──────────────────────────────┐ 
          9 │                              │ 
            │                            .'│ 
            │                        ..''  │ 
            │                     ..'      │ 
Time (ms)   │                  ..'         │ 
            │              ..''            │ 
            │          ..''                │ 
            │      ..''                    │ 
            │  ..''                        │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
              size = (50, 50, 50), mode = 1  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                              │ 
            │                              │ 
            │                        ...'''│ 
Time (ms)   │                     ..'      │ 
            │                 ..''         │ 
            │           ...'''             │ 
            │      ...''                   │ 
            │   .''                        │ 
          0 │ ''                           │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
                size = (50, 50, 50), mode = 2  
              ┌──────────────────────────────┐ 
          1.1 │                             .│ 
              │                          ..' │ 
              │                       .''    │ 
              │                   ..''       │ 
Time (ms)     │                ..'           │ 
              │             .''              │ 
              │         ..''                 │ 
              │      .''                     │ 
              │   .''                        │ 
            0 │ ''                           │ 
              └──────────────────────────────┘ 
               0                          300  
                            Rank               
              size = (50, 50, 50), mode = 3  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                              │ 
            │                              │ 
            │                           ..'│ 
Time (ms)   │                      ....'   │ 
            │                 ..'''        │ 
            │            ...''             │ 
            │      ...'''                  │ 
            │   .''                        │ 
          0 │ ''                           │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (100, 100, 100), mode = 1 
            ┌──────────────────────────────┐ 
          7 │                             .│ 
            │                          ..' │ 
            │                      ..''    │ 
            │                   .''        │ 
Time (ms)   │               ..''           │ 
            │            ..'               │ 
            │        ..''                  │ 
            │     .''                      │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (100, 100, 100), mode = 2 
            ┌──────────────────────────────┐ 
          7 │                             .│ 
            │                           .''│ 
            │                        ..'   │ 
            │                     ..'      │ 
Time (ms)   │                 ...'         │ 
            │              .''             │ 
            │            .'                │ 
            │          .'                  │ 
            │     ...'''                   │ 
          0 │ .'''                         │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (100, 100, 100), mode = 3 
            ┌──────────────────────────────┐ 
          7 │                             :│ 
            │                          .'' │ 
            │                       .''    │ 
            │                   ..''       │ 
Time (ms)   │               ..''           │ 
            │            ..'               │ 
            │         ..'                  │ 
            │     ..''                     │ 
            │  ..'                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (150, 150, 150), mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                         .''  │ 
             │                     ..''     │ 
Time (ms)    │                 ..''         │ 
             │             ..''             │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  .''                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (150, 150, 150), mode = 2 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                        ..    │ 
             │                       .''.   │ 
Time (ms)    │                      .'   '. │ 
             │     ..''':          :       '│ 
             │    :      '.      .:         │ 
             │   :         '..'''           │ 
             │  :                           │ 
           0 │ :                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (150, 150, 150), mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .:│ 
             │                         ..'  │ 
             │                     ..''     │ 
Time (ms)    │                 ..''         │ 
             │             ..''             │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  ..'                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 1 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             :│ 
             │                          .'' │ 
             │                      ..''    │ 
Time (ms)    │                 ...''        │ 
             │             ..''             │ 
             │         ..''                 │ 
             │     .'''                     │ 
             │  .''                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 2 
             ┌──────────────────────────────┐ 
          40 │                             .│ 
             │                            .'│ 
             │                           :  │ 
             │                         .'   │ 
Time (ms)    │                      ..''    │ 
             │                 ...''        │ 
             │            ..'''             │ 
             │       ..'''                  │ 
             │   ..''                       │ 
           0 │ .'                           │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 3 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             :│ 
             │                          .'' │ 
             │                      ..''    │ 
Time (ms)    │                  ..''        │ 
             │             ...''            │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  ..'                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (1000, 100, 30), mode = 1 
            ┌──────────────────────────────┐ 
          8 │                             .│ 
            │                           .' │ 
            │                        .''   │ 
            │                     .''      │ 
Time (ms)   │                ...''         │ 
            │            ..''              │ 
            │        ..''                  │ 
            │     .''                      │ 
            │ ..''                         │ 
          0 │                              │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (1000, 100, 30), mode = 2 
            ┌──────────────────────────────┐ 
          7 │                            .'│ 
            │                         .''  │ 
            │                      ..'     │ 
            │                   ..'        │ 
Time (ms)   │               ..''           │ 
            │          ...''               │ 
            │       ..'                    │ 
            │    ..'                       │ 
            │ ..'                          │ 
          0 │                              │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (1000, 100, 30), mode = 3 
             ┌──────────────────────────────┐ 
          50 │                             .│ 
             │                          .'' │ 
             │                       .''    │ 
             │                   ..''       │ 
Time (ms)    │                .''           │ 
             │            ..''              │ 
             │         .''                  │ 
             │      .''                     │ 
             │   .''                        │ 
           0 │ ''                           │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               

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
       size = (30, 100, 1000), rank = 10 
       ┌                              ┐ 
                         ┬┐          ╷  
mode 1                   │├──────────┤  
                         ┴┘          ╵  
           ┌┐      ╷                    
mode 2     ┤├──────┤                    
           └┘      ╵                    
           ┐  ╷                         
mode 3     ├──┤                         
           ┘  ╵                         
       └                              ┘ 
        0            2.5             5  
                   Time (ms)            
       size = (30, 100, 1000), rank = 100 
       ┌                              ┐ 
            ┐                     ╷     
mode 1      ├─────────────────────┤     
            ┘                     ╵     
        ╷                               
mode 2  ┤                               
        ╵                               
        ╷                               
mode 3  ┤                               
        ╵                               
       └                              ┘ 
        0            55            110  
                   Time (ms)            
       size = (30, 100, 1000), rank = 200 
       ┌                              ┐ 
                                ┬╷      
mode 1                          │┤      
                                ┴╵      
          ┐╷                            
mode 2    ├┤                            
          ┘╵                            
           ┐╷                           
mode 3     ├┤                           
           ┘╵                           
       └                              ┘ 
        0            20             40  
                   Time (ms)            
       size = (30, 100, 1000), rank = 300 
       ┌                              ┐ 
                                  ┬╷    
mode 1                            │┤    
                                  ┴╵    
           ┬┐     ╷                     
mode 2     │├─────┤                     
           ┴┘     ╵                     
           ┐╷                           
mode 3     ├┤                           
           ┘╵                           
       └                              ┘ 
        0            25             50  
                   Time (ms)            
        size = (50, 50, 50), rank = 10  
       ┌                              ┐ 
                           ┬┐     ╷     
mode 1                     │├─────┤     
                           ┴┘     ╵     
                  ┬┐       ╷            
mode 2            │├───────┤            
                  ┴┘       ╵            
                           ┬┐        ╷  
mode 3                     │├────────┤  
                           ┴┘        ╵  
       └                              ┘ 
        0            0.1           0.2  
                   Time (ms)            
        size = (50, 50, 50), rank = 50  
       ┌                              ┐ 
                           ┐   ╷        
mode 1                     ├───┤        
                           ┘   ╵        
              ┌┐     ╷                  
mode 2        ┤├─────┤                  
              └┘     ╵                  
                          ┌┐  ╷         
mode 3                    ┤├──┤         
                          └┘  ╵         
       └                              ┘ 
        0.1          0.3           0.5  
                   Time (ms)            
        size = (50, 50, 50), rank = 100 
       ┌                              ┐ 
                              ┬─┐  ╷    
mode 1                        │ ├──┤    
                              ┴─┘  ╵    
           ┬┐    ╷                      
mode 2     │├────┤                      
           ┴┘    ╵                      
                                ┐   ╷   
mode 3                          ├───┤   
                                ┘   ╵   
       └                              ┘ 
        0.3         0.45           0.6  
                   Time (ms)            
        size = (50, 50, 50), rank = 150 
       ┌                              ┐ 
                            ┬┐ ╷        
mode 1                      │├─┤        
                            ┴┘ ╵        
             ┬┐      ╷                  
mode 2       │├──────┤                  
             ┴┘      ╵                  
                            ╷┐       ╷  
mode 3                      ├├───────┤  
                            ╵┘       ╵  
       └                              ┘ 
        0.4         0.65           0.9  
                   Time (ms)            
        size = (50, 50, 50), rank = 200 
       ┌                              ┐ 
                            ┬┐  ╷       
mode 1                      │├──┤       
                            ┴┘  ╵       
         ╷┬──┐     ╷                    
mode 2   ├│  ├─────┤                    
         ╵┴──┘     ╵                    
                             ╷┐     ╷   
mode 3                       ├├─────┤   
                             ╵┘     ╵   
       └                              ┘ 
        0.6         0.85           1.1  
                   Time (ms)            
        size = (50, 50, 50), rank = 250 
       ┌                              ┐ 
                                ╷┬┐ ╷   
mode 1                          ├│├─┤   
                                ╵┴┘ ╵   
           ┌┬┐ ╷                        
mode 2     ┤│├─┤                        
           └┴┘ ╵                        
                          ┌┐  ╷         
mode 3                    ┤├──┤         
                          └┘  ╵         
       └                              ┘ 
        0.7           1            1.3  
                   Time (ms)            
        size = (50, 50, 50), rank = 300 
       ┌                              ┐ 
                              ┌┐   ╷    
mode 1                        ┤├───┤    
                              └┘   ╵    
         ┬┐ ╷                           
mode 2   │├─┤                           
         ┴┘ ╵                           
                               ╷┐  ╷    
mode 3                         ├├──┤    
                               ╵┘  ╵    
       └                              ┘ 
        0.9          1.2           1.5  
                   Time (ms)            
       size = (100, 100, 100), rank = 10 
       ┌                              ┐ 
                     ╷┐           ╷     
mode 1               ├├───────────┤     
                     ╵┘           ╵     
         ┐     ╷                        
mode 2   ├─────┤                        
         ┘     ╵                        
                     ┬┐   ╷             
mode 3               │├───┤             
                     ┴┘   ╵             
       └                              ┘ 
        0.2         0.55           0.9  
                   Time (ms)            
       size = (100, 100, 100), rank = 50 
       ┌                              ┐ 
                                ┬┐ ╷    
mode 1                          │├─┤    
                                ┴┘ ╵    
          ┐   ╷                         
mode 2    ├───┤                         
          ┘   ╵                         
                              ┬┐   ╷    
mode 3                        │├───┤    
                              ┴┘   ╵    
       └                              ┘ 
        0.7         1.25           1.8  
                   Time (ms)            
       size = (100, 100, 100), rank = 100 
       ┌                              ┐ 
                             ╷┐ ╷       
mode 1                       ├├─┤       
                             ╵┘ ╵       
           ┐ ╷                          
mode 2     ├─┤                          
           ┘ ╵                          
                            ┐  ╷        
mode 3                      ├──┤        
                            ┘  ╵        
       └                              ┘ 
        1             2              3  
                   Time (ms)            
       size = (100, 100, 100), rank = 150 
       ┌                              ┐ 
           ╷                            
mode 1     ┤                            
           ╵                            
         ╷┐                         ╷   
mode 2   ├├─────────────────────────┤   
         ╵┘                         ╵   
           ┬╷                           
mode 3     │┤                           
           ┴╵                           
       └                              ┘ 
        2            7.5            13  
                   Time (ms)            
       size = (100, 100, 100), rank = 200 
       ┌                              ┐ 
                            ╷ ┐ ╷       
mode 1                      ├─├─┤       
                            ╵ ┘ ╵       
         ╷  ┌┐  ╷                       
mode 2   ├──┤├──┤                       
         ╵  └┘  ╵                       
                           ╷  ┌┬─┐ ╷    
mode 3                     ├──┤│ ├─┤    
                           ╵  └┴─┘ ╵    
       └                              ┘ 
        3.7         4.25           4.8  
                   Time (ms)            
       size = (100, 100, 100), rank = 250 
       ┌                              ┐ 
               ╷┬─┐ ╷                   
mode 1         ├│ ├─┤                   
               ╵┴─┘ ╵                   
              ┐              ╷          
mode 2        ├──────────────┤          
              ┘              ╵          
               ┬╷                       
mode 3         │┤                       
               ┴╵                       
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (100, 100, 100), rank = 300 
       ┌                              ┐ 
                 ╷                      
mode 1           ┤                      
                 ╵                      
                ┌──────────────╷        
mode 2          ┤              ┤        
                └──────────────╵        
                 ╷                      
mode 3           ┤                      
                 ╵                      
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (150, 150, 150), rank = 10 
       ┌                              ┐ 
        ╷                               
mode 1  ┤                               
        ╵                               
        ┐                         ╷     
mode 2  ├─────────────────────────┤     
        ┘                         ╵     
        ╷                               
mode 3  ┤                               
        ╵                               
       └                              ┘ 
        0            100           200  
                   Time (ms)            
       size = (150, 150, 150), rank = 50 
       ┌                              ┐ 
           ╷╷                           
mode 1     ├┤                           
           ╵╵                           
        ╷                           ┌╷  
mode 2  ├───────────────────────────┤┤  
        ╵                           └╵  
           ╷                            
mode 3     ┤                            
           ╵                            
       └                              ┘ 
        3             8             13  
                   Time (ms)            
       size = (150, 150, 150), rank = 100 
       ┌                              ┐ 
                 ╷                      
mode 1           ┤                      
                 ╵                      
               ┬──────────────╷         
mode 2         │              ┤         
               ┴──────────────╵         
                 ╷                      
mode 3           ┤                      
                 ╵                      
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (150, 150, 150), rank = 150 
       ┌                              ┐ 
                     ╷                  
mode 1               ┤                  
                     ╵                  
                  ┐              ╷      
mode 2            ├──────────────┤      
                  ┘              ╵      
                     ╷                  
mode 3               ┤                  
                     ╵                  
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (150, 150, 150), rank = 200 
       ┌                              ┐ 
                           ╷┌┬┐╷        
mode 1                     ├┤│├┤        
                           ╵└┴┘╵        
        ┌┐╷                             
mode 2  ┤├┤                             
        └┘╵                             
                          ┐ ╷           
mode 3                    ├─┤           
                          ┘ ╵           
       └                              ┘ 
        9            11             13  
                   Time (ms)            
       size = (150, 150, 150), rank = 250 
       ┌                              ┐ 
                 ┐╷                     
mode 1           ├┤                     
                 ┘╵                     
        ╷┬────────────────────────┐╷    
mode 2  ├│                        ├┤    
        ╵┴────────────────────────┘╵    
                ┐╷                      
mode 3          ├┤                      
                ┘╵                      
       └                              ┘ 
        11          16.5            22  
                   Time (ms)            
       size = (150, 150, 150), rank = 300 
       ┌                              ┐ 
             ╷                          
mode 1       ┤                          
             ╵                          
          ┬──────┐            ╷         
mode 2    │      ├────────────┤         
          ┴──────┘            ╵         
             ┐ ╷                        
mode 3       ├─┤                        
             ┘ ╵                        
       └                              ┘ 
        10           30             50  
                   Time (ms)            
       size = (200, 200, 200), rank = 10 
       ┌                              ┐ 
                                ╷┌┬┐╷   
mode 1                          ├┤│├┤   
                                ╵└┴┘╵   
              ╷┐╷                       
mode 2        ├├┤                       
              ╵┘╵                       
                         ┐╷             
mode 3                   ├┤             
                         ┘╵             
       └                              ┘ 
        1            2.5             4  
                   Time (ms)            
       size = (200, 200, 200), rank = 50 
       ┌                              ┐ 
                     ╷                  
mode 1               ┤                  
                     ╵                  
                 ┬──────────────┐╷      
mode 2           │              ├┤      
                 ┴──────────────┘╵      
                    ┌╷                  
mode 3              ┤┤                  
                    └╵                  
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (200, 200, 200), rank = 100 
       ┌                              ┐ 
           ┌╷                           
mode 1     ┤┤                           
           └╵                           
        ┌──┬──────────┐              ╷  
mode 2  ┤  │          ├──────────────┤  
        └──┴──────────┘              ╵  
           ╷╷                           
mode 3     ├┤                           
           ╵╵                           
       └                              ┘ 
        10           20             30  
                   Time (ms)            
       size = (200, 200, 200), rank = 150 
       ┌                              ┐ 
                   ┐╷                   
mode 1             ├┤                   
                   ┘╵                   
              ┬──────────────╷          
mode 2        │              ┤          
              ┴──────────────╵          
                   ┐╷                   
mode 3             ├┤                   
                   ┘╵                   
       └                              ┘ 
        10           20             30  
                   Time (ms)            
       size = (200, 200, 200), rank = 200 
       ┌                              ┐ 
               ╷                        
mode 1         ┤                        
               ╵                        
            ┬─────╷                     
mode 2      │     ┤                     
            ┴─────╵                     
              ╷┬────┐          ╷        
mode 3        ├│    ├──────────┤        
              ╵┴────┘          ╵        
       └                              ┘ 
        10           35             60  
                   Time (ms)            
       size = (200, 200, 200), rank = 250 
       ┌                              ┐ 
                                 ┬─┐╷   
mode 1                           │ ├┤   
                                 ┴─┘╵   
         ╷┌─╷                           
mode 2   ├┤ ┤                           
         ╵└─╵                           
                                ┬┐╷     
mode 3                          │├┤     
                                ┴┘╵     
       └                              ┘ 
        22          25.5            29  
                   Time (ms)            
       size = (200, 200, 200), rank = 300 
       ┌                              ┐ 
                       ╷┐╷              
mode 1                 ├├┤              
                       ╵┘╵              
        ┌┐                         ╷    
mode 2  ┤├─────────────────────────┤    
        └┘                         ╵    
                      ┬┐  ╷             
mode 3                │├──┤             
                      ┴┘  ╵             
       └                              ┘ 
        28          33.5            39  
                   Time (ms)            
       size = (1000, 100, 30), rank = 10 
       ┌                              ┐ 
             ┌┬──────┐   ╷              
mode 1       ┤│      ├───┤              
             └┴──────┘   ╵              
             ┐   ╷                      
mode 2       ├───┤                      
             ┘   ╵                      
                             ┬┐   ╷     
mode 3                       │├───┤     
                             ┴┘   ╵     
       └                              ┘ 
        0             2              4  
                   Time (ms)            
       size = (1000, 100, 30), rank = 100 
       ┌                              ┐ 
          ┐ ╷                           
mode 1    ├─┤                           
          ┘ ╵                           
          ┌─────────┐            ╷      
mode 2    ┤         ├────────────┤      
          └─────────┘            ╵      
                        ┌╷              
mode 3                  ┤┤              
                        └╵              
       └                              ┘ 
        0            15             30  
                   Time (ms)            
       size = (1000, 100, 30), rank = 200 
       ┌                              ┐ 
           ┐╷                           
mode 1     ├┤                           
           ┘╵                           
          ┐╷                            
mode 2    ├┤                            
          ┘╵                            
                               ╷        
mode 3                         ┤        
                               ╵        
       └                              ┘ 
        0            20             40  
                   Time (ms)            
       size = (1000, 100, 30), rank = 300 
       ┌                              ┐ 
           ┐╷                           
mode 1     ├┤                           
           ┘╵                           
           ┐╷                           
mode 2     ├┤                           
           ┘╵                           
                                  ┌┐╷   
mode 3                            ┤├┤   
                                  └┘╵   
       └                              ┘ 
        0            25             50  
                   Time (ms)            
Baseline
       size = (30, 100, 1000), rank = 10 
       ┌                              ┐ 
                     ┌──────┬─┐     ╷   
mode 1               ┤      │ ├─────┤   
                     └──────┴─┘     ╵   
          ┐    ╷                        
mode 2    ├────┤                        
          ┘    ╵                        
          ┐ ╷                           
mode 3    ├─┤                           
          ┘ ╵                           
       └                              ┘ 
        0            3.5             7  
                   Time (ms)            
       size = (30, 100, 1000), rank = 100 
       ┌                              ┐ 
            ╷┐                       ╷  
mode 1      ├├───────────────────────┤  
            ╵┘                       ╵  
        ╷                               
mode 2  ┤                               
        ╵                               
        ╷                               
mode 3  ┤                               
        ╵                               
       └                              ┘ 
        0            45             90  
                   Time (ms)            
       size = (30, 100, 1000), rank = 200 
       ┌                              ┐ 
                              ┐╷        
mode 1                        ├┤        
                              ┘╵        
          ┐╷                            
mode 2    ├┤                            
          ┘╵                            
           ┬──────┐            ╷        
mode 3     │      ├────────────┤        
           ┴──────┘            ╵        
       └                              ┘ 
        0            20             40  
                   Time (ms)            
       size = (30, 100, 1000), rank = 300 
       ┌                              ┐ 
                                 ╷┬╷    
mode 1                           ├│┤    
                                 ╵┴╵    
           ┐╷                           
mode 2     ├┤                           
           ┘╵                           
            ╷                           
mode 3      ┤                           
            ╵                           
       └                              ┘ 
        0            25             50  
                   Time (ms)            
        size = (50, 50, 50), rank = 10  
       ┌                              ┐ 
                          ┌┬─┐   ╷      
mode 1                    ┤│ ├───┤      
                          └┴─┘   ╵      
                 ╷┐        ╷            
mode 2           ├├────────┤            
                 ╵┘        ╵            
                          ┐     ╷       
mode 3                    ├─────┤       
                          ┘     ╵       
       └                              ┘ 
        0            0.1           0.2  
                   Time (ms)            
        size = (50, 50, 50), rank = 50  
       ┌                              ┐ 
                       ┬┐   ╷           
mode 1                 │├───┤           
                       ┴┘   ╵           
        ╷┐     ╷                        
mode 2  ├├─────┤                        
        ╵┘     ╵                        
                       ╷┐    ╷          
mode 3                 ├├────┤          
                       ╵┘    ╵          
       └                              ┘ 
        0.2         0.35           0.5  
                   Time (ms)            
        size = (50, 50, 50), rank = 100 
       ┌                              ┐ 
                         ╷┌┬┐  ╷        
mode 1                   ├┤│├──┤        
                         ╵└┴┘  ╵        
            ┌┐     ╷                    
mode 2      ┤├─────┤                    
            └┘     ╵                    
                         ┐ ╷            
mode 3                   ├─┤            
                         ┘ ╵            
       └                              ┘ 
        0.3          0.5           0.7  
                   Time (ms)            
        size = (50, 50, 50), rank = 150 
       ┌                              ┐ 
                         ╷┬┐  ╷         
mode 1                   ├│├──┤         
                         ╵┴┘  ╵         
         ┌┬┐  ╷                         
mode 2   ┤│├──┤                         
         └┴┘  ╵                         
                       ╷┬┐  ╷           
mode 3                 ├│├──┤           
                       ╵┴┘  ╵           
       └                              ┘ 
        0.5          0.7           0.9  
                   Time (ms)            
        size = (50, 50, 50), rank = 200 
       ┌                              ┐ 
                           ┌┐╷          
mode 1                     ┤├┤          
                           └┘╵          
            ┬┐   ╷                      
mode 2      │├───┤                      
            ┴┘   ╵                      
                            ╷┬─┐   ╷    
mode 3                      ├│ ├───┤    
                            ╵┴─┘   ╵    
       └                              ┘ 
        0.6         0.85           1.1  
                   Time (ms)            
        size = (50, 50, 50), rank = 250 
       ┌                              ┐ 
                          ╷   ┌┐ ╷      
mode 1                    ├───┤├─┤      
                          ╵   └┘ ╵      
          ┬───┐╷                        
mode 2    │   ├┤                        
          ┴───┘╵                        
                    ┌┬┐   ╷             
mode 3              ┤│├───┤             
                    └┴┘   ╵             
       └                              ┘ 
        0.8          1.1           1.4  
                   Time (ms)            
        size = (50, 50, 50), rank = 300 
       ┌                              ┐ 
                          ╷┬─┐  ╷       
mode 1                    ├│ ├──┤       
                          ╵┴─┘  ╵       
         ┬┐  ╷                          
mode 2   │├──┤                          
         ┴┘  ╵                          
                          ╷┐  ╷         
mode 3                    ├├──┤         
                          ╵┘  ╵         
       └                              ┘ 
        1            1.3           1.6  
                   Time (ms)            
       size = (100, 100, 100), rank = 10 
       ┌                              ┐ 
                     ┐           ╷      
mode 1               ├───────────┤      
                     ┘           ╵      
         ┐     ╷                        
mode 2   ├─────┤                        
         ┘     ╵                        
                    ╷┐   ╷              
mode 3              ├├───┤              
                    ╵┘   ╵              
       └                              ┘ 
        0.2         0.55           0.9  
                   Time (ms)            
       size = (100, 100, 100), rank = 50 
       ┌                              ┐ 
                              ╷┐   ╷    
mode 1                        ├├───┤    
                              ╵┘   ╵    
        ┐  ╷                            
mode 2  ├──┤                            
        ┘  ╵                            
                              ┬┐  ╷     
mode 3                        │├──┤     
                              ┴┘  ╵     
       └                              ┘ 
        0.8          1.3           1.8  
                   Time (ms)            
       size = (100, 100, 100), rank = 100 
       ┌                              ┐ 
                             ┐╷         
mode 1                       ├┤         
                             ┘╵         
           ┐ ╷                          
mode 2     ├─┤                          
           ┘ ╵                          
                            ┐  ╷        
mode 3                      ├──┤        
                            ┘  ╵        
       └                              ┘ 
        1             2              3  
                   Time (ms)            
       size = (100, 100, 100), rank = 150 
       ┌                              ┐ 
            ╷                           
mode 1      ┤                           
            ╵                           
            ┬──────────────╷            
mode 2      │              ┤            
            ┴──────────────╵            
            ┐╷                          
mode 3      ├┤                          
            ┘╵                          
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (100, 100, 100), rank = 200 
       ┌                              ┐ 
              ╷                         
mode 1        ┤                         
              ╵                         
             ┐              ╷           
mode 2       ├──────────────┤           
             ┘              ╵           
              ╷                         
mode 3        ┤                         
              ╵                         
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (100, 100, 100), rank = 250 
       ┌                              ┐ 
           ┐╷                           
mode 1     ├┤                           
           ┘╵                           
         ╷┬┐                         ╷  
mode 2   ├│├─────────────────────────┤  
         ╵┴┘                         ╵  
           ┐╷                           
mode 3     ├┤                           
           ┘╵                           
       └                              ┘ 
        4            9.5            15  
                   Time (ms)            
       size = (100, 100, 100), rank = 300 
       ┌                              ┐ 
                 ┐╷                     
mode 1           ├┤                     
                 ┘╵                     
                ┌┬─────────────╷        
mode 2          ┤│             ┤        
                └┴─────────────╵        
                 ┬┐                ╷    
mode 3           │├────────────────┤    
                 ┴┘                ╵    
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (150, 150, 150), rank = 10 
       ┌                              ┐ 
        ╷                               
mode 1  ┤                               
        ╵                               
        ┐                    ╷          
mode 2  ├────────────────────┤          
        ┘                    ╵          
        ╷                               
mode 3  ┤                               
        ╵                               
       └                              ┘ 
        0            100           200  
                   Time (ms)            
       size = (150, 150, 150), rank = 50 
       ┌                              ┐ 
             ╷╷                         
mode 1       ├┤                         
             ╵╵                         
            ┌─────────────┐╷            
mode 2      ┤             ├┤            
            └─────────────┘╵            
              ╷                         
mode 3        ┤                         
              ╵                         
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (150, 150, 150), rank = 100 
       ┌                              ┐ 
                 ┬╷                     
mode 1           │┤                     
                 ┴╵                     
               ╷             ┬╷         
mode 2         ├─────────────│┤         
               ╵             ┴╵         
                 ╷                      
mode 3           ┤                      
                 ╵                      
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (150, 150, 150), rank = 150 
       ┌                              ┐ 
                     ┐╷                 
mode 1               ├┤                 
                     ┘╵                 
                  ┬──────────────╷      
mode 2            │              ┤      
                  ┴──────────────╵      
                     ╷                  
mode 3               ┤                  
                     ╵                  
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (150, 150, 150), rank = 200 
       ┌                              ┐ 
                         ┐╷             
mode 1                   ├┤             
                         ┘╵             
                     ┬─────────────┐╷   
mode 2               │             ├┤   
                     ┴─────────────┘╵   
                        ┬╷              
mode 3                  │┤              
                        ┴╵              
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (150, 150, 150), rank = 250 
       ┌                              ┐ 
              ╷                         
mode 1        ┤                         
              ╵                         
         ╷┌──────────────╷              
mode 2   ├┤              ┤              
         ╵└──────────────╵              
             ┐╷                         
mode 3       ├┤                         
             ┘╵                         
       └                              ┘ 
        10           20             30  
                   Time (ms)            
       size = (150, 150, 150), rank = 300 
       ┌                              ┐ 
                  ┌┐╷                   
mode 1            ┤├┤                   
                  └┘╵                   
             ┬┐             ╷           
mode 2       │├─────────────┤           
             ┴┘             ╵           
                  ┬╷                    
mode 3            │┤                    
                  ┴╵                    
       └                              ┘ 
        10           20             30  
                   Time (ms)            
       size = (200, 200, 200), rank = 10 
       ┌                              ┐ 
                                  ╷┐ ╷  
mode 1                            ├├─┤  
                                  ╵┘ ╵  
               ┐╷                       
mode 2         ├┤                       
               ┘╵                       
                          ┐╷            
mode 3                    ├┤            
                          ┘╵            
       └                              ┘ 
        1            2.5             4  
                   Time (ms)            
       size = (200, 200, 200), rank = 50 
       ┌                              ┐ 
                     ╷                  
mode 1               ┤                  
                     ╵                  
                 ┌┬─────────────╷       
mode 2           ┤│             ┤       
                 └┴─────────────╵       
                    ╷                   
mode 3              ┤                   
                    ╵                   
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (200, 200, 200), rank = 100 
       ┌                              ┐ 
            ╷                           
mode 1      ┤                           
            ╵                           
        ┬─────────────┐╷                
mode 2  │             ├┤                
        ┴─────────────┘╵                
            ╷                           
mode 3      ┤                           
            ╵                           
       └                              ┘ 
        10           20             30  
                   Time (ms)            
       size = (200, 200, 200), rank = 150 
       ┌                              ┐ 
                   ╷┐╷                  
mode 1             ├├┤                  
                   ╵┘╵                  
              ┬──────────────╷          
mode 2        │              ┤          
              ┴──────────────╵          
                   ╷                    
mode 3             ┤                    
                   ╵                    
       └                              ┘ 
        10           20             30  
                   Time (ms)            
       size = (200, 200, 200), rank = 200 
       ┌                              ┐ 
                                  ╷┬┐╷  
mode 1                            ├│├┤  
                                  ╵┴┘╵  
        ┌┐╷                             
mode 2  ┤├┤                             
        └┘╵                             
                               ╷┐ ╷     
mode 3                         ├├─┤     
                               ╵┘ ╵     
       └                              ┘ 
        18          20.5            23  
                   Time (ms)            
       size = (200, 200, 200), rank = 250 
       ┌                              ┐ 
                  ┌╷                    
mode 1            ┤┤                    
                  └╵                    
            ┬──────────────┐╷           
mode 2      │              ├┤           
            ┴──────────────┘╵           
                  ┌╷                    
mode 3            ┤┤                    
                  └╵                    
       └                              ┘ 
        20           30             40  
                   Time (ms)            
       size = (200, 200, 200), rank = 300 
       ┌                              ┐ 
                            ┌┐╷         
mode 1                      ┤├┤         
                            └┘╵         
                   ┌─────────────┬╷     
mode 2             ┤             │┤     
                   └─────────────┴╵     
                            ┌╷          
mode 3                      ┤┤          
                            └╵          
       └                              ┘ 
        20           30             40  
                   Time (ms)            
       size = (1000, 100, 30), rank = 10 
       ┌                              ┐ 
             ┬┐         ╷               
mode 1       │├─────────┤               
             ┴┘         ╵               
            ╷┐  ╷                       
mode 2      ├├──┤                       
            ╵┘  ╵                       
                             ┬─┐ ╷      
mode 3                       │ ├─┤      
                             ┴─┘ ╵      
       └                              ┘ 
        0             2              4  
                   Time (ms)            
       size = (1000, 100, 30), rank = 100 
       ┌                              ┐ 
           ┐ ╷                          
mode 1     ├─┤                          
           ┘ ╵                          
           ┬┐                   ╷       
mode 2     │├───────────────────┤       
           ┴┘                   ╵       
                                  ┬╷    
mode 3                            │┤    
                                  ┴╵    
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (1000, 100, 30), rank = 200 
       ┌                              ┐ 
           ┐╷                           
mode 1     ├┤                           
           ┘╵                           
          ┐╷                            
mode 2    ├┤                            
          ┘╵                            
                              ╷┐╷       
mode 3                        ├├┤       
                              ╵┘╵       
       └                              ┘ 
        0            20             40  
                   Time (ms)            
       size = (1000, 100, 30), rank = 300 
       ┌                              ┐ 
           ┬╷                           
mode 1     │┤                           
           ┴╵                           
           ╷                            
mode 2     ┤                            
           ╵                            
                                  ╷╷    
mode 3                            ├┤    
                                  ╵╵    
       └                              ┘ 
        0            25             50  
                   Time (ms)            

@dahong67
Copy link
Owner Author

dahong67 commented Mar 4, 2024

After handling the special case of a Khatri-Rao product with only one matrix, we recover the earlier performance.

Benchmark Report for GCPDecompositions

Job Properties

  • Time of benchmarks:
    • Target: 3 Mar 2024 - 21:23
    • Baseline: 3 Mar 2024 - 21:23
  • Package commits:
    • Target: 140154
    • Baseline: 38648a
  • Julia commits:
    • Target: bed2cd
    • Baseline: bed2cd
  • Julia command flags:
    • Target: None
    • Baseline: None
  • Environment variables:
    • Target: GCP_BENCHMARK_SUITES => mttkrp
    • Baseline: GCP_BENCHMARK_SUITES => mttkrp

Results

A ratio greater than 1.0 denotes a possible regression (marked with ❌), while a ratio less
than 1.0 denotes a possible improvement (marked with ✅). Only significant results - results
that indicate possible regressions or improvements - are shown below (thus, an empty table means that all
benchmark results remained invariant between builds).

ID time ratio memory ratio
["mttkrp", "size=(100, 100, 100), rank=150, mode=2"] 1.08 (5%) ❌ 1.00 (1%)
["mttkrp", "size=(100, 100, 100), rank=250, mode=3"] 1.07 (5%) ❌ 1.00 (1%)
["mttkrp", "size=(1000, 100, 30), rank=10, mode=3"] 0.93 (5%) ✅ 1.00 (1%)
["mttkrp", "size=(1000, 100, 30), rank=100, mode=3"] 0.93 (5%) ✅ 1.00 (1%)
["mttkrp", "size=(150, 150, 150), rank=10, mode=1"] 0.94 (5%) ✅ 1.00 (1%)
["mttkrp", "size=(200, 200, 200), rank=50, mode=1"] 0.95 (5%) ✅ 1.00 (1%)
["mttkrp", "size=(200, 200, 200), rank=50, mode=2"] 0.43 (5%) ✅ 1.00 (1%)
["mttkrp", "size=(30, 100, 1000), rank=100, mode=1"] 0.94 (5%) ✅ 1.00 (1%)
["mttkrp", "size=(50, 50, 50), rank=10, mode=2"] 1.13 (5%) ❌ 1.00 (1%)
["mttkrp", "size=(50, 50, 50), rank=100, mode=3"] 0.95 (5%) ✅ 1.00 (1%)
["mttkrp", "size=(50, 50, 50), rank=50, mode=2"] 1.06 (5%) ❌ 1.00 (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    1499358 s          0 s     574884 s   20313069 s          0 s
  Memory: 64.0 GB (35929.046875 MB free)
  Uptime: 489776.0 sec
  Load Avg:  6.3447265625  4.35791015625  3.13671875
  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    1500949 s          0 s     575574 s   20314036 s          0 s
  Memory: 64.0 GB (36006.421875 MB free)
  Uptime: 489809.0 sec
  Load Avg:  6.70654296875  4.61376953125  3.27001953125
  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
             ndims = 3, rank = 10, mode = 1  
            ┌──────────────────────────────┐ 
          4 │                              │ 
            │                             :│ 
            │                           .' │ 
            │                         .'   │ 
Time (ms)   │                        :     │ 
            │                      .'      │ 
            │                   ..'        │ 
            │                 .'           │ 
            │            ....'             │ 
          0 │       ..'''                  │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
             ndims = 3, rank = 10, mode = 2  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                            .'│ 
            │                          .'  │ 
            │                        .'    │ 
Time (ms)   │                      .'      │ 
            │                    .'        │ 
            │                  .'          │ 
            │                .'            │ 
            │             ..:              │ 
          0 │       .'''''                 │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
             ndims = 3, rank = 10, mode = 3  
            ┌──────────────────────────────┐ 
          3 │                             .│ 
            │                            : │ 
            │                          .'  │ 
            │                        .'    │ 
Time (ms)   │                       .'     │ 
            │                     .'       │ 
            │                  ..'         │ 
            │                .'            │ 
            │           ...''              │ 
          0 │       .'''                   │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
             ndims = 3, rank = 50, mode = 1  
            ┌──────────────────────────────┐ 
          9 │                            .'│ 
            │                           .' │ 
            │                         .'   │ 
            │                        :     │ 
Time (ms)   │                      .'      │ 
            │                     .'       │ 
            │                  .''         │ 
            │                .'            │ 
            │           ..'''              │ 
          0 │       .'''                   │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
              ndims = 3, rank = 50, mode = 2  
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                             .│ 
             │                            .'│ 
             │                           .' │ 
Time (ms)    │                          .'  │ 
             │                         :    │ 
             │                        :     │ 
             │                       :      │ 
             │                   ...:       │ 
           0 │       .........'''           │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
             ndims = 3, rank = 50, mode = 3  
            ┌──────────────────────────────┐ 
          9 │                             .│ 
            │                            : │ 
            │                          .'  │ 
            │                        .'    │ 
Time (ms)   │                       .'     │ 
            │                     .'       │ 
            │                  ..'         │ 
            │                .'            │ 
            │           ...''              │ 
          0 │       .'''                   │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
              ndims = 3, rank = 100, mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                             .│ 
Time (ms)    │                          ..' │ 
             │                        .'    │ 
             │                      .'      │ 
             │                  ..''        │ 
             │             ....'            │ 
           0 │       ..''''                 │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 100, mode = 2 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                              │ 
             │                             :│ 
Time (ms)    │                           .' │ 
             │                          :   │ 
             │                        .'    │ 
             │                       :      │ 
             │                   ...'       │ 
           0 │       .........'''           │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 100, mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                             .│ 
Time (ms)    │                          ..' │ 
             │                        .'    │ 
             │                      .'      │ 
             │                  ..''        │ 
             │             ....'            │ 
           0 │       ..''''                 │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .:       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                             .│ 
             │              .'.          .' │ 
Time (ms)    │             .'  '..     .'   │ 
             │            :       '. .'     │ 
             │           :          '       │ 
             │         .'                   │ 
             │        .'                    │ 
           0 │       .'                     │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .:       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 1 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    ..'       │ 
             │                 ..'          │ 
             │            ....'             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                             .│ 
             │                            .'│ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                  .''         │ 
             │               ..'            │ 
             │          ...''               │ 
           0 │       .''                    │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 3 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    ..'       │ 
             │                 ..'          │ 
             │            ...''             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 1 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 2 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                              │ 
             │                           .''│ 
             │                        ..'   │ 
Time (ms)    │                      .'      │ 
             │                    .'        │ 
             │                  .'          │ 
             │                .'            │ 
             │             ..:              │ 
           0 │       ..''''                 │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 3 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                  ..'         │ 
             │                .'            │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 1 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             .│ 
             │                           .' │ 
             │                          .'  │ 
Time (ms)    │                        .'    │ 
             │                      .'      │ 
             │                   ..'        │ 
             │                ..'           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 2 
             ┌──────────────────────────────┐ 
          30 │                             .│ 
             │                           .' │ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                  .''         │ 
             │               ..'            │ 
             │          ..'''               │ 
           0 │       .''                    │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 3 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             .│ 
             │                           .' │ 
             │                         .'   │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
Baseline
             ndims = 3, rank = 10, mode = 1  
            ┌──────────────────────────────┐ 
          4 │                             :│ 
            │                           .' │ 
            │                          :   │ 
            │                        .'    │ 
Time (ms)   │                       :      │ 
            │                     .:       │ 
            │                   .'         │ 
            │                 .'           │ 
            │            ....'             │ 
          0 │       ..'''                  │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
             ndims = 3, rank = 10, mode = 2  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                            .'│ 
            │                          .'  │ 
            │                       ..'    │ 
Time (ms)   │                     .'       │ 
            │                    .'        │ 
            │                  .'          │ 
            │                .'            │ 
            │             ..:              │ 
          0 │       ..''''                 │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
             ndims = 3, rank = 10, mode = 3  
            ┌──────────────────────────────┐ 
          3 │                             .│ 
            │                            : │ 
            │                          .'  │ 
            │                        .'    │ 
Time (ms)   │                       .'     │ 
            │                     .'       │ 
            │                  ..'         │ 
            │                .'            │ 
            │           ..'''              │ 
          0 │       .'''                   │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
              ndims = 3, rank = 50, mode = 1  
             ┌──────────────────────────────┐ 
          10 │                             .│ 
             │                           .' │ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                      :       │ 
             │                   .''        │ 
             │                ..'           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 50, mode = 2  
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                             .│ 
             │                         ..'' │ 
             │                      .''     │ 
Time (ms)    │                     :        │ 
             │                   .'         │ 
             │                  .'          │ 
             │                 .'           │ 
             │                :             │ 
           0 │       ........:              │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
             ndims = 3, rank = 50, mode = 3  
            ┌──────────────────────────────┐ 
          9 │                             .│ 
            │                           .' │ 
            │                          .'  │ 
            │                        .'    │ 
Time (ms)   │                       .'     │ 
            │                     .'       │ 
            │                  ..'         │ 
            │                .'            │ 
            │           ..'''              │ 
          0 │       .'''                   │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
              ndims = 3, rank = 100, mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                            .'│ 
Time (ms)    │                          .'  │ 
             │                        .'    │ 
             │                      .'      │ 
             │                  ..''        │ 
             │             ...''            │ 
           0 │       ..''''                 │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 100, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                              │ 
Time (ms)    │                             .│ 
             │                          ..' │ 
             │                        .'    │ 
             │                     .:'      │ 
             │                 ..''         │ 
           0 │       ......''''             │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 100, mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                             .│ 
Time (ms)    │                          .'' │ 
             │                        .'    │ 
             │                      .'      │ 
             │                  ..''        │ 
             │             ...''            │ 
           0 │       ..''''                 │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .:       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 2 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             :│ 
             │                           .' │ 
Time (ms)    │                          .'  │ 
             │              ...        :    │ 
             │            .'   ''..  .'     │ 
             │           .'        ':'      │ 
             │         .'                   │ 
           0 │       .'                     │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .:       │ 
             │                   .'         │ 
             │                ..'           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 1 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    ..'       │ 
             │                 .''          │ 
             │            ...''             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                  .''         │ 
             │               ..'            │ 
             │          ..'''               │ 
           0 │       .''                    │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 3 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    ..'       │ 
             │                 ..'          │ 
             │            ....'             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 1 
             ┌──────────────────────────────┐ 
          30 │                             .│ 
             │                            : │ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                  ..'         │ 
             │                .'            │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 2 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                      .....'''│ 
             │                     .'       │ 
Time (ms)    │                   .'         │ 
             │                  .'          │ 
             │                 :            │ 
             │               .'             │ 
             │           ...''              │ 
           0 │       ..''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 3 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 1 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             :│ 
             │                           .' │ 
             │                         .'   │ 
Time (ms)    │                        :     │ 
             │                      .'      │ 
             │                   .''        │ 
             │                ..'           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 2 
             ┌──────────────────────────────┐ 
          30 │                             .│ 
             │                            : │ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │               .....   .'     │ 
             │             .'     '''       │ 
             │            :                 │ 
             │          .'                  │ 
             │         :                    │ 
           0 │       .'                     │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 3 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             .│ 
             │                            : │ 
             │                          .'  │ 
Time (ms)    │                        .'    │ 
             │                      .'      │ 
             │                   .''        │ 
             │                ..'           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               

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
             size = (30, 100, 1000), mode = 1 
             ┌──────────────────────────────┐ 
          50 │                             .│ 
             │                           ..'│ 
             │                       ..''   │ 
             │                    ..'       │ 
Time (ms)    │                 .''          │ 
             │             ..''             │ 
             │          .''                 │ 
             │      ..''                    │ 
             │   .''                        │ 
           0 │ ''                           │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (30, 100, 1000), mode = 2 
            ┌──────────────────────────────┐ 
          7 │                            .'│ 
            │                         .''  │ 
            │                      ..'     │ 
            │                   ..'        │ 
Time (ms)   │               ..''           │ 
            │           ..''               │ 
            │       ..''                   │ 
            │    ..'                       │ 
            │ ..'                          │ 
          0 │                              │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (30, 100, 1000), mode = 3 
            ┌──────────────────────────────┐ 
          8 │                             .│ 
            │                           .''│ 
            │                        .''   │ 
            │                     .''      │ 
Time (ms)   │                 ..''         │ 
            │            ..'''             │ 
            │        ..''                  │ 
            │     ..'                      │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
              size = (50, 50, 50), mode = 1  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                              │ 
            │                              │ 
            │                         ...''│ 
Time (ms)   │                     ..''     │ 
            │                ...''         │ 
            │            ..''              │ 
            │       ..'''                  │ 
            │   .'''                       │ 
          0 │ ''                           │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
                size = (50, 50, 50), mode = 2  
              ┌──────────────────────────────┐ 
          1.1 │                             :│ 
              │                         ..'' │ 
              │                      ..'     │ 
              │                   .''        │ 
Time (ms)     │               ..''           │ 
              │            ..'               │ 
              │         .''                  │ 
              │     ..''                     │ 
              │  ..'                         │ 
            0 │ '                            │ 
              └──────────────────────────────┘ 
               0                          300  
                            Rank               
              size = (50, 50, 50), mode = 3  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                              │ 
            │                              │ 
            │                          ..''│ 
Time (ms)   │                      ..''    │ 
            │                 ..'''        │ 
            │            ..'''             │ 
            │       ...''                  │ 
            │   .'''                       │ 
          0 │ ''                           │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (100, 100, 100), mode = 1 
            ┌──────────────────────────────┐ 
          7 │                             .│ 
            │                           .' │ 
            │                       ..''   │ 
            │                   ..''       │ 
Time (ms)   │               ..''           │ 
            │            ..'               │ 
            │         ..'                  │ 
            │     .'''                     │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (100, 100, 100), mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │              .:              │ 
Time (ms)    │             .' :             │ 
             │            .'   :            │ 
             │            :     :          .│ 
             │           :       '.....'''' │ 
             │          :                   │ 
           0 │ ......''''                   │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (100, 100, 100), mode = 3 
            ┌──────────────────────────────┐ 
          7 │                             :│ 
            │                          .'' │ 
            │                      ..''    │ 
            │                   ..'        │ 
Time (ms)   │               ..''           │ 
            │            ..'               │ 
            │         ..'                  │ 
            │     ..''                     │ 
            │  ..'                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (150, 150, 150), mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .:│ 
             │                         ..'  │ 
             │                     ..''     │ 
Time (ms)    │                 ..''         │ 
             │             ..''             │ 
             │         ..''                 │ 
             │     .'''                     │ 
             │  .''                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (150, 150, 150), mode = 2 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                         .    │ 
             │                       .' '.  │ 
Time (ms)    │                      .'    '.│ 
             │                     :       '│ 
             │                   .:         │ 
             │            ...''''           │ 
             │     ....'''                  │ 
           0 │ .'''                         │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (150, 150, 150), mode = 3 
             ┌──────────────────────────────┐ 
          20 │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
             │                     ..''     │ 
Time (ms)    │                 ..''         │ 
             │             ..''             │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  ..'                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 1 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             :│ 
             │                          .'' │ 
             │                      ..''    │ 
Time (ms)    │                 ..'''        │ 
             │             ..''             │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  .''                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 2 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                         ..   │ 
             │                       .'  ''.│ 
             │                      :       │ 
Time (ms)    │          .         .'        │ 
             │     ...'' ''.   ..''         │ 
             │    :         '''             │ 
             │   :                          │ 
             │  :                           │ 
           0 │ :                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 3 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             :│ 
             │                          .'' │ 
             │                      ..''    │ 
Time (ms)    │                 ..'''        │ 
             │             ..''             │ 
             │         ...'                 │ 
             │     ..''                     │ 
             │  ..'                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (1000, 100, 30), mode = 1 
            ┌──────────────────────────────┐ 
          8 │                             .│ 
            │                           .''│ 
            │                        .''   │ 
            │                     .''      │ 
Time (ms)   │                ...''         │ 
            │           ...''              │ 
            │        ..'                   │ 
            │    ..''                      │ 
            │ ..'                          │ 
          0 │                              │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (1000, 100, 30), mode = 2 
            ┌──────────────────────────────┐ 
          7 │                            .'│ 
            │                         .''  │ 
            │                      ..'     │ 
            │                   ..'        │ 
Time (ms)   │               ..''           │ 
            │           ..''               │ 
            │       ..''                   │ 
            │    ..'                       │ 
            │ ..'                          │ 
          0 │                              │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (1000, 100, 30), mode = 3 
             ┌──────────────────────────────┐ 
          50 │                             .│ 
             │                          .'' │ 
             │                       .''    │ 
             │                   ..''       │ 
Time (ms)    │                ..'           │ 
             │             .''              │ 
             │         ..''                 │ 
             │      ..'                     │ 
             │   .''                        │ 
           0 │ ''                           │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
Baseline
             size = (30, 100, 1000), mode = 1 
             ┌──────────────────────────────┐ 
          50 │                             :│ 
             │                          .'' │ 
             │                       .''    │ 
             │                   ..''       │ 
Time (ms)    │                ..'           │ 
             │            ..''              │ 
             │         ..'                  │ 
             │      .''                     │ 
             │   .''                        │ 
           0 │ ''                           │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (30, 100, 1000), mode = 2 
            ┌──────────────────────────────┐ 
          8 │                              │ 
            │                            .'│ 
            │                         .''  │ 
            │                      .''     │ 
Time (ms)   │                  ..''        │ 
            │             ..'''            │ 
            │         ..''                 │ 
            │     ..''                     │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (30, 100, 1000), mode = 3 
            ┌──────────────────────────────┐ 
          8 │                             .│ 
            │                           .''│ 
            │                        .''   │ 
            │                     .''      │ 
Time (ms)   │                ...''         │ 
            │            ..''              │ 
            │        ..''                  │ 
            │     ..'                      │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
              size = (50, 50, 50), mode = 1  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                              │ 
            │                              │ 
            │                        .'''''│ 
Time (ms)   │                     .''      │ 
            │                 ..''         │ 
            │            ...''             │ 
            │      ...'''                  │ 
            │   .''                        │ 
          0 │ ''                           │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
                size = (50, 50, 50), mode = 2  
              ┌──────────────────────────────┐ 
          1.1 │                             :│ 
              │                          ..' │ 
              │                       ..'    │ 
              │                    .''       │ 
Time (ms)     │                ..''          │ 
              │             ..'              │ 
              │         ..''                 │ 
              │      .''                     │ 
              │   .''                        │ 
            0 │ ''                           │ 
              └──────────────────────────────┘ 
               0                          300  
                            Rank               
              size = (50, 50, 50), mode = 3  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                              │ 
            │                             .│ 
            │                          ..''│ 
Time (ms)   │                      ..''    │ 
            │                 ..'''        │ 
            │            ..'''             │ 
            │       ..'''                  │ 
            │   ..''                       │ 
          0 │ ''                           │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (100, 100, 100), mode = 1 
            ┌──────────────────────────────┐ 
          7 │                             .│ 
            │                          ..' │ 
            │                      ..''    │ 
            │                   .''        │ 
Time (ms)   │               ..''           │ 
            │            .''               │ 
            │        ..''                  │ 
            │     .''                      │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (100, 100, 100), mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                             :│ 
             │              ..            : │ 
Time (ms)    │             .''.          :  │ 
             │            .'  '.        :   │ 
             │            :    '.      :    │ 
             │           :      '.....''    │ 
             │          :                   │ 
           0 │ .......'''                   │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (100, 100, 100), mode = 3 
            ┌──────────────────────────────┐ 
          7 │                             :│ 
            │                           .' │ 
            │                        ..'   │ 
            │                   ..'''      │ 
Time (ms)   │                ..'           │ 
            │            ..''              │ 
            │         ..'                  │ 
            │     .'''                     │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (150, 150, 150), mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                         .''  │ 
             │                     ..''     │ 
Time (ms)    │                 ..''         │ 
             │             ..''             │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  .''                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (150, 150, 150), mode = 2 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                         .    │ 
             │                       .' '.  │ 
Time (ms)    │                      .'    '.│ 
             │     .               :       '│ 
             │    :'.            .:         │ 
             │   :   '.   ....'''           │ 
             │  :      '''                  │ 
           0 │ :                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (150, 150, 150), mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                         .''  │ 
             │                     ..''     │ 
Time (ms)    │                 ..''         │ 
             │             ..''             │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  ..'                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 1 
             ┌──────────────────────────────┐ 
          40 │                             .│ 
             │                            .'│ 
             │                         .''  │ 
             │                      .''     │ 
Time (ms)    │                  ..''        │ 
             │             ...''            │ 
             │         ..''                 │ 
             │     .'''                     │ 
             │  .''                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 2 
             ┌──────────────────────────────┐ 
          30 │                             .│ 
             │              ..          ..' │ 
             │             .' '.     ..'    │ 
             │            .'    ''..'       │ 
Time (ms)    │    .'.    .'                 │ 
             │   .'  '. .'                  │ 
             │   :     ''                   │ 
             │  :                           │ 
             │ :                            │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 3 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             :│ 
             │                          .'' │ 
             │                      ..''    │ 
Time (ms)    │                  ..''        │ 
             │             ...''            │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  ..'                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (1000, 100, 30), mode = 1 
            ┌──────────────────────────────┐ 
          8 │                             .│ 
            │                           .''│ 
            │                        .''   │ 
            │                     .''      │ 
Time (ms)   │                ..'''         │ 
            │            ..''              │ 
            │        ..''                  │ 
            │    ..''                      │ 
            │ ..'                          │ 
          0 │                              │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (1000, 100, 30), mode = 2 
            ┌──────────────────────────────┐ 
          8 │                              │ 
            │                            .:│ 
            │                         .''  │ 
            │                      .''     │ 
Time (ms)   │                  ..''        │ 
            │             ..'''            │ 
            │         .'''                 │ 
            │     ..''                     │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (1000, 100, 30), mode = 3 
             ┌──────────────────────────────┐ 
          50 │                            .:│ 
             │                         ..'  │ 
             │                      ..'     │ 
             │                   ..'        │ 
Time (ms)    │                .''           │ 
             │            ..''              │ 
             │         ..'                  │ 
             │      .''                     │ 
             │   .''                        │ 
           0 │ ''                           │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               

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
       size = (30, 100, 1000), rank = 10 
       ┌                              ┐ 
                       ┬┐        ╷      
mode 1                 │├────────┤      
                       ┴┘        ╵      
           ┐     ╷                      
mode 2     ├─────┤                      
           ┘     ╵                      
           ┐ ╷                          
mode 3     ├─┤                          
           ┘ ╵                          
       └                              ┘ 
        0             3              6  
                   Time (ms)            
       size = (30, 100, 1000), rank = 100 
       ┌                              ┐ 
            ┐                       ╷   
mode 1      ├───────────────────────┤   
            ┘                       ╵   
        ╷                               
mode 2  ┤                               
        ╵                               
        ╷                               
mode 3  ┤                               
        ╵                               
       └                              ┘ 
        0            45             90  
                   Time (ms)            
       size = (30, 100, 1000), rank = 200 
       ┌                              ┐ 
                              ╷         
mode 1                        ┤         
                              ╵         
          ┐╷                            
mode 2    ├┤                            
          ┘╵                            
           ╷                            
mode 3     ┤                            
           ╵                            
       └                              ┘ 
        0            20             40  
                   Time (ms)            
       size = (30, 100, 1000), rank = 300 
       ┌                              ┐ 
                                  ╷     
mode 1                            ┤     
                                  ╵     
           ┐╷                           
mode 2     ├┤                           
           ┘╵                           
           ┐╷                           
mode 3     ├┤                           
           ┘╵                           
       └                              ┘ 
        0            25             50  
                   Time (ms)            
        size = (50, 50, 50), rank = 10  
       ┌                              ┐ 
                    ╷┐          ╷       
mode 1              ├├──────────┤       
                    ╵┘          ╵       
              ╷┐            ╷           
mode 2        ├├────────────┤           
              ╵┘            ╵           
                    ┌┬┐  ╷              
mode 3              ┤│├──┤              
                    └┴┘  ╵              
       └                              ┘ 
        0           0.15           0.3  
                   Time (ms)            
        size = (50, 50, 50), rank = 50  
       ┌                              ┐ 
                      ╷┐    ╷           
mode 1                ├├────┤           
                      ╵┘    ╵           
         ┌┐     ╷                       
mode 2   ┤├─────┤                       
         └┘     ╵                       
                       ┌┐      ╷        
mode 3                 ┤├──────┤        
                       └┘      ╵        
       └                              ┘ 
        0.2         0.35           0.5  
                   Time (ms)            
        size = (50, 50, 50), rank = 100 
       ┌                              ┐ 
                               ╷┌┐   ╷  
mode 1                         ├┤├───┤  
                               ╵└┘   ╵  
              ╷┌┬┐     ╷                
mode 2        ├┤│├─────┤                
              ╵└┴┘     ╵                
                             ┌┐     ╷   
mode 3                       ┤├─────┤   
                             └┘     ╵   
       └                              ┘ 
        0.3         0.45           0.6  
                   Time (ms)            
        size = (50, 50, 50), rank = 150 
       ┌                              ┐ 
                          ┐      ╷      
mode 1                    ├──────┤      
                          ┘      ╵      
          ┌┬┐   ╷                       
mode 2    ┤│├───┤                       
          └┴┘   ╵                       
                         ╷┬───┐    ╷    
mode 3                   ├│   ├────┤    
                         ╵┴───┘    ╵    
       └                              ┘ 
        0.5          0.7           0.9  
                   Time (ms)            
        size = (50, 50, 50), rank = 200 
       ┌                              ┐ 
                         ╷ ┬┐   ╷       
mode 1                   ├─│├───┤       
                         ╵ ┴┘   ╵       
        ┐   ╷                           
mode 2  ├───┤                           
        ┘   ╵                           
                         ┌┐   ╷         
mode 3                   ┤├───┤         
                         └┘   ╵         
       └                              ┘ 
        0.7          0.9           1.1  
                   Time (ms)            
        size = (50, 50, 50), rank = 250 
       ┌                              ┐ 
                          ╷ ┌┐  ╷       
mode 1                    ├─┤├──┤       
                          ╵ └┘  ╵       
           ┬┐   ╷                       
mode 2     │├───┤                       
           ┴┘   ╵                       
                         ┌┬─┐   ╷       
mode 3                   ┤│ ├───┤       
                         └┴─┘   ╵       
       └                              ┘ 
        0.8          1.1           1.4  
                   Time (ms)            
        size = (50, 50, 50), rank = 300 
       ┌                              ┐ 
                         ╷┬┐      ╷     
mode 1                   ├│├──────┤     
                         ╵┴┘      ╵     
         ┬┐ ╷                           
mode 2   │├─┤                           
         ┴┘ ╵                           
                          ┌┐    ╷       
mode 3                    ┤├────┤       
                          └┘    ╵       
       └                              ┘ 
        1            1.3           1.6  
                   Time (ms)            
       size = (100, 100, 100), rank = 10 
       ┌                              ┐ 
                      ┐            ╷    
mode 1                ├────────────┤    
                      ┘            ╵    
         ┌┐     ╷                       
mode 2   ┤├─────┤                       
         └┘     ╵                       
                    ╷┐   ╷              
mode 3              ├├───┤              
                    ╵┘   ╵              
       └                              ┘ 
        0.2         0.55           0.9  
                   Time (ms)            
       size = (100, 100, 100), rank = 50 
       ┌                              ┐ 
               ┐╷                       
mode 1         ├┤                       
               ┘╵                       
           ┐╷                           
mode 2     ├┤                           
           ┘╵                           
               ┐                    ╷   
mode 3         ├────────────────────┤   
               ┘                    ╵   
       └                              ┘ 
        0             3              6  
                   Time (ms)            
       size = (100, 100, 100), rank = 100 
       ┌                              ┐ 
                            ┐  ╷        
mode 1                      ├──┤        
                            ┘  ╵        
           ┐ ╷                          
mode 2     ├─┤                          
           ┘ ╵                          
                            ┐  ╷        
mode 3                      ├──┤        
                            ┘  ╵        
       └                              ┘ 
        1             2              3  
                   Time (ms)            
       size = (100, 100, 100), rank = 150 
       ┌                              ┐ 
         ╷                              
mode 1   ┤                              
         ╵                              
        ╷                         ╷     
mode 2  ├─────────────────────────┤     
        ╵                         ╵     
        ┌┐                      ╷       
mode 3  ┤├──────────────────────┤       
        └┘                      ╵       
       └                              ┘ 
        3            8.5            14  
                   Time (ms)            
       size = (100, 100, 100), rank = 200 
       ┌                              ┐ 
             ┌╷                         
mode 1       ┤┤                         
             └╵                         
             ┬──────────────╷           
mode 2       │              ┤           
             ┴──────────────╵           
              ╷                         
mode 3        ┤                         
              ╵                         
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (100, 100, 100), rank = 250 
       ┌                              ┐ 
        ╷                               
mode 1  ┤                               
        ╵                               
        ┬─────────────────────────╷     
mode 2  │                         ┤     
        ┴─────────────────────────╵     
        ┌╷                              
mode 3  ┤┤                              
        └╵                              
       └                              ┘ 
        5           10.5            16  
                   Time (ms)            
       size = (100, 100, 100), rank = 300 
       ┌                              ┐ 
                 ╷                      
mode 1           ┤                      
                 ╵                      
                ┬──────────────╷        
mode 2          │              ┤        
                ┴──────────────╵        
                 ╷                      
mode 3           ┤                      
                 ╵                      
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (150, 150, 150), rank = 10 
       ┌                              ┐ 
        ╷                               
mode 1  ┤                               
        ╵                               
        ┬┐                   ╷          
mode 2  │├───────────────────┤          
        ┴┘                   ╵          
        ╷                               
mode 3  ┤                               
        ╵                               
       └                              ┘ 
        0            100           200  
                   Time (ms)            
       size = (150, 150, 150), rank = 50 
       ┌                              ┐ 
                                ┌┐╷     
mode 1                          ┤├┤     
                                └┘╵     
                 ╷┐ ╷                   
mode 2           ├├─┤                   
                 ╵┘ ╵                   
                               ╷┐ ╷     
mode 3                         ├├─┤     
                               ╵┘ ╵     
       └                              ┘ 
        2            3.5             5  
                   Time (ms)            
       size = (150, 150, 150), rank = 100 
       ┌                              ┐ 
            ┐╷                          
mode 1      ├┤                          
            ┘╵                          
        ┬────────────────────────────╷  
mode 2  │                            ┤  
        ┴────────────────────────────╵  
            ┐╷                          
mode 3      ├┤                          
            ┘╵                          
       └                              ┘ 
        5            10             15  
                   Time (ms)            
       size = (150, 150, 150), rank = 150 
       ┌                              ┐ 
                     ┬╷                 
mode 1               │┤                 
                     ┴╵                 
                  ┬───┐          ╷      
mode 2            │   ├──────────┤      
                  ┴───┘          ╵      
                     ╷                  
mode 3               ┤                  
                     ╵                  
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (150, 150, 150), rank = 200 
       ┌                              ┐ 
              ┬╷                        
mode 1        │┤                        
              ┴╵                        
         ┐                          ╷   
mode 2   ├──────────────────────────┤   
         ┘                          ╵   
              ┬╷                        
mode 3        │┤                        
              ┴╵                        
       └                              ┘ 
        9           14.5            20  
                   Time (ms)            
       size = (150, 150, 150), rank = 250 
       ┌                              ┐ 
                ╷                       
mode 1          ┤                       
                ╵                       
         ┌─────────────────────────┐╷   
mode 2   ┤                         ├┤   
         └─────────────────────────┘╵   
                ┬─────┐        ╷        
mode 3          │     ├────────┤        
                ┴─────┘        ╵        
       └                              ┘ 
        11          16.5            22  
                   Time (ms)            
       size = (150, 150, 150), rank = 300 
       ┌                              ┐ 
           ╷╷                           
mode 1     ├┤                           
           ╵╵                           
         ╷┬─────┐  ╷                    
mode 2   ├│     ├──┤                    
         ╵┴─────┘  ╵                    
            ┌┬──┐                   ╷   
mode 3      ┤│  ├───────────────────┤   
            └┴──┘                   ╵   
       └                              ┘ 
        10           35             60  
                   Time (ms)            
       size = (200, 200, 200), rank = 10 
       ┌                              ┐ 
                                ╷┬┐ ╷   
mode 1                          ├│├─┤   
                                ╵┴┘ ╵   
               ┐╷                       
mode 2         ├┤                       
               ┘╵                       
                          ┐ ╷           
mode 3                    ├─┤           
                          ┘ ╵           
       └                              ┘ 
        1            2.5             4  
                   Time (ms)            
       size = (200, 200, 200), rank = 50 
       ┌                              ┐ 
                ╷                       
mode 1          ┤                       
                ╵                       
              ┌────────┐         ╷      
mode 2        ┤        ├─────────┤      
              └────────┘         ╵      
                ╷                       
mode 3          ┤                       
                ╵                       
       └                              ┘ 
        0            15             30  
                   Time (ms)            
       size = (200, 200, 200), rank = 100 
       ┌                              ┐ 
           ┌╷                           
mode 1     ┤┤                           
           └╵                           
        ╷             ┌╷                
mode 2  ├─────────────┤┤                
        ╵             └╵                
           ┐╷                           
mode 3     ├┤                           
           ┘╵                           
       └                              ┘ 
        10           20             30  
                   Time (ms)            
       size = (200, 200, 200), rank = 150 
       ┌                              ┐ 
                  ╷┐╷                   
mode 1            ├├┤                   
                  ╵┘╵                   
         ┬──────────────────────────╷   
mode 2   │                          ┤   
         ┴──────────────────────────╵   
                  ┐╷                    
mode 3            ├┤                    
                  ┘╵                    
       └                              ┘ 
        14          19.5            25  
                   Time (ms)            
       size = (200, 200, 200), rank = 200 
       ┌                              ┐ 
                          ┌┐╷           
mode 1                    ┤├┤           
                          └┘╵           
                    ┐              ╷    
mode 2              ├──────────────┤    
                    ┘              ╵    
                         ┌─┐  ╷         
mode 3                   ┤ ├──┤         
                         └─┘  ╵         
       └                              ┘ 
        10           20             30  
                   Time (ms)            
       size = (200, 200, 200), rank = 250 
       ┌                              ┐ 
                   ┬─┐╷                 
mode 1             │ ├┤                 
                   ┴─┘╵                 
        ╷                       ┌┬┐╷    
mode 2  ├───────────────────────┤│├┤    
        ╵                       └┴┘╵    
                   ┬┐ ╷                 
mode 3             │├─┤                 
                   ┴┘ ╵                 
       └                              ┘ 
        23          28.5            34  
                   Time (ms)            
       size = (200, 200, 200), rank = 300 
       ┌                              ┐ 
                            ┬┐ ╷        
mode 1                      │├─┤        
                            ┴┘ ╵        
                     ┬─────────────┐╷   
mode 2               │             ├┤   
                     ┴─────────────┘╵   
                             ┬┐ ╷       
mode 3                       │├─┤       
                             ┴┘ ╵       
       └                              ┘ 
        20           30             40  
                   Time (ms)            
       size = (1000, 100, 30), rank = 10 
       ┌                              ┐ 
              ┐           ╷             
mode 1        ├───────────┤             
              ┘           ╵             
             ┐  ╷                       
mode 2       ├──┤                       
             ┘  ╵                       
                            ╷┌┐   ╷     
mode 3                      ├┤├───┤     
                            ╵└┘   ╵     
       └                              ┘ 
        0             2              4  
                   Time (ms)            
       size = (1000, 100, 30), rank = 100 
       ┌                              ┐ 
          ┐╷                            
mode 1    ├┤                            
          ┘╵                            
          ┐                      ╷      
mode 2    ├──────────────────────┤      
          ┘                      ╵      
                       ╷╷               
mode 3                 ├┤               
                       ╵╵               
       └                              ┘ 
        0            15             30  
                   Time (ms)            
       size = (1000, 100, 30), rank = 200 
       ┌                              ┐ 
           ┐╷                           
mode 1     ├┤                           
           ┘╵                           
          ┐╷                            
mode 2    ├┤                            
          ┘╵                            
                              ┌╷        
mode 3                        ┤┤        
                              └╵        
       └                              ┘ 
        0            20             40  
                   Time (ms)            
       size = (1000, 100, 30), rank = 300 
       ┌                              ┐ 
           ╷                            
mode 1     ┤                            
           ╵                            
          ┐╷                            
mode 2    ├┤                            
          ┘╵                            
                              ┌┐ ╷      
mode 3                        ┤├─┤      
                              └┘ ╵      
       └                              ┘ 
        0            30             60  
                   Time (ms)            
Baseline
       size = (30, 100, 1000), rank = 10 
       ┌                              ┐ 
                          ┐       ╷     
mode 1                    ├───────┤     
                          ┘       ╵     
           ╷┐     ╷                     
mode 2     ├├─────┤                     
           ╵┘     ╵                     
           ┐  ╷                         
mode 3     ├──┤                         
           ┘  ╵                         
       └                              ┘ 
        0            2.5             5  
                   Time (ms)            
       size = (30, 100, 1000), rank = 100 
       ┌                              ┐ 
            ┐                     ╷     
mode 1      ├─────────────────────┤     
            ┘                     ╵     
        ╷                               
mode 2  ┤                               
        ╵                               
        ╷                               
mode 3  ┤                               
        ╵                               
       └                              ┘ 
        0            50            100  
                   Time (ms)            
       size = (30, 100, 1000), rank = 200 
       ┌                              ┐ 
                               ┐╷       
mode 1                         ├┤       
                               ┘╵       
          ┐╷                            
mode 2    ├┤                            
          ┘╵                            
           ╷                            
mode 3     ┤                            
           ╵                            
       └                              ┘ 
        0            20             40  
                   Time (ms)            
       size = (30, 100, 1000), rank = 300 
       ┌                              ┐ 
                                   ┌╷   
mode 1                             ┤┤   
                                   └╵   
           ┐╷                           
mode 2     ├┤                           
           ┘╵                           
           ┐╷                           
mode 3     ├┤                           
           ┘╵                           
       └                              ┘ 
        0            25             50  
                   Time (ms)            
        size = (50, 50, 50), rank = 10  
       ┌                              ┐ 
                           ┐     ╷      
mode 1                     ├─────┤      
                           ┘     ╵      
                 ┌┐              ╷      
mode 2           ┤├──────────────┤      
                 └┘              ╵      
                           ┐      ╷     
mode 3                     ├──────┤     
                           ┘      ╵     
       └                              ┘ 
        0            0.1           0.2  
                   Time (ms)            
        size = (50, 50, 50), rank = 50  
       ┌                              ┐ 
                       ╷┐    ╷          
mode 1                 ├├────┤          
                       ╵┘    ╵          
        ┌┐     ╷                        
mode 2  ┤├─────┤                        
        └┘     ╵                        
                     ╷┐       ╷         
mode 3               ├├───────┤         
                     ╵┘       ╵         
       └                              ┘ 
        0.2         0.35           0.5  
                   Time (ms)            
        size = (50, 50, 50), rank = 100 
       ┌                              ┐ 
                                ┬┐  ╷   
mode 1                          │├──┤   
                                ┴┘  ╵   
             ┌┐    ╷                    
mode 2       ┤├────┤                    
             └┘    ╵                    
                               ╷┐   ╷   
mode 3                         ├├───┤   
                               ╵┘   ╵   
       └                              ┘ 
        0.3         0.45           0.6  
                   Time (ms)            
        size = (50, 50, 50), rank = 150 
       ┌                              ┐ 
                        ┬┐     ╷        
mode 1                  │├─────┤        
                        ┴┘     ╵        
         ┐      ╷                       
mode 2   ├──────┤                       
         ┘      ╵                       
                        ╷┬┐     ╷       
mode 3                  ├│├─────┤       
                        ╵┴┘     ╵       
       └                              ┘ 
        0.5          0.7           0.9  
                   Time (ms)            
        size = (50, 50, 50), rank = 200 
       ┌                              ┐ 
                           ┌─┐╷         
mode 1                     ┤ ├┤         
                           └─┘╵         
            ┐     ╷                     
mode 2      ├─────┤                     
            ┘     ╵                     
                            ┐     ╷     
mode 3                      ├─────┤     
                            ┘     ╵     
       └                              ┘ 
        0.6         0.85           1.1  
                   Time (ms)            
        size = (50, 50, 50), rank = 250 
       ┌                              ┐ 
                          ╷  ┌───┐ ╷    
mode 1                    ├──┤   ├─┤    
                          ╵  └───┘ ╵    
         ┌┬┐ ╷                          
mode 2   ┤│├─┤                          
         └┴┘ ╵                          
                         ╷┬┐   ╷        
mode 3                   ├│├───┤        
                         ╵┴┘   ╵        
       └                              ┘ 
        0.8          1.1           1.4  
                   Time (ms)            
        size = (50, 50, 50), rank = 300 
       ┌                              ┐ 
                            ╷ ┬──┐ ╷    
mode 1                      ├─│  ├─┤    
                            ╵ ┴──┘ ╵    
         ╷┐   ╷                         
mode 2   ├├───┤                         
         ╵┘   ╵                         
                              ┌┬┐  ╷    
mode 3                        ┤│├──┤    
                              └┴┘  ╵    
       └                              ┘ 
        1           1.25           1.5  
                   Time (ms)            
       size = (100, 100, 100), rank = 10 
       ┌                              ┐ 
                     ┌┐           ╷     
mode 1               ┤├───────────┤     
                     └┘           ╵     
         ┐      ╷                       
mode 2   ├──────┤                       
         ┘      ╵                       
                    ╷┐    ╷             
mode 3              ├├────┤             
                    ╵┘    ╵             
       └                              ┘ 
        0.2         0.55           0.9  
                   Time (ms)            
       size = (100, 100, 100), rank = 50 
       ┌                              ┐ 
                       ┐ ╷              
mode 1                 ├─┤              
                       ┘ ╵              
               ┐ ╷                      
mode 2         ├─┤                      
               ┘ ╵                      
                       ┬┐     ╷         
mode 3                 │├─────┤         
                       ┴┘     ╵         
       └                              ┘ 
        0            1.5             3  
                   Time (ms)            
       size = (100, 100, 100), rank = 100 
       ┌                              ┐ 
                             ┐  ╷       
mode 1                       ├──┤       
                             ┘  ╵       
           ┐ ╷                          
mode 2     ├─┤                          
           ┘ ╵                          
                            ┬┐╷         
mode 3                      │├┤         
                            ┴┘╵         
       └                              ┘ 
        1             2              3  
                   Time (ms)            
       size = (100, 100, 100), rank = 150 
       ┌                              ┐ 
          ╷                             
mode 1    ┤                             
          ╵                             
         ╷       ┐             ╷        
mode 2   ├───────├─────────────┤        
         ╵       ┘             ╵        
          ╷                             
mode 3    ┤                             
          ╵                             
       └                              ┘ 
        0            20             40  
                   Time (ms)            
       size = (100, 100, 100), rank = 200 
       ┌                              ┐ 
                            ╷┌─┬──┐╷    
mode 1                      ├┤ │  ├┤    
                            ╵└─┴──┘╵    
          ╷ ┌─┐╷                        
mode 2    ├─┤ ├┤                        
          ╵ └─┘╵                        
                        ┌┐     ╷        
mode 3                  ┤├─────┤        
                        └┘     ╵        
       └                              ┘ 
        4           4.35           4.7  
                   Time (ms)            
       size = (100, 100, 100), rank = 250 
       ┌                              ┐ 
        ┐╷                              
mode 1  ├┤                              
        ┘╵                              
        ┬───────────────────────────┐╷  
mode 2  │                           ├┤  
        ┴───────────────────────────┘╵  
        ╷                               
mode 3  ┤                               
        ╵                               
       └                              ┘ 
        5            10             15  
                   Time (ms)            
       size = (100, 100, 100), rank = 300 
       ┌                              ┐ 
                 ╷                      
mode 1           ┤                      
                 ╵                      
                ┌──────────────╷        
mode 2          ┤              ┤        
                └──────────────╵        
                 ┐╷                     
mode 3           ├┤                     
                 ┘╵                     
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (150, 150, 150), rank = 10 
       ┌                              ┐ 
        ╷                               
mode 1  ┤                               
        ╵                               
        ┐                    ╷          
mode 2  ├────────────────────┤          
        ┘                    ╵          
        ╷                               
mode 3  ┤                               
        ╵                               
       └                              ┘ 
        0            100           200  
                   Time (ms)            
       size = (150, 150, 150), rank = 50 
       ┌                              ┐ 
              ╷                         
mode 1        ┤                         
              ╵                         
            ┌─────────────┬╷            
mode 2      ┤             │┤            
            └─────────────┴╵            
              ╷                         
mode 3        ┤                         
              ╵                         
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (150, 150, 150), rank = 100 
       ┌                              ┐ 
            ┐╷                          
mode 1      ├┤                          
            ┘╵                          
        ┐                            ╷  
mode 2  ├────────────────────────────┤  
        ┘                            ╵  
            ┬╷                          
mode 3      │┤                          
            ┴╵                          
       └                              ┘ 
        5            10             15  
                   Time (ms)            
       size = (150, 150, 150), rank = 150 
       ┌                              ┐ 
             ┐╷                         
mode 1       ├┤                         
             ┘╵                         
        ┐                         ╷     
mode 2  ├─────────────────────────┤     
        ┘                         ╵     
             ┐   ╷                      
mode 3       ├───┤                      
             ┘   ╵                      
       └                              ┘ 
        7           12.5            18  
                   Time (ms)            
       size = (150, 150, 150), rank = 200 
       ┌                              ┐ 
                            ╷┬┐╷        
mode 1                      ├│├┤        
                            ╵┴┘╵        
         ╷ ┐ ╷                          
mode 2   ├─├─┤                          
         ╵ ┘ ╵                          
                          ┬─┐ ╷         
mode 3                    │ ├─┤         
                          ┴─┘ ╵         
       └                              ┘ 
        9            11             13  
                   Time (ms)            
       size = (150, 150, 150), rank = 250 
       ┌                              ┐ 
              ┐╷                        
mode 1        ├┤                        
              ┘╵                        
          ┌─────────────┐╷              
mode 2    ┤             ├┤              
          └─────────────┘╵              
             ┬╷                         
mode 3       │┤                         
             ┴╵                         
       └                              ┘ 
        10           20             30  
                   Time (ms)            
       size = (150, 150, 150), rank = 300 
       ┌                              ┐ 
                 ┌┐╷                    
mode 1           ┤├┤                    
                 └┘╵                    
        ┐                          ╷    
mode 2  ├──────────────────────────┤    
        ┘                          ╵    
                 ┌╷                     
mode 3           ┤┤                     
                 └╵                     
       └                              ┘ 
        14          19.5            25  
                   Time (ms)            
       size = (200, 200, 200), rank = 10 
       ┌                              ┐ 
                                 ╷┌─╷   
mode 1                           ├┤ ┤   
                                 ╵└─╵   
               ┐╷                       
mode 2         ├┤                       
               ┘╵                       
                          ┐╷            
mode 3                    ├┤            
                          ┘╵            
       └                              ┘ 
        1            2.5             4  
                   Time (ms)            
       size = (200, 200, 200), rank = 50 
       ┌                              ┐ 
           ┬╷                           
mode 1     │┤                           
           ┴╵                           
                                  ╷ ╷   
mode 2                            ├─┤   
                                  ╵ ╵   
          ╷                             
mode 3    ┤                             
          ╵                             
       └                              ┘ 
        8           12.5            17  
                   Time (ms)            
       size = (200, 200, 200), rank = 100 
       ┌                              ┐ 
                            ┌┐      ╷   
mode 1                      ┤├──────┤   
                            └┘      ╵   
          ╷┌┬╷                          
mode 2    ├┤│┤                          
          ╵└┴╵                          
                         ┌┐ ╷           
mode 3                   ┤├─┤           
                         └┘ ╵           
       └                              ┘ 
        10          12.5            15  
                   Time (ms)            
       size = (200, 200, 200), rank = 150 
       ┌                              ┐ 
               ╷                        
mode 1         ┤                        
               ╵                        
            ╷        ┬┐       ╷         
mode 2      ├────────│├───────┤         
            ╵        ┴┘       ╵         
               ╷                        
mode 3         ┤                        
               ╵                        
       └                              ┘ 
        10           25             40  
                   Time (ms)            
       size = (200, 200, 200), rank = 200 
       ┌                              ┐ 
                          ╷             
mode 1                    ┤             
                          ╵             
                   ╷┐              ╷    
mode 2             ├├──────────────┤    
                   ╵┘              ╵    
                          ┬─╷           
mode 3                    │ ┤           
                          ┴─╵           
       └                              ┘ 
        10           20             30  
                   Time (ms)            
       size = (200, 200, 200), rank = 250 
       ┌                              ┐ 
                   ╷┐╷                  
mode 1             ├├┤                  
                   ╵┘╵                  
           ╷┬─────────────┐╷            
mode 2     ├│             ├┤            
           ╵┴─────────────┘╵            
                  ┐╷                    
mode 3            ├┤                    
                  ┘╵                    
       └                              ┘ 
        20           30             40  
                   Time (ms)            
       size = (200, 200, 200), rank = 300 
       ┌                              ┐ 
                     ┌─┬─┐       ╷      
mode 1               ┤ │ ├───────┤      
                     └─┴─┘       ╵      
               ┐╷                       
mode 2         ├┤                       
               ┘╵                       
                     ┐╷                 
mode 3               ├┤                 
                     ┘╵                 
       └                              ┘ 
        20           35             50  
                   Time (ms)            
       size = (1000, 100, 30), rank = 10 
       ┌                              ┐ 
              ┬┐        ╷               
mode 1        │├────────┤               
              ┴┘        ╵               
             ┐  ╷                       
mode 2       ├──┤                       
             ┘  ╵                       
                              ┬─┐ ╷     
mode 3                        │ ├─┤     
                              ┴─┘ ╵     
       └                              ┘ 
        0             2              4  
                   Time (ms)            
       size = (1000, 100, 30), rank = 100 
       ┌                              ┐ 
           ┬┐╷                          
mode 1     │├┤                          
           ┴┘╵                          
           ┬──────────────┐     ╷       
mode 2     │              ├─────┤       
           ┴──────────────┘     ╵       
                                 ┐╷     
mode 3                           ├┤     
                                 ┘╵     
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (1000, 100, 30), rank = 200 
       ┌                              ┐ 
           ┐╷                           
mode 1     ├┤                           
           ┘╵                           
          ┐╷                            
mode 2    ├┤                            
          ┘╵                            
                               ╷        
mode 3                         ┤        
                               ╵        
       └                              ┘ 
        0            20             40  
                   Time (ms)            
       size = (1000, 100, 30), rank = 300 
       ┌                              ┐ 
           ╷                            
mode 1     ┤                            
           ╵                            
          ╷╷                            
mode 2    ├┤                            
          ╵╵                            
                               ┬┐╷      
mode 3                         │├┤      
                               ┴┘╵      
       └                              ┘ 
        0            30             60  
                   Time (ms)            

@dahong67
Copy link
Owner Author

dahong67 commented Mar 4, 2024

As desired, with new in-place methods, mttkrp has similar performance as before.

Benchmark Report for GCPDecompositions

Job Properties

  • Time of benchmarks:
    • Target: 3 Mar 2024 - 23:54
    • Baseline: 3 Mar 2024 - 23:54
  • Package commits:
    • Target: 85a8ed
    • Baseline: 38648a
  • Julia commits:
    • Target: bed2cd
    • Baseline: bed2cd
  • Julia command flags:
    • Target: None
    • Baseline: None
  • Environment variables:
    • Target: GCP_BENCHMARK_SUITES => mttkrp
    • Baseline: GCP_BENCHMARK_SUITES => mttkrp

Results

A ratio greater than 1.0 denotes a possible regression (marked with ❌), while a ratio less
than 1.0 denotes a possible improvement (marked with ✅). Only significant results - results
that indicate possible regressions or improvements - are shown below (thus, an empty table means that all
benchmark results remained invariant between builds).

ID time ratio memory ratio
["mttkrp", "size=(100, 100, 100), rank=200, mode=2"] 0.92 (5%) ✅ 0.99 (1%)
["mttkrp", "size=(100, 100, 100), rank=200, mode=3"] 1.07 (5%) ❌ 1.00 (1%)
["mttkrp", "size=(1000, 100, 30), rank=10, mode=1"] 1.17 (5%) ❌ 0.99 (1%)
["mttkrp", "size=(1000, 100, 30), rank=10, mode=2"] 0.94 (5%) ✅ 0.98 (1%) ✅
["mttkrp", "size=(1000, 100, 30), rank=100, mode=2"] 0.99 (5%) 0.98 (1%) ✅
["mttkrp", "size=(1000, 100, 30), rank=200, mode=2"] 0.97 (5%) 0.98 (1%) ✅
["mttkrp", "size=(1000, 100, 30), rank=300, mode=1"] 1.06 (5%) ❌ 1.00 (1%)
["mttkrp", "size=(1000, 100, 30), rank=300, mode=2"] 0.98 (5%) 0.98 (1%) ✅
["mttkrp", "size=(200, 200, 200), rank=10, mode=1"] 1.12 (5%) ❌ 1.00 (1%)
["mttkrp", "size=(200, 200, 200), rank=10, mode=3"] 0.95 (5%) ✅ 1.00 (1%)
["mttkrp", "size=(30, 100, 1000), rank=10, mode=2"] 1.02 (5%) 0.98 (1%) ✅
["mttkrp", "size=(30, 100, 1000), rank=100, mode=1"] 1.07 (5%) ❌ 1.00 (1%)
["mttkrp", "size=(30, 100, 1000), rank=100, mode=2"] 0.97 (5%) 0.98 (1%) ✅
["mttkrp", "size=(30, 100, 1000), rank=200, mode=2"] 0.97 (5%) 0.98 (1%) ✅
["mttkrp", "size=(30, 100, 1000), rank=300, mode=1"] 0.94 (5%) ✅ 1.00 (1%)
["mttkrp", "size=(30, 100, 1000), rank=300, mode=2"] 0.97 (5%) 0.98 (1%) ✅
["mttkrp", "size=(50, 50, 50), rank=10, mode=2"] 0.97 (5%) 0.97 (1%) ✅
["mttkrp", "size=(50, 50, 50), rank=100, mode=2"] 0.90 (5%) ✅ 0.98 (1%) ✅
["mttkrp", "size=(50, 50, 50), rank=150, mode=2"] 0.91 (5%) ✅ 0.98 (1%) ✅
["mttkrp", "size=(50, 50, 50), rank=200, mode=2"] 0.89 (5%) ✅ 0.98 (1%) ✅
["mttkrp", "size=(50, 50, 50), rank=250, mode=2"] 0.86 (5%) ✅ 0.98 (1%) ✅
["mttkrp", "size=(50, 50, 50), rank=300, mode=2"] 0.87 (5%) ✅ 0.98 (1%) ✅
["mttkrp", "size=(50, 50, 50), rank=50, mode=2"] 0.86 (5%) ✅ 0.98 (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    1588339 s          0 s     606505 s   21093654 s          0 s
  Memory: 64.0 GB (33643.921875 MB free)
  Uptime: 498837.0 sec
  Load Avg:  5.25634765625  3.19482421875  3.0380859375
  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    1589686 s          0 s     607606 s   21094507 s          0 s
  Memory: 64.0 GB (33974.0625 MB free)
  Uptime: 498871.0 sec
  Load Avg:  6.8251953125  3.79345703125  3.26025390625
  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
             ndims = 3, rank = 10, mode = 1  
            ┌──────────────────────────────┐ 
          4 │                            .'│ 
            │                           .' │ 
            │                          :   │ 
            │                        .'    │ 
Time (ms)   │                       :      │ 
            │                      :       │ 
            │                   .''        │ 
            │                 .'           │ 
            │            ....'             │ 
          0 │       .''''                  │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
             ndims = 3, rank = 10, mode = 2  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                            .'│ 
            │                           .' │ 
            │                         .'   │ 
Time (ms)   │                       .'     │ 
            │                     .'       │ 
            │                   .'         │ 
            │                 .'           │ 
            │             ...'             │ 
          0 │       ..''''                 │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
             ndims = 3, rank = 10, mode = 3  
            ┌──────────────────────────────┐ 
          3 │                             .│ 
            │                            : │ 
            │                          .'  │ 
            │                        .'    │ 
Time (ms)   │                       .'     │ 
            │                     .'       │ 
            │                   .'         │ 
            │                .''           │ 
            │           ...''              │ 
          0 │       .'''                   │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
              ndims = 3, rank = 50, mode = 1  
             ┌──────────────────────────────┐ 
          10 │                             .│ 
             │                           .' │ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                      :       │ 
             │                   .''        │ 
             │                 .'           │ 
             │           ...'''             │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
             ndims = 3, rank = 50, mode = 2  
            ┌──────────────────────────────┐ 
          7 │                             .│ 
            │                            : │ 
            │                          .'  │ 
            │                        .'    │ 
Time (ms)   │                       .'     │ 
            │                    .''       │ 
            │                  .'          │ 
            │                .'            │ 
            │              .:              │ 
          0 │       ..'''''                │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
             ndims = 3, rank = 50, mode = 3  
            ┌──────────────────────────────┐ 
          9 │                             .│ 
            │                            : │ 
            │                          .'  │ 
            │                        .'    │ 
Time (ms)   │                       .'     │ 
            │                     .'       │ 
            │                   .'         │ 
            │                .''           │ 
            │           ...''              │ 
          0 │       .'''                   │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
              ndims = 3, rank = 100, mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                            ..│ 
Time (ms)    │                          .'  │ 
             │                        .'    │ 
             │                      .'      │ 
             │                  ..''        │ 
             │             ....'            │ 
           0 │       ..''''                 │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 100, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                              │ 
Time (ms)    │                             .│ 
             │                          .'' │ 
             │                       ..'    │ 
             │                    ..'       │ 
             │                 ..'          │ 
           0 │       ......''''             │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 100, mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                             .│ 
Time (ms)    │                          ..' │ 
             │                        .'    │ 
             │                      .'      │ 
             │                  ..''        │ 
             │             ...''            │ 
           0 │       ..''''                 │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                            .'│ 
Time (ms)    │                         ..'  │ 
             │                       .'     │ 
             │                     .:       │ 
             │                 ..''         │ 
             │            ...''             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         .'   │ 
Time (ms)    │                       .'     │ 
             │                     .:       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 1 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    ..'       │ 
             │                 ..'          │ 
             │            ...''             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                             .│ 
             │                            .'│ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                     .:       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 3 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    ..'       │ 
             │                 .''          │ 
             │           ...'''             │ 
           0 │       ..''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 1 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 2 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    ..'       │ 
             │                 .''          │ 
             │            ..'''             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 3 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                  ..'         │ 
             │                .'            │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 1 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             .│ 
             │                           .' │ 
             │                          .'  │ 
Time (ms)    │                        .'    │ 
             │                      .'      │ 
             │                   .''        │ 
             │                ..'           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 2 
             ┌──────────────────────────────┐ 
          30 │                             .│ 
             │                            : │ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                  ..'         │ 
             │                .'            │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 3 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             .│ 
             │                           .' │ 
             │                         .'   │ 
Time (ms)    │                        .'    │ 
             │                      .'      │ 
             │                   ..'        │ 
             │                ..'           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
Baseline
             ndims = 3, rank = 10, mode = 1  
            ┌──────────────────────────────┐ 
          4 │                              │ 
            │                            .'│ 
            │                           .' │ 
            │                         .'   │ 
Time (ms)   │                       .'     │ 
            │                     .:       │ 
            │                   .'         │ 
            │                 .'           │ 
            │            ....'             │ 
          0 │       ..'''                  │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
             ndims = 3, rank = 10, mode = 2  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                            .'│ 
            │                          .'  │ 
            │                        .'    │ 
Time (ms)   │                      .'      │ 
            │                    .'        │ 
            │                  .'          │ 
            │                .'            │ 
            │             ..:              │ 
          0 │       ..''''                 │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
             ndims = 3, rank = 10, mode = 3  
            ┌──────────────────────────────┐ 
          3 │                             :│ 
            │                           .' │ 
            │                          :   │ 
            │                        .'    │ 
Time (ms)   │                       :      │ 
            │                     .'       │ 
            │                   .'         │ 
            │                .''           │ 
            │           ...''              │ 
          0 │       .'''                   │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
              ndims = 3, rank = 50, mode = 1  
             ┌──────────────────────────────┐ 
          10 │                             .│ 
             │                            .'│ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                     .:       │ 
             │                   .'         │ 
             │                ..'           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 50, mode = 2  
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                             .│ 
             │                        ...'' │ 
             │                      :'      │ 
Time (ms)    │                     :        │ 
             │                   .'         │ 
             │                  .'          │ 
             │                 .'           │ 
             │                :             │ 
           0 │       ........:              │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
             ndims = 3, rank = 50, mode = 3  
            ┌──────────────────────────────┐ 
          9 │                             .│ 
            │                           .' │ 
            │                          .'  │ 
            │                        .'    │ 
Time (ms)   │                       .'     │ 
            │                     .'       │ 
            │                   .'         │ 
            │                .''           │ 
            │           ...''              │ 
          0 │       .'''                   │ 
            └──────────────────────────────┘ 
             0                          200  
                          Size               
              ndims = 3, rank = 100, mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                            .'│ 
Time (ms)    │                          .'  │ 
             │                        .'    │ 
             │                      .'      │ 
             │                  ..''        │ 
             │             ...''            │ 
           0 │       ..''''                 │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 100, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                      ..      │ 
             │                     :  '''...│ 
Time (ms)    │                    :         │ 
             │                  .'          │ 
             │                 .'           │ 
             │                .'            │ 
             │               .'             │ 
           0 │       ......'''              │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 100, mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                             .│ 
Time (ms)    │                           .' │ 
             │                        .''   │ 
             │                      .'      │ 
             │                  ..''        │ 
             │             ....'            │ 
           0 │       ..''''                 │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 1 
             ┌──────────────────────────────┐ 
          20 │                             .│ 
             │                            .'│ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                      ...     │ 
             │                     :   '''..│ 
             │                   .'         │ 
Time (ms)    │                  .'          │ 
             │                 .'           │ 
             │                .'            │ 
             │               .'             │ 
             │            ..''              │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 150, mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .:       │ 
             │                   .'         │ 
             │                .''           │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 1 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    ..'       │ 
             │                 ..'          │ 
             │            ...''             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 2 
             ┌──────────────────────────────┐ 
          20 │                             .│ 
             │                            .'│ 
             │                          .'  │ 
             │              :''..     .'    │ 
Time (ms)    │             :     '.. .'     │ 
             │            :         '       │ 
             │          .'                  │ 
             │         .'                   │ 
             │        .'                    │ 
           0 │       .'                     │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 200, mode = 3 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    ..'       │ 
             │                 ..'          │ 
             │            ....'             │ 
           0 │       ..'''                  │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 1 
             ┌──────────────────────────────┐ 
          30 │                             .│ 
             │                            .'│ 
             │                          .'  │ 
             │                        .'    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                  ..'         │ 
             │                .'            │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 2 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                              │ 
             │                             .│ 
             │                           .' │ 
Time (ms)    │                         .'   │ 
             │                       .'     │ 
             │                    .''       │ 
             │                ..''          │ 
             │           ...''              │ 
           0 │       ..''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 250, mode = 3 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                  ..'         │ 
             │                .'            │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 1 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             .│ 
             │                           .' │ 
             │                          .'  │ 
Time (ms)    │                        .'    │ 
             │                      .'      │ 
             │                   .''        │ 
             │                ..'           │ 
             │           ...''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 2 
             ┌──────────────────────────────┐ 
          30 │                              │ 
             │                            .'│ 
             │                          .'  │ 
             │                         :    │ 
Time (ms)    │                       .'     │ 
             │                     .'       │ 
             │                  .''         │ 
             │                .'            │ 
             │           ..'''              │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               
              ndims = 3, rank = 300, mode = 3 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             .│ 
             │                           .' │ 
             │                          :   │ 
Time (ms)    │                        .'    │ 
             │                      .'      │ 
             │                   ..'        │ 
             │                 .'           │ 
             │           ...'''             │ 
           0 │       .'''                   │ 
             └──────────────────────────────┘ 
              0                          200  
                           Size               

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
             size = (30, 100, 1000), mode = 1 
             ┌──────────────────────────────┐ 
          50 │                             .│ 
             │                           ..'│ 
             │                       ..''   │ 
             │                   ..''       │ 
Time (ms)    │                ..'           │ 
             │            ..''              │ 
             │         ..'                  │ 
             │      .''                     │ 
             │   .''                        │ 
           0 │ ''                           │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (30, 100, 1000), mode = 2 
            ┌──────────────────────────────┐ 
          7 │                            .:│ 
            │                          .'  │ 
            │                       .''    │ 
            │                    .''       │ 
Time (ms)   │               ...''          │ 
            │           ..''               │ 
            │        .''                   │ 
            │    ..''                      │ 
            │ ..'                          │ 
          0 │                              │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (30, 100, 1000), mode = 3 
            ┌──────────────────────────────┐ 
          9 │                             .│ 
            │                            .'│ 
            │                         .''  │ 
            │                      ..'     │ 
Time (ms)   │                   ..'        │ 
            │              ..'''           │ 
            │          ..''                │ 
            │      ..''                    │ 
            │  ..''                        │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
              size = (50, 50, 50), mode = 1  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                              │ 
            │                              │ 
            │                          ...'│ 
Time (ms)   │                     ..'''    │ 
            │                ..'''         │ 
            │           ...''              │ 
            │      ...''                   │ 
            │  ..''                        │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
              size = (50, 50, 50), mode = 2  
            ┌──────────────────────────────┐ 
          1 │                             :│ 
            │                           .' │ 
            │                        .''   │ 
            │                    ..''      │ 
Time (ms)   │                ..''          │ 
            │             ..'              │ 
            │         ..''                 │ 
            │      ..'                     │ 
            │  ..''                        │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
              size = (50, 50, 50), mode = 3  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                              │ 
            │                             .│ 
            │                          ..''│ 
Time (ms)   │                     ..'''    │ 
            │                 ..''         │ 
            │            ...''             │ 
            │      ...'''                  │ 
            │   .''                        │ 
          0 │ ''                           │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (100, 100, 100), mode = 1 
            ┌──────────────────────────────┐ 
          7 │                             :│ 
            │                          .'' │ 
            │                      ..''    │ 
            │                   .''        │ 
Time (ms)   │               ..''           │ 
            │            ..'               │ 
            │         ..'                  │ 
            │     .'''                     │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (100, 100, 100), mode = 2 
            ┌──────────────────────────────┐ 
          6 │                            .:│ 
            │                         ..'  │ 
            │                      ..'     │ 
            │                   ..'        │ 
Time (ms)   │              ..'''           │ 
            │             :                │ 
            │           .'                 │ 
            │          :                   │ 
            │    ...'''                    │ 
          0 │ .''                          │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (100, 100, 100), mode = 3 
            ┌──────────────────────────────┐ 
          7 │                             :│ 
            │                          .'' │ 
            │                    ...'''    │ 
            │                  .'          │ 
Time (ms)   │                .'            │ 
            │            ..''              │ 
            │        ..''                  │ 
            │     ..'                      │ 
            │  ..'                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (150, 150, 150), mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                         ..'  │ 
             │                     ..''     │ 
Time (ms)    │                 ..''         │ 
             │             ..''             │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  .''                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (150, 150, 150), mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                             .│ 
             │                          ..''│ 
Time (ms)    │                      ..''    │ 
             │                 ...''        │ 
             │            ...''             │ 
             │       ..'''                  │ 
             │   ..''                       │ 
           0 │ .'                           │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (150, 150, 150), mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .:│ 
             │                         .''  │ 
             │                     ..''     │ 
Time (ms)    │                 ..''         │ 
             │             ..''             │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  ..'                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 1 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             :│ 
             │                          .'' │ 
             │                      ..''    │ 
Time (ms)    │                 ...''        │ 
             │             ..''             │ 
             │         ..''                 │ 
             │    ..'''                     │ 
             │  .'                          │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 2 
             ┌──────────────────────────────┐ 
          30 │                             .│ 
             │                           .' │ 
             │                        ..'   │ 
             │                    ..''      │ 
Time (ms)    │                ..''          │ 
             │            ..''              │ 
             │        ..''                  │ 
             │     ..'                      │ 
             │  ..'                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 3 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             :│ 
             │                          .'' │ 
             │                      ..''    │ 
Time (ms)    │                  ..''        │ 
             │              ..''            │ 
             │         ..'''                │ 
             │     ..''                     │ 
             │  ..'                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (1000, 100, 30), mode = 1 
            ┌──────────────────────────────┐ 
          9 │                             :│ 
            │                           .' │ 
            │                         .'   │ 
            │                      .''     │ 
Time (ms)   │                   ..'        │ 
            │              ...''           │ 
            │         ...''                │ 
            │     ..''                     │ 
            │ ..''                         │ 
          0 │                              │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (1000, 100, 30), mode = 2 
            ┌──────────────────────────────┐ 
          7 │                            .:│ 
            │                         ..'  │ 
            │                       .'     │ 
            │                   ..''       │ 
Time (ms)   │              ...''           │ 
            │          .'''                │ 
            │       .''                    │ 
            │    .''                       │ 
            │ ..'                          │ 
          0 │                              │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (1000, 100, 30), mode = 3 
             ┌──────────────────────────────┐ 
          50 │                             .│ 
             │                          .'' │ 
             │                      ..''    │ 
             │                   .''        │ 
Time (ms)    │               ..''           │ 
             │            ..'               │ 
             │         .''                  │ 
             │      .''                     │ 
             │   .''                        │ 
           0 │ ''                           │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
Baseline
             size = (30, 100, 1000), mode = 1 
             ┌──────────────────────────────┐ 
          50 │                             :│ 
             │                          .'' │ 
             │                      ..''    │ 
             │                   ..'        │ 
Time (ms)    │                ..'           │ 
             │             .''              │ 
             │         ..''                 │ 
             │      ..'                     │ 
             │   .''                        │ 
           0 │ ''                           │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (30, 100, 1000), mode = 2 
            ┌──────────────────────────────┐ 
          8 │                              │ 
            │                            .:│ 
            │                         .''  │ 
            │                      .''     │ 
Time (ms)   │                  ..''        │ 
            │             ..'''            │ 
            │         ..''                 │ 
            │     ..''                     │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (30, 100, 1000), mode = 3 
            ┌──────────────────────────────┐ 
          8 │                             .│ 
            │                           ..'│ 
            │                        .''   │ 
            │                     .''      │ 
Time (ms)   │                ...''         │ 
            │            ..''              │ 
            │        ..''                  │ 
            │     ..'                      │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
              size = (50, 50, 50), mode = 1  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                              │ 
            │                             .│ 
            │                         ...''│ 
Time (ms)   │                    ...''     │ 
            │                 ..'          │ 
            │            ..'''             │ 
            │       ..'''                  │ 
            │   ..''                       │ 
          0 │ ''                           │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
                size = (50, 50, 50), mode = 2  
              ┌──────────────────────────────┐ 
          1.1 │                             :│ 
              │                          .'' │ 
              │                       .''    │ 
              │                   ..''       │ 
Time (ms)     │                ..'           │ 
              │             .''              │ 
              │         ..''                 │ 
              │      .''                     │ 
              │   .''                        │ 
            0 │ ''                           │ 
              └──────────────────────────────┘ 
               0                          300  
                            Rank               
              size = (50, 50, 50), mode = 3  
            ┌──────────────────────────────┐ 
          2 │                              │ 
            │                              │ 
            │                             .│ 
            │                          ..''│ 
Time (ms)   │                      ..''    │ 
            │                 ..'''        │ 
            │            ..'''             │ 
            │      ...'''                  │ 
            │   .''                        │ 
          0 │ ''                           │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (100, 100, 100), mode = 1 
            ┌──────────────────────────────┐ 
          7 │                            .:│ 
            │                          .'  │ 
            │                      ..''    │ 
            │                   .''        │ 
Time (ms)   │               ..''           │ 
            │            .''               │ 
            │        ..''                  │ 
            │     .''                      │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (100, 100, 100), mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                              │ 
             │                              │ 
             │                   ::         │ 
Time (ms)    │                  :  :        │ 
             │                 :    :       │ 
             │                :      '.     │ 
             │               :        ''''''│ 
             │            ...'              │ 
           0 │ ......'''''                  │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (100, 100, 100), mode = 3 
            ┌──────────────────────────────┐ 
          7 │                             .│ 
            │                         ..'' │ 
            │                       .'     │ 
            │                   ..''       │ 
Time (ms)   │               ..''           │ 
            │            ..'               │ 
            │         ..'                  │ 
            │     ..''                     │ 
            │  ..'                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (150, 150, 150), mode = 1 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .'│ 
             │                        ..''  │ 
             │                     ..'      │ 
Time (ms)    │                 ..''         │ 
             │             ..''             │ 
             │         ..''                 │ 
             │     .'''                     │ 
             │  .''                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (150, 150, 150), mode = 2 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │              ..              │ 
             │        ...''' '.            .│ 
             │    :'''        '.        .'' │ 
Time (ms)    │   .'             :   ..''    │ 
             │   :               '''        │ 
             │  :                           │ 
             │ .'                           │ 
             │ :                            │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (150, 150, 150), mode = 3 
             ┌──────────────────────────────┐ 
          20 │                              │ 
             │                            .:│ 
             │                         ..'  │ 
             │                      .''     │ 
Time (ms)    │                 ...''        │ 
             │             ..''             │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  ..'                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 1 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             :│ 
             │                         ..'' │ 
             │                      ..'     │ 
Time (ms)    │                  ..''        │ 
             │             ..'''            │ 
             │         ..''                 │ 
             │     .'''                     │ 
             │  .''                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 2 
             ┌──────────────────────────────┐ 
          30 │                             .│ 
             │                          ..' │ 
             │                       .''    │ 
             │                    ..'       │ 
Time (ms)    │    .'.         ..''          │ 
             │   .'  ''.....''              │ 
             │   :                          │ 
             │  :                           │ 
             │ :                            │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
             size = (200, 200, 200), mode = 3 
             ┌──────────────────────────────┐ 
          40 │                              │ 
             │                             :│ 
             │                          .'' │ 
             │                      ..''    │ 
Time (ms)    │                  ..''        │ 
             │             ..'''            │ 
             │         ..''                 │ 
             │     ..''                     │ 
             │  ..'                         │ 
           0 │ '                            │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               
            size = (1000, 100, 30), mode = 1 
            ┌──────────────────────────────┐ 
          8 │                             .│ 
            │                           .''│ 
            │                        .''   │ 
            │                     .''      │ 
Time (ms)   │                ..'''         │ 
            │           ...''              │ 
            │        .''                   │ 
            │     .''                      │ 
            │  .''                         │ 
          0 │ '                            │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
            size = (1000, 100, 30), mode = 2 
            ┌──────────────────────────────┐ 
          7 │                            .'│ 
            │                         .''  │ 
            │                      .''     │ 
            │                   ..'        │ 
Time (ms)   │               ..''           │ 
            │          ..'''               │ 
            │       ..'                    │ 
            │    ..'                       │ 
            │ ..'                          │ 
          0 │                              │ 
            └──────────────────────────────┘ 
             0                          300  
                          Rank               
             size = (1000, 100, 30), mode = 3 
             ┌──────────────────────────────┐ 
          50 │                             .│ 
             │                          .'' │ 
             │                      ..''    │ 
             │                   ..'        │ 
Time (ms)    │               ..''           │ 
             │            ..'               │ 
             │         .''                  │ 
             │      .''                     │ 
             │   .''                        │ 
           0 │ ''                           │ 
             └──────────────────────────────┘ 
              0                          300  
                           Rank               

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
       size = (30, 100, 1000), rank = 10 
       ┌                              ┐ 
                              ╷┐  ╷     
mode 1                        ├├──┤     
                              ╵┘  ╵     
             ┐╷                         
mode 2       ├┤                         
             ┘╵                         
            ┬┐  ╷                       
mode 3      │├──┤                       
            ┴┘  ╵                       
       └                              ┘ 
        0             2              4  
                   Time (ms)            
       size = (30, 100, 1000), rank = 100 
       ┌                              ┐ 
          ┐            ╷                
mode 1    ├────────────┤                
          ┘            ╵                
        ╷                               
mode 2  ┤                               
        ╵                               
        ╷                               
mode 3  ┤                               
        ╵                               
       └                              ┘ 
        0            100           200  
                   Time (ms)            
       size = (30, 100, 1000), rank = 200 
       ┌                              ┐ 
                              ╷┐╷       
mode 1                        ├├┤       
                              ╵┘╵       
          ╷                             
mode 2    ┤                             
          ╵                             
           ╷                            
mode 3     ┤                            
           ╵                            
       └                              ┘ 
        0            20             40  
                   Time (ms)            
       size = (30, 100, 1000), rank = 300 
       ┌                              ┐ 
                                 ╷┐╷    
mode 1                           ├├┤    
                                 ╵┘╵    
           ┐╷                           
mode 2     ├┤                           
           ┘╵                           
           ╷╷                           
mode 3     ├┤                           
           ╵╵                           
       └                              ┘ 
        0            25             50  
                   Time (ms)            
        size = (50, 50, 50), rank = 10  
       ┌                              ┐ 
                     ┌┬┐     ╷          
mode 1               ┤│├─────┤          
                     └┴┘     ╵          
              ┐        ╷                
mode 2        ├────────┤                
              ┘        ╵                
                    ┌┐  ╷               
mode 3              ┤├──┤               
                    └┘  ╵               
       └                              ┘ 
        0           0.15           0.3  
                   Time (ms)            
        size = (50, 50, 50), rank = 50  
       ┌                              ┐ 
         ┐                        ╷     
mode 1   ├────────────────────────┤     
         ┘                        ╵     
        ╷                               
mode 2  ┤                               
        ╵                               
         ╷                              
mode 3   ┤                              
         ╵                              
       └                              ┘ 
        0             3              6  
                   Time (ms)            
        size = (50, 50, 50), rank = 100 
       ┌                              ┐ 
                          ╷┐ ╷          
mode 1                    ├├─┤          
                          ╵┘ ╵          
         ┐   ╷                          
mode 2   ├───┤                          
         ┘   ╵                          
                         ╷┬┐   ╷        
mode 3                   ├│├───┤        
                         ╵┴┘   ╵        
       └                              ┘ 
        0.3          0.5           0.7  
                   Time (ms)            
        size = (50, 50, 50), rank = 150 
       ┌                              ┐ 
                           ╷┬┐  ╷       
mode 1                     ├│├──┤       
                           ╵┴┘  ╵       
           ┌┐ ╷                         
mode 2     ┤├─┤                         
           └┘ ╵                         
                          ┬┐  ╷         
mode 3                    │├──┤         
                          ┴┘  ╵         
       └                              ┘ 
        0.4         0.65           0.9  
                   Time (ms)            
        size = (50, 50, 50), rank = 200 
       ┌                              ┐ 
                             ╷┌┬┐    ╷  
mode 1                       ├┤│├────┤  
                             ╵└┴┘    ╵  
        ┐ ╷                             
mode 2  ├─┤                             
        ┘ ╵                             
                            ╷┬─┐   ╷    
mode 3                      ├│ ├───┤    
                            ╵┴─┘   ╵    
       └                              ┘ 
        0.6         0.85           1.1  
                   Time (ms)            
        size = (50, 50, 50), rank = 250 
       ┌                              ┐ 
                             ╷┌─┐  ╷    
mode 1                       ├┤ ├──┤    
                             ╵└─┘  ╵    
         ┌┐  ╷                          
mode 2   ┤├──┤                          
         └┘  ╵                          
                               ┌┐  ╷    
mode 3                         ┤├──┤    
                               └┘  ╵    
       └                              ┘ 
        0.7           1            1.3  
                   Time (ms)            
        size = (50, 50, 50), rank = 300 
       ┌                              ┐ 
                         ╷┐    ╷        
mode 1                   ├├────┤        
                         ╵┘    ╵        
        ╷┌┬────┐              ╷         
mode 2  ├┤│    ├──────────────┤         
        ╵└┴────┘              ╵         
                             ╷┬┐  ╷     
mode 3                       ├│├──┤     
                             ╵┴┘  ╵     
       └                              ┘ 
        0.9         1.25           1.6  
                   Time (ms)            
       size = (100, 100, 100), rank = 10 
       ┌                              ┐ 
                       ╷┐           ╷   
mode 1                 ├├───────────┤   
                       ╵┘           ╵   
         ╷┬┐    ╷                       
mode 2   ├│├────┤                       
         ╵┴┘    ╵                       
                       ┐    ╷           
mode 3                 ├────┤           
                       ┘    ╵           
       └                              ┘ 
        0.2          0.5           0.8  
                   Time (ms)            
       size = (100, 100, 100), rank = 50 
       ┌                              ┐ 
                               ┬┐   ╷   
mode 1                         │├───┤   
                               ┴┘   ╵   
         ┌┐  ╷                          
mode 2   ┤├──┤                          
         └┘  ╵                          
                              ┬┐  ╷     
mode 3                        │├──┤     
                              ┴┘  ╵     
       └                              ┘ 
        0.7         1.25           1.8  
                   Time (ms)            
       size = (100, 100, 100), rank = 100 
       ┌                              ┐ 
                            ┬╷          
mode 1                      │┤          
                            ┴╵          
          ┐ ╷                           
mode 2    ├─┤                           
          ┘ ╵                           
                             ┬┐╷        
mode 3                       │├┤        
                             ┴┘╵        
       └                              ┘ 
        1             2              3  
                   Time (ms)            
       size = (100, 100, 100), rank = 150 
       ┌                              ┐ 
            ╷                           
mode 1      ┤                           
            ╵                           
            ┐              ╷            
mode 2      ├──────────────┤            
            ┘              ╵            
            ╷                           
mode 3      ┤                           
            ╵                           
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (100, 100, 100), rank = 200 
       ┌                              ┐ 
           ┐╷                           
mode 1     ├┤                           
           ┘╵                           
         ┬─────────────────────────┐╷   
mode 2   │                         ├┤   
         ┴─────────────────────────┘╵   
           ╷┬─┐╷                        
mode 3     ├│ ├┤                        
           ╵┴─┘╵                        
       └                              ┘ 
        3            8.5            14  
                   Time (ms)            
       size = (100, 100, 100), rank = 250 
       ┌                              ┐ 
           ┐╷                           
mode 1     ├┤                           
           ┘╵                           
         ┬┐                         ╷   
mode 2   │├─────────────────────────┤   
         ┴┘                         ╵   
           ┬╷                           
mode 3     │┤                           
           ┴╵                           
       └                              ┘ 
        4            9.5            15  
                   Time (ms)            
       size = (100, 100, 100), rank = 300 
       ┌                              ┐ 
           ┌╷                           
mode 1     ┤┤                           
           └╵                           
        ╷┐                         ╷    
mode 2  ├├─────────────────────────┤    
        ╵┘                         ╵    
           ┌╷                           
mode 3     ┤┤                           
           └╵                           
       └                              ┘ 
        5           10.5            16  
                   Time (ms)            
       size = (150, 150, 150), rank = 10 
       ┌                              ┐ 
        ╷                               
mode 1  ┤                               
        ╵                               
        ┐                        ╷      
mode 2  ├────────────────────────┤      
        ┘                        ╵      
        ╷                               
mode 3  ┤                               
        ╵                               
       └                              ┘ 
        0            250           500  
                   Time (ms)            
       size = (150, 150, 150), rank = 50 
       ┌                              ┐ 
           ╷╷                           
mode 1     ├┤                           
           ╵╵                           
        ┬───────────────────────────┐╷  
mode 2  │                           ├┤  
        ┴───────────────────────────┘╵  
           ╷                            
mode 3     ┤                            
           ╵                            
       └                              ┘ 
        3             8             13  
                   Time (ms)            
       size = (150, 150, 150), rank = 100 
       ┌                              ┐ 
                 ╷                      
mode 1           ┤                      
                 ╵                      
               ┬─┐   ╷                  
mode 2         │ ├───┤                  
               ┴─┘   ╵                  
                 ┐                ╷     
mode 3           ├────────────────┤     
                 ┘                ╵     
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (150, 150, 150), rank = 150 
       ┌                              ┐ 
                               ┌┬┐╷     
mode 1                         ┤│├┤     
                               └┴┘╵     
        ╷┐ ╷                            
mode 2  ├├─┤                            
        ╵┘ ╵                            
                             ┐ ╷        
mode 3                       ├─┤        
                             ┘ ╵        
       └                              ┘ 
        7            8.5            10  
                   Time (ms)            
       size = (150, 150, 150), rank = 200 
       ┌                              ┐ 
                             ┬╷         
mode 1                       │┤         
                             ┴╵         
            ╷ ╷                         
mode 2      ├─┤                         
            ╵ ╵                         
                             ┬┐╷        
mode 3                       │├┤        
                             ┴┘╵        
       └                              ┘ 
        8           10.5            13  
                   Time (ms)            
       size = (150, 150, 150), rank = 250 
       ┌                              ┐ 
               ╷╷                       
mode 1         ├┤                       
               ╵╵                       
         ┐                         ╷    
mode 2   ├─────────────────────────┤    
         ┘                         ╵    
                ┬╷                      
mode 3          │┤                      
                ┴╵                      
       └                              ┘ 
        11          16.5            22  
                   Time (ms)            
       size = (150, 150, 150), rank = 300 
       ┌                              ┐ 
            ┐                       ╷   
mode 1      ├───────────────────────┤   
            ┘                       ╵   
         ┌┐    ╷                        
mode 2   ┤├────┤                        
         └┘    ╵                        
           ┐╷                           
mode 3     ├┤                           
           ┘╵                           
       └                              ┘ 
        10           35             60  
                   Time (ms)            
       size = (200, 200, 200), rank = 10 
       ┌                              ┐ 
                             ┐╷         
mode 1                       ├┤         
                             ┘╵         
             ┐╷                         
mode 2       ├┤                         
             ┘╵                         
                    ╷╷                  
mode 3              ├┤                  
                    ╵╵                  
       └                              ┘ 
        1             3              5  
                   Time (ms)            
       size = (200, 200, 200), rank = 50 
       ┌                              ┐ 
                ╷                       
mode 1          ┤                       
                ╵                       
             ╷╷                         
mode 2       ├┤                         
             ╵╵                         
                ┐               ╷       
mode 3          ├───────────────┤       
                ┘               ╵       
       └                              ┘ 
        0            15             30  
                   Time (ms)            
       size = (200, 200, 200), rank = 100 
       ┌                              ┐ 
            ╷                           
mode 1      ┤                           
            ╵                           
        ┬──────────────╷                
mode 2  │              ┤                
        ┴──────────────╵                
            ╷                           
mode 3      ┤                           
            ╵                           
       └                              ┘ 
        10           20             30  
                   Time (ms)            
       size = (200, 200, 200), rank = 150 
       ┌                              ┐ 
                                ╷┬┐ ╷   
mode 1                          ├│├─┤   
                                ╵┴┘ ╵   
        ┬╷                              
mode 2  │┤                              
        ┴╵                              
                             ┬╷         
mode 3                       │┤         
                             ┴╵         
       └                              ┘ 
        14          16.5            19  
                   Time (ms)            
       size = (200, 200, 200), rank = 200 
       ┌                              ┐ 
              ╷╷                        
mode 1        ├┤                        
              ╵╵                        
            ┬─────╷                     
mode 2      │     ┤                     
            ┴─────╵                     
              ┬──────┐          ╷       
mode 3        │      ├──────────┤       
              ┴──────┘          ╵       
       └                              ┘ 
        10           35             60  
                   Time (ms)            
       size = (200, 200, 200), rank = 250 
       ┌                              ┐ 
                                 ┌╷     
mode 1                           ┤┤     
                                 └╵     
        ┬╷                              
mode 2  │┤                              
        ┴╵                              
                                  ┌┐╷   
mode 3                            ┤├┤   
                                  └┘╵   
       └                              ┘ 
        22           25             28  
                   Time (ms)            
       size = (200, 200, 200), rank = 300 
       ┌                              ┐ 
                     ┐╷                 
mode 1               ├┤                 
                     ┘╵                 
               ┬┐               ╷       
mode 2         │├───────────────┤       
               ┴┘               ╵       
                     ┬╷                 
mode 3               │┤                 
                     ┴╵                 
       └                              ┘ 
        20           35             50  
                   Time (ms)            
       size = (1000, 100, 30), rank = 10 
       ┌                              ┐ 
              ┐╷                        
mode 1        ├┤                        
              ┘╵                        
            ┐ ╷                         
mode 2      ├─┤                         
            ┘ ╵                         
                             ┌┐  ╷      
mode 3                       ┤├──┤      
                             └┘  ╵      
       └                              ┘ 
        0             2              4  
                   Time (ms)            
       size = (1000, 100, 30), rank = 100 
       ┌                              ┐ 
           ┬╷                           
mode 1     │┤                           
           ┴╵                           
           ┌┬───┐         ╷             
mode 2     ┤│   ├─────────┤             
           └┴───┘         ╵             
                                  ╷     
mode 3                            ┤     
                                  ╵     
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (1000, 100, 30), rank = 200 
       ┌                              ┐ 
           ╷                            
mode 1     ┤                            
           ╵                            
          ┐╷                            
mode 2    ├┤                            
          ┘╵                            
                               ┬─╷      
mode 3                         │ ┤      
                               ┴─╵      
       └                              ┘ 
        0            20             40  
                   Time (ms)            
       size = (1000, 100, 30), rank = 300 
       ┌                              ┐ 
            ┐ ╷                         
mode 1      ├─┤                         
            ┘ ╵                         
           ╷                            
mode 2     ┤                            
           ╵                            
                                   ╷    
mode 3                             ┤    
                                   ╵    
       └                              ┘ 
        0            25             50  
                   Time (ms)            
Baseline
       size = (30, 100, 1000), rank = 10 
       ┌                              ┐ 
                       ┌┐        ╷      
mode 1                 ┤├────────┤      
                       └┘        ╵      
           ┐     ╷                      
mode 2     ├─────┤                      
           ┘     ╵                      
           ┐ ╷                          
mode 3     ├─┤                          
           ┘ ╵                          
       └                              ┘ 
        0             3              6  
                   Time (ms)            
       size = (30, 100, 1000), rank = 100 
       ┌                              ┐ 
            ┌┐                       ╷  
mode 1      ┤├───────────────────────┤  
            └┘                       ╵  
        ╷                               
mode 2  ┤                               
        ╵                               
        ╷                               
mode 3  ┤                               
        ╵                               
       └                              ┘ 
        0            45             90  
                   Time (ms)            
       size = (30, 100, 1000), rank = 200 
       ┌                              ┐ 
                               ┐╷       
mode 1                         ├┤       
                               ┘╵       
          ┐╷                            
mode 2    ├┤                            
          ┘╵                            
           ╷                            
mode 3     ┤                            
           ╵                            
       └                              ┘ 
        0            20             40  
                   Time (ms)            
       size = (30, 100, 1000), rank = 300 
       ┌                              ┐ 
                                   ┌┐╷  
mode 1                             ┤├┤  
                                   └┘╵  
           ┐     ╷                      
mode 2     ├─────┤                      
           ┘     ╵                      
           ┐╷                           
mode 3     ├┤                           
           ┘╵                           
       └                              ┘ 
        0            25             50  
                   Time (ms)            
        size = (50, 50, 50), rank = 10  
       ┌                              ┐ 
                           ┐      ╷     
mode 1                     ├──────┤     
                           ┘      ╵     
                 ┌┐               ╷     
mode 2           ┤├───────────────┤     
                 └┘               ╵     
                           ┬┐       ╷   
mode 3                     │├───────┤   
                           ┴┘       ╵   
       └                              ┘ 
        0            0.1           0.2  
                   Time (ms)            
        size = (50, 50, 50), rank = 50  
       ┌                              ┐ 
                     ╷┐    ╷            
mode 1               ├├────┤            
                     ╵┘    ╵            
         ┐     ╷                        
mode 2   ├─────┤                        
         ┘     ╵                        
                       ╷┐   ╷           
mode 3                 ├├───┤           
                       ╵┘   ╵           
       └                              ┘ 
        0.2         0.35           0.5  
                   Time (ms)            
        size = (50, 50, 50), rank = 100 
       ┌                              ┐ 
                         ╷┌┬─┐ ╷        
mode 1                   ├┤│ ├─┤        
                         ╵└┴─┘ ╵        
            ┐    ╷                      
mode 2      ├────┤                      
            ┘    ╵                      
                         ┌┐     ╷       
mode 3                   ┤├─────┤       
                         └┘     ╵       
       └                              ┘ 
        0.3          0.5           0.7  
                   Time (ms)            
        size = (50, 50, 50), rank = 150 
       ┌                              ┐ 
                       ┌─┐   ╷          
mode 1                 ┤ ├───┤          
                       └─┘   ╵          
        ╷┌┬┐   ╷                        
mode 2  ├┤│├───┤                        
        ╵└┴┘   ╵                        
                        ╷┬┐    ╷        
mode 3                  ├│├────┤        
                        ╵┴┘    ╵        
       └                              ┘ 
        0.5          0.7           0.9  
                   Time (ms)            
        size = (50, 50, 50), rank = 200 
       ┌                              ┐ 
                               ┬┐  ╷    
mode 1                         │├──┤    
                               ┴┘  ╵    
            ┬┐    ╷                     
mode 2      │├────┤                     
            ┴┘    ╵                     
                            ╷┐    ╷     
mode 3                      ├├────┤     
                            ╵┘    ╵     
       └                              ┘ 
        0.6         0.85           1.1  
                   Time (ms)            
        size = (50, 50, 50), rank = 250 
       ┌                              ┐ 
                           ╷   ┬┐  ╷    
mode 1                     ├───│├──┤    
                           ╵   ┴┘  ╵    
          ┌┐     ╷                      
mode 2    ┤├─────┤                      
          └┘     ╵                      
                           ╷┬┐       ╷  
mode 3                     ├│├───────┤  
                           ╵┴┘       ╵  
       └                              ┘ 
        0.8         1.05           1.3  
                   Time (ms)            
        size = (50, 50, 50), rank = 300 
       ┌                              ┐ 
                         ╷ ┌┬┐  ╷       
mode 1                   ├─┤│├──┤       
                         ╵ └┴┘  ╵       
         ┌┐  ╷                          
mode 2   ┤├──┤                          
         └┘  ╵                          
                            ┌┬┐   ╷     
mode 3                      ┤│├───┤     
                            └┴┘   ╵     
       └                              ┘ 
        1            1.3           1.6  
                   Time (ms)            
       size = (100, 100, 100), rank = 10 
       ┌                              ┐ 
                       ╷┬┐       ╷      
mode 1                 ├│├───────┤      
                       ╵┴┘       ╵      
         ┬┐     ╷                       
mode 2   │├─────┤                       
         ┴┘     ╵                       
                      ╷┐    ╷           
mode 3                ├├────┤           
                      ╵┘    ╵           
       └                              ┘ 
        0.2          0.5           0.8  
                   Time (ms)            
       size = (100, 100, 100), rank = 50 
       ┌                              ┐ 
                               ╷┐  ╷    
mode 1                         ├├──┤    
                               ╵┘  ╵    
        ┐  ╷                            
mode 2  ├──┤                            
        ┘  ╵                            
                             ┬┐ ╷       
mode 3                       │├─┤       
                             ┴┘ ╵       
       └                              ┘ 
        0.8          1.3           1.8  
                   Time (ms)            
       size = (100, 100, 100), rank = 100 
       ┌                              ┐ 
                             ┐ ╷        
mode 1                       ├─┤        
                             ┘ ╵        
           ┐ ╷                          
mode 2     ├─┤                          
           ┘ ╵                          
                            ┌┐ ╷        
mode 3                      ┤├─┤        
                            └┘ ╵        
       └                              ┘ 
        1             2              3  
                   Time (ms)            
       size = (100, 100, 100), rank = 150 
       ┌                              ┐ 
                           ╷┬────┐╷     
mode 1                     ├│    ├┤     
                           ╵┴────┘╵     
         ╷┌───┬─┐  ╷                    
mode 2   ├┤   │ ├──┤                    
         ╵└───┴─┘  ╵                    
                        ╷┌┬──┐╷         
mode 3                  ├┤│  ├┤         
                        ╵└┴──┘╵         
       └                              ┘ 
        3           3.45           3.9  
                   Time (ms)            
       size = (100, 100, 100), rank = 200 
       ┌                              ┐ 
        ╷╷                              
mode 1  ├┤                              
        ╵╵                              
        ┌─────────────────────────╷     
mode 2  ┤                         ┤     
        └─────────────────────────╵     
        ╷                               
mode 3  ┤                               
        ╵                               
       └                              ┘ 
        4            9.5            15  
                   Time (ms)            
       size = (100, 100, 100), rank = 250 
       ┌                              ┐ 
                               ╷┬┐╷     
mode 1                         ├│├┤     
                               ╵┴┘╵     
        ╷ ┌─────┬─────╷                 
mode 2  ├─┤     │     ┤                 
        ╵ └─────┴─────╵                 
                               ╷┌┬─┐╷   
mode 3                         ├┤│ ├┤   
                               ╵└┴─┘╵   
       └                              ┘ 
        4.9          5.3           5.7  
                   Time (ms)            
       size = (100, 100, 100), rank = 300 
       ┌                              ┐ 
            ╷                           
mode 1      ┤                           
            ╵                           
         ┐                          ╷   
mode 2   ├──────────────────────────┤   
         ┘                          ╵   
           ┐╷                           
mode 3     ├┤                           
           ┘╵                           
       └                              ┘ 
        5           10.5            16  
                   Time (ms)            
       size = (150, 150, 150), rank = 10 
       ┌                              ┐ 
        ╷                               
mode 1  ┤                               
        ╵                               
        ┬┐                    ╷         
mode 2  │├────────────────────┤         
        ┴┘                    ╵         
        ╷                               
mode 3  ┤                               
        ╵                               
       └                              ┘ 
        0            100           200  
                   Time (ms)            
       size = (150, 150, 150), rank = 50 
       ┌                              ┐ 
              ╷                         
mode 1        ┤                         
              ╵                         
            ╷              ╷            
mode 2      ├──────────────┤            
            ╵              ╵            
             ┬╷                         
mode 3       │┤                         
             ┴╵                         
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (150, 150, 150), rank = 100 
       ┌                              ┐ 
              ╷                         
mode 1        ┤                         
              ╵                         
            ┌─────────┐        ╷        
mode 2      ┤         ├────────┤        
            └─────────┘        ╵        
             ┌╷                         
mode 3       ┤┤                         
             └╵                         
       └                              ┘ 
        0            15             30  
                   Time (ms)            
       size = (150, 150, 150), rank = 150 
       ┌                              ┐ 
              ╷                         
mode 1        ┤                         
              ╵                         
        ┌─────────────────────────┬╷    
mode 2  ┤                         │┤    
        └─────────────────────────┴╵    
             ┬╷                         
mode 3       │┤                         
             ┴╵                         
       └                              ┘ 
        7           12.5            18  
                   Time (ms)            
       size = (150, 150, 150), rank = 200 
       ┌                              ┐ 
                                 ╷┌─┐╷  
mode 1                           ├┤ ├┤  
                                 ╵└─┘╵  
        ╷ ┐  ╷                          
mode 2  ├─├──┤                          
        ╵ ┘  ╵                          
                              ╷┐╷       
mode 3                        ├├┤       
                              ╵┘╵       
       └                              ┘ 
        9           10.5            12  
                   Time (ms)            
       size = (150, 150, 150), rank = 250 
       ┌                              ┐ 
                 ┐╷                     
mode 1           ├┤                     
                 ┘╵                     
         ┬─────────────────────────╷    
mode 2   │                         ┤    
         ┴─────────────────────────╵    
               ╷╷                       
mode 3         ├┤                       
               ╵╵                       
       └                              ┘ 
        11          16.5            22  
                   Time (ms)            
       size = (150, 150, 150), rank = 300 
       ┌                              ┐ 
                 ╷┬╷                    
mode 1           ├│┤                    
                 ╵┴╵                    
         ┬─────────────────────────╷    
mode 2   │                         ┤    
         ┴─────────────────────────╵    
                 ┐╷                     
mode 3           ├┤                     
                 ┘╵                     
       └                              ┘ 
        14          19.5            25  
                   Time (ms)            
       size = (200, 200, 200), rank = 10 
       ┌                              ┐ 
                                ┐ ╷     
mode 1                          ├─┤     
                                ┘ ╵     
               ┐╷                       
mode 2         ├┤                       
               ┘╵                       
                           ┐╷           
mode 3                     ├┤           
                           ┘╵           
       └                              ┘ 
        1            2.5             4  
                   Time (ms)            
       size = (200, 200, 200), rank = 50 
       ┌                              ┐ 
               ┌┐╷                      
mode 1         ┤├┤                      
               └┘╵                      
         ╷┌─────────────────────────╷   
mode 2   ├┤                         ┤   
         ╵└─────────────────────────╵   
              ╷╷                        
mode 3        ├┤                        
              ╵╵                        
       └                              ┘ 
        6           11.5            17  
                   Time (ms)            
       size = (200, 200, 200), rank = 100 
       ┌                              ┐ 
          ╷┬──╷                         
mode 1    ├│  ┤                         
          ╵┴──╵                         
        ┌┬────────┐              ╷      
mode 2  ┤│        ├──────────────┤      
        └┴────────┘              ╵      
          ╷                             
mode 3    ┤                             
          ╵                             
       └                              ┘ 
        10           25             40  
                   Time (ms)            
       size = (200, 200, 200), rank = 150 
       ┌                              ┐ 
                   ╷╷                   
mode 1             ├┤                   
                   ╵╵                   
             ┌┐             ╷           
mode 2       ┤├─────────────┤           
             └┘             ╵           
                   ╷                    
mode 3             ┤                    
                   ╵                    
       └                              ┘ 
        10           20             30  
                   Time (ms)            
       size = (200, 200, 200), rank = 200 
       ┌                              ┐ 
                         ┬╷             
mode 1                   │┤             
                         ┴╵             
                   ┌┬─────────────┐╷    
mode 2             ┤│             ├┤    
                   └┴─────────────┘╵    
                         ┬─┐     ╷      
mode 3                   │ ├─────┤      
                         ┴─┘     ╵      
       └                              ┘ 
        10           20             30  
                   Time (ms)            
       size = (200, 200, 200), rank = 250 
       ┌                              ┐ 
             ┬─┐               ╷        
mode 1       │ ├───────────────┤        
             ┴─┘               ╵        
        ╷┌┬───┐    ╷                    
mode 2  ├┤│   ├────┤                    
        ╵└┴───┘    ╵                    
             ╷                          
mode 3       ┤                          
             ╵                          
       └                              ┘ 
        20           40             60  
                   Time (ms)            
       size = (200, 200, 200), rank = 300 
       ┌                              ┐ 
                            ┌┐╷         
mode 1                      ┤├┤         
                            └┘╵         
                   ┬─────────────┐╷     
mode 2             │             ├┤     
                   ┴─────────────┘╵     
                            ┬┐╷         
mode 3                      │├┤         
                            ┴┘╵         
       └                              ┘ 
        20           30             40  
                   Time (ms)            
       size = (1000, 100, 30), rank = 10 
       ┌                              ┐ 
             ┐          ╷               
mode 1       ├──────────┤               
             ┘          ╵               
             ┐  ╷                       
mode 2       ├──┤                       
             ┘  ╵                       
                             ┬┐  ╷      
mode 3                       │├──┤      
                             ┴┘  ╵      
       └                              ┘ 
        0             2              4  
                   Time (ms)            
       size = (1000, 100, 30), rank = 100 
       ┌                              ┐ 
           ╷┐ ╷                         
mode 1     ├├─┤                         
           ╵┘ ╵                         
           ┬───────────────┐    ╷       
mode 2     │               ├────┤       
           ┴───────────────┘    ╵       
                                 ┌┐╷    
mode 3                           ┤├┤    
                                 └┘╵    
       └                              ┘ 
        0            10             20  
                   Time (ms)            
       size = (1000, 100, 30), rank = 200 
       ┌                              ┐ 
           ┐╷                           
mode 1     ├┤                           
           ┘╵                           
          ┐╷                            
mode 2    ├┤                            
          ┘╵                            
                               ┬╷       
mode 3                         │┤       
                               ┴╵       
       └                              ┘ 
        0            20             40  
                   Time (ms)            
       size = (1000, 100, 30), rank = 300 
       ┌                              ┐ 
           ┬╷                           
mode 1     │┤                           
           ┴╵                           
           ╷                            
mode 2     ┤                            
           ╵                            
                                   ╷    
mode 3                             ┤    
                                   ╵    
       └                              ┘ 
        0            25             50  
                   Time (ms)            

@dahong67
Copy link
Owner Author

dahong67 commented Mar 4, 2024

And yields benefits for gcp, especially in terms of memory use.

Benchmark Report for GCPDecompositions

Job Properties

  • Time of benchmarks:
    • Target: 4 Mar 2024 - 00:01
    • Baseline: 4 Mar 2024 - 00:03
  • Package commits:
    • Target: 85a8ed
    • Baseline: 38648a
  • Julia commits:
    • Target: bed2cd
    • Baseline: bed2cd
  • Julia command flags:
    • Target: None
    • Baseline: None
  • Environment variables:
    • Target: GCP_BENCHMARK_SUITES => gcp
    • Baseline: GCP_BENCHMARK_SUITES => gcp

Results

A ratio greater than 1.0 denotes a possible regression (marked with ❌), while a ratio less
than 1.0 denotes a possible improvement (marked with ✅). Only significant results - results
that indicate possible regressions or improvements - are shown below (thus, an empty table means that all
benchmark results remained invariant between builds).

ID time ratio memory ratio
["gcp", "bernoulliOdds-size(X)=(15, 20, 25), rank(X)=1"] 0.95 (5%) 0.96 (1%) ✅
["gcp", "bernoulliOdds-size(X)=(15, 20, 25), rank(X)=2"] 1.14 (5%) ❌ 1.18 (1%) ❌
["gcp", "bernoulliOdds-size(X)=(30, 40, 50), rank(X)=1"] 0.96 (5%) 0.95 (1%) ✅
["gcp", "bernoulliOdds-size(X)=(30, 40, 50), rank(X)=2"] 0.92 (5%) ✅ 0.94 (1%) ✅
["gcp", "gamma-size(X)=(15, 20, 25), rank(X)=2"] 0.95 (5%) 0.98 (1%) ✅
["gcp", "gamma-size(X)=(30, 40, 50), rank(X)=1"] 1.04 (5%) 1.05 (1%) ❌
["gcp", "gamma-size(X)=(30, 40, 50), rank(X)=2"] 0.95 (5%) 0.96 (1%) ✅
["gcp", "least-squares-size(X)=(15, 20, 25), rank(X)=1"] 0.64 (5%) ✅ 0.42 (1%) ✅
["gcp", "least-squares-size(X)=(15, 20, 25), rank(X)=2"] 0.68 (5%) ✅ 0.35 (1%) ✅
["gcp", "least-squares-size(X)=(30, 40, 50), rank(X)=1"] 0.88 (5%) ✅ 0.55 (1%) ✅
["gcp", "least-squares-size(X)=(30, 40, 50), rank(X)=2"] 0.89 (5%) ✅ 0.41 (1%) ✅
["gcp", "poisson-size(X)=(30, 40, 50), rank(X)=1"] 0.97 (5%) 0.99 (1%) ✅
["gcp", "poisson-size(X)=(30, 40, 50), rank(X)=2"] 0.97 (5%) 0.97 (1%) ✅

Benchmark Group List

Here's a list of all the benchmark groups executed by this job:

  • ["gcp"]

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    1592886 s          0 s     608959 s   21131960 s          0 s
  Memory: 64.0 GB (36595.609375 MB free)
  Uptime: 499293.0 sec
  Load Avg:  2.35498046875  2.36669921875  2.69384765625
  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    1594429 s          0 s     609486 s   21139488 s          0 s
  Memory: 64.0 GB (36540.078125 MB free)
  Uptime: 499390.0 sec
  Load Avg:  2.14990234375  2.32861328125  2.64208984375
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-14.0.6 (ORCJIT, apple-m1)
  Threads: 1 on 8 virtual cores

@dahong67 dahong67 merged commit 6a44ffb into master Mar 4, 2024
9 of 12 checks passed
@dahong67 dahong67 deleted the 42-add-in-place-mttkrp-and-khatrirao branch March 4, 2024 05:07
@dahong67
Copy link
Owner Author

dahong67 commented Mar 4, 2024

All tests pass, except on nightly (which is likely due to the other issues). Merged!

This was referenced Mar 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add in-place mttkrp! and khatrirao!
1 participant