Skip to content

[Feature] Add GVA support for Lightning#85

Open
sjmshsh wants to merge 2 commits into
inclusionAI:mainfrom
sjmshsh:feature/Lightning_sm90_gva_support
Open

[Feature] Add GVA support for Lightning#85
sjmshsh wants to merge 2 commits into
inclusionAI:mainfrom
sjmshsh:feature/Lightning_sm90_gva_support

Conversation

@sjmshsh
Copy link
Copy Markdown
Contributor

@sjmshsh sjmshsh commented May 28, 2026

#81
python tests/test_lightning_attn.py --test all

============================================================
LIGHTNING ATTENTION — TEST SUITE
============================================================

============================================================
BASIC TESTS
============================================================

Testing basic execution...
  ✓ PASSED

Testing different decay values...
  ✓ PASSED

============================================================
PYTORCH REFERENCE TESTS
============================================================

Ref: B=1, S=64, H=2, HV=2, D=128, C=64, decay=0.1
  output    max_diff=0.000488  rel=0.002994
  ✓ PASSED

Ref: B=1, S=64, H=2, HV=2, D=128, C=64, decay=0.0
  output    max_diff=0.001953  rel=0.005000
  ✓ PASSED

Ref: B=1, S=256, H=4, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000488  rel=0.002890
  ✓ PASSED

Ref: B=1, S=128, H=4, HV=4, D=128, C=64, decay=0.05
  output    max_diff=0.000977  rel=0.004975
  ✓ PASSED

Ref: B=1, S=128, H=4, HV=4, D=128, C=64, decay=0.2
  output    max_diff=0.000488  rel=0.003472
  ✓ PASSED

Ref: B=1, S=128, H=4, HV=4, D=128, C=64, decay=0.5
  output    max_diff=0.000488  rel=0.004808
  ✓ PASSED

Ref: B=2, S=128, H=4, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000488  rel=0.002890
  ✓ PASSED

Ref: B=1, S=128, H=2, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000977  rel=0.006061
  ✓ PASSED

============================================================
FLA COMPARISON TESTS
============================================================

FLA: B=1, S=64, H=2, HV=2, D=128, C=64, decay=0.1
  O_fla:  mean=0.000069, std=0.025453, range=[-0.1631, 0.1270]
  O_cute: mean=0.000069, std=0.025453, range=[-0.1631, 0.1270]
  output    max_diff=0.000000  rel=0.000000
  ✓ PASSED

FLA: B=1, S=64, H=2, HV=2, D=128, C=64, decay=0.0
  O_fla:  mean=0.000223, std=0.064537, range=[-0.3906, 0.2871]
  O_cute: mean=0.000223, std=0.064537, range=[-0.3906, 0.2871]
  output    max_diff=0.000000  rel=0.000000
  ✓ PASSED

FLA: B=1, S=256, H=4, HV=4, D=128, C=64, decay=0.1
  O_fla:  mean=-0.000029, std=0.026251, range=[-0.1602, 0.1689]
  O_cute: mean=-0.000029, std=0.026251, range=[-0.1602, 0.1689]
  output    max_diff=0.000488  rel=0.002890
  ✓ PASSED

FLA: B=1, S=128, H=4, HV=4, D=128, C=64, decay=0.05
  O_fla:  mean=0.000004, std=0.035408, range=[-0.1807, 0.1963]
  O_cute: mean=0.000004, std=0.035408, range=[-0.1807, 0.1963]
  output    max_diff=0.000977  rel=0.004975
  ✓ PASSED

FLA: B=1, S=128, H=4, HV=4, D=128, C=64, decay=0.2
  O_fla:  mean=-0.000041, std=0.019830, range=[-0.1318, 0.1406]
  O_cute: mean=-0.000041, std=0.019830, range=[-0.1318, 0.1406]
  output    max_diff=0.000244  rel=0.001736
  ✓ PASSED

FLA: B=1, S=128, H=4, HV=4, D=128, C=64, decay=0.5
  O_fla:  mean=-0.000027, std=0.014656, range=[-0.0938, 0.1011]
  O_cute: mean=-0.000027, std=0.014656, range=[-0.0938, 0.1011]
  output    max_diff=0.000244  rel=0.002415
  ✓ PASSED

FLA: B=2, S=128, H=4, HV=4, D=128, C=64, decay=0.1
  O_fla:  mean=-0.000017, std=0.025991, range=[-0.1602, 0.1689]
  O_cute: mean=-0.000017, std=0.025991, range=[-0.1602, 0.1689]
  output    max_diff=0.000488  rel=0.002890
  ✓ PASSED

FLA: B=1, S=128, H=2, HV=4, D=128, C=64, decay=0.1
  O_fla:  mean=0.000056, std=0.026306, range=[-0.1611, 0.1572]
  O_cute: mean=0.000056, std=0.026306, range=[-0.1611, 0.1572]
  output    max_diff=0.000488  rel=0.003030
  ✓ PASSED

============================================================
H0/HT STATE TESTS (vs PyTorch ref)
============================================================

h0/ht: B=1, S=64, H=2, HV=2, D=128, C=64, decay=0.1
  output    max_diff=0.000488  rel=0.002994
  state     max_diff=0.000176  rel=0.001508
  ✓ PASSED

h0/ht: B=1, S=256, H=4, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000488  rel=0.002890
  state     max_diff=0.000236  rel=0.001516
  ✓ PASSED

h0/ht: B=2, S=128, H=4, HV=4, D=128, C=64, decay=0.2
  output    max_diff=0.000488  rel=0.003472
  state     max_diff=0.000217  rel=0.001883
  ✓ PASSED

h0/ht: B=1, S=128, H=2, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000977  rel=0.006061
  state     max_diff=0.000340  rel=0.002199
  ✓ PASSED

============================================================
H0/HT STATE TESTS (vs FLA)
============================================================

FLA h0/ht: B=1, S=64, H=2, HV=2, D=128, C=64, decay=0.1
  output    max_diff=0.000000  rel=0.000000
  state     max_diff=0.000296  rel=0.002537
  ✓ PASSED

FLA h0/ht: B=1, S=256, H=4, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000488  rel=0.002890
  state     max_diff=0.000310  rel=0.001992
  ✓ PASSED

FLA h0/ht: B=2, S=128, H=4, HV=4, D=128, C=64, decay=0.2
  output    max_diff=0.000244  rel=0.001736
  state     max_diff=0.000406  rel=0.003523
  ✓ PASSED

FLA h0/ht: B=1, S=128, H=2, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000488  rel=0.003030
  state     max_diff=0.000538  rel=0.003480
  ✓ PASSED

============================================================
VARLEN TESTS
============================================================

Varlen single: S=128, H=4, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000000  rel=0.000000
  state     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen single: S=256, H=4, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000000  rel=0.000000
  state     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen single: S=128, H=4, HV=4, D=128, C=64, decay=0.5
  output    max_diff=0.000000  rel=0.000000
  state     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen single: S=128, H=2, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000000  rel=0.000000
  state     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen multi: seqs=[128, 64, 192], H=4, HV=4, D=128, C=64, decay=0.1
  O[0]      max_diff=0.000000  rel=0.000000
  ht[0]     max_diff=0.000000  rel=0.000000
  O[1]      max_diff=0.000000  rel=0.000000
  ht[1]     max_diff=0.000000  rel=0.000000
  O[2]      max_diff=0.000000  rel=0.000000
  ht[2]     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen multi: seqs=[256, 128], H=4, HV=4, D=128, C=64, decay=0.1
  O[0]      max_diff=0.000000  rel=0.000000
  ht[0]     max_diff=0.000000  rel=0.000000
  O[1]      max_diff=0.000000  rel=0.000000
  ht[1]     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen multi: seqs=[128, 128], H=4, HV=4, D=128, C=64, decay=0.5
  O[0]      max_diff=0.000000  rel=0.000000
  ht[0]     max_diff=0.000000  rel=0.000000
  O[1]      max_diff=0.000000  rel=0.000000
  ht[1]     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen multi: seqs=[128, 64], H=2, HV=4, D=128, C=64, decay=0.1
  O[0]      max_diff=0.000000  rel=0.000000
  ht[0]     max_diff=0.000000  rel=0.000000
  O[1]      max_diff=0.000000  rel=0.000000
  ht[1]     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen h0: seqs=[128, 64], H=4, HV=4, D=128, C=64, decay=0.1
  O[0]      max_diff=0.000000  rel=0.000000
  ht[0]     max_diff=0.000000  rel=0.000000
  O[1]      max_diff=0.000000  rel=0.000000
  ht[1]     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen h0: seqs=[128, 64], H=4, HV=4, D=128, C=64, decay=0.2
  O[0]      max_diff=0.000000  rel=0.000000
  ht[0]     max_diff=0.000000  rel=0.000000
  O[1]      max_diff=0.000000  rel=0.000000
  ht[1]     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen h0: seqs=[128, 64], H=2, HV=4, D=128, C=64, decay=0.1
  O[0]      max_diff=0.000000  rel=0.000000
  ht[0]     max_diff=0.000000  rel=0.000000
  O[1]      max_diff=0.000000  rel=0.000000
  ht[1]     max_diff=0.000000  rel=0.000000
  ✓ PASSED

============================================================
VARLEN TESTS (vs PyTorch ref)
============================================================

Varlen vs ref: seqs=[128, 192], H=4, HV=4, D=128, C=64, decay=0.1
  O[0]      max_diff=0.000488  rel=0.002890
  ht[0]     max_diff=0.000294  rel=0.002351
  O[1]      max_diff=0.000977  rel=0.006803
  ht[1]     max_diff=0.000296  rel=0.001764
  ✓ PASSED

Varlen vs ref: seqs=[64, 128], H=4, HV=4, D=128, C=64, decay=0.5
  O[0]      max_diff=0.000488  rel=0.004950
  ht[0]     max_diff=0.000132  rel=0.001100
  O[1]      max_diff=0.000488  rel=0.004808
  ht[1]     max_diff=0.000149  rel=0.001631
  ✓ PASSED

Varlen vs ref: seqs=[64, 128], H=2, HV=4, D=128, C=64, decay=0.1
  O[0]      max_diff=0.000977  rel=0.006173
  ht[0]     max_diff=0.000211  rel=0.001542
  O[1]      max_diff=0.000977  rel=0.006061
  ht[1]     max_diff=0.000281  rel=0.002263
  ✓ PASSED

============================================================
SUMMARY
============================================================
✓ PASSED: Basic execution
✓ PASSED: Different decay values
✓ PASSED: Ref Small (64x64)
✓ PASSED: Ref Zero decay
✓ PASSED: Ref Multi-chunk (256)
✓ PASSED: Ref Decay 0.05
✓ PASSED: Ref Decay 0.2
✓ PASSED: Ref Decay 0.5
✓ PASSED: Ref Batch
✓ PASSED: Ref GVA H2-HV4
✓ PASSED: FLA Small (64x64)
✓ PASSED: FLA Zero decay
✓ PASSED: FLA Multi-chunk (256)
✓ PASSED: FLA Decay 0.05
✓ PASSED: FLA Decay 0.2
✓ PASSED: FLA Decay 0.5
✓ PASSED: FLA Batch
✓ PASSED: FLA GVA H2-HV4
✓ PASSED: h0/ht Small
✓ PASSED: h0/ht Multi-chunk
✓ PASSED: h0/ht Batch
✓ PASSED: h0/ht GVA H2-HV4
✓ PASSED: FLA h0/ht Small
✓ PASSED: FLA h0/ht Multi-chunk
✓ PASSED: FLA h0/ht Batch
✓ PASSED: FLA h0/ht GVA H2-HV4
✓ PASSED: Varlen Single seq
✓ PASSED: Varlen Single long
✓ PASSED: Varlen Decay 0.5
✓ PASSED: Varlen GVA single
✓ PASSED: Varlen Multi 3-seq
✓ PASSED: Varlen Multi 2-seq
✓ PASSED: Varlen Multi decay
✓ PASSED: Varlen GVA multi
✓ PASSED: Varlen h0 indirect
✓ PASSED: Varlen h0 decay 0.2
✓ PASSED: Varlen GVA h0
✓ PASSED: Varlen vs ref 2-seq
✓ PASSED: Varlen vs ref decay
✓ PASSED: Varlen GVA vs ref

Total: 40/40 tests passed

python tests/test_lightning_attn.py --test ref

============================================================
LIGHTNING ATTENTION — TEST SUITE
============================================================

============================================================
PYTORCH REFERENCE TESTS
============================================================

Ref: B=1, S=64, H=2, HV=2, D=128, C=64, decay=0.1
  output    max_diff=0.000488  rel=0.002994
  ✓ PASSED

Ref: B=1, S=64, H=2, HV=2, D=128, C=64, decay=0.0
  output    max_diff=0.001953  rel=0.005000
  ✓ PASSED

Ref: B=1, S=256, H=4, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000488  rel=0.002890
  ✓ PASSED

Ref: B=1, S=128, H=4, HV=4, D=128, C=64, decay=0.05
  output    max_diff=0.000977  rel=0.004975
  ✓ PASSED

Ref: B=1, S=128, H=4, HV=4, D=128, C=64, decay=0.2
  output    max_diff=0.000488  rel=0.003472
  ✓ PASSED

Ref: B=1, S=128, H=4, HV=4, D=128, C=64, decay=0.5
  output    max_diff=0.000488  rel=0.004808
  ✓ PASSED

Ref: B=2, S=128, H=4, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000488  rel=0.002890
  ✓ PASSED

Ref: B=1, S=128, H=2, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000977  rel=0.006061
  ✓ PASSED

============================================================
SUMMARY
============================================================
✓ PASSED: Ref Small (64x64)
✓ PASSED: Ref Zero decay
✓ PASSED: Ref Multi-chunk (256)
✓ PASSED: Ref Decay 0.05
✓ PASSED: Ref Decay 0.2
✓ PASSED: Ref Decay 0.5
✓ PASSED: Ref Batch
✓ PASSED: Ref GVA H2-HV4

Total: 8/8 tests passed

python tests/test_lightning_attn.py --test fla

============================================================
LIGHTNING ATTENTION — TEST SUITE
============================================================

============================================================
FLA COMPARISON TESTS
============================================================

FLA: B=1, S=64, H=2, HV=2, D=128, C=64, decay=0.1
  O_fla:  mean=0.000069, std=0.025453, range=[-0.1631, 0.1270]
  O_cute: mean=0.000069, std=0.025453, range=[-0.1631, 0.1270]
  output    max_diff=0.000000  rel=0.000000
  ✓ PASSED

FLA: B=1, S=64, H=2, HV=2, D=128, C=64, decay=0.0
  O_fla:  mean=0.000223, std=0.064537, range=[-0.3906, 0.2871]
  O_cute: mean=0.000223, std=0.064537, range=[-0.3906, 0.2871]
  output    max_diff=0.000000  rel=0.000000
  ✓ PASSED

FLA: B=1, S=256, H=4, HV=4, D=128, C=64, decay=0.1
  O_fla:  mean=-0.000029, std=0.026251, range=[-0.1602, 0.1689]
  O_cute: mean=-0.000029, std=0.026251, range=[-0.1602, 0.1689]
  output    max_diff=0.000488  rel=0.002890
  ✓ PASSED

FLA: B=1, S=128, H=4, HV=4, D=128, C=64, decay=0.05
  O_fla:  mean=0.000004, std=0.035408, range=[-0.1807, 0.1963]
  O_cute: mean=0.000004, std=0.035408, range=[-0.1807, 0.1963]
  output    max_diff=0.000977  rel=0.004975
  ✓ PASSED

FLA: B=1, S=128, H=4, HV=4, D=128, C=64, decay=0.2
  O_fla:  mean=-0.000041, std=0.019830, range=[-0.1318, 0.1406]
  O_cute: mean=-0.000041, std=0.019830, range=[-0.1318, 0.1406]
  output    max_diff=0.000244  rel=0.001736
  ✓ PASSED

FLA: B=1, S=128, H=4, HV=4, D=128, C=64, decay=0.5
  O_fla:  mean=-0.000027, std=0.014656, range=[-0.0938, 0.1011]
  O_cute: mean=-0.000027, std=0.014656, range=[-0.0938, 0.1011]
  output    max_diff=0.000244  rel=0.002415
  ✓ PASSED

FLA: B=2, S=128, H=4, HV=4, D=128, C=64, decay=0.1
  O_fla:  mean=-0.000017, std=0.025991, range=[-0.1602, 0.1689]
  O_cute: mean=-0.000017, std=0.025991, range=[-0.1602, 0.1689]
  output    max_diff=0.000488  rel=0.002890
  ✓ PASSED

FLA: B=1, S=128, H=2, HV=4, D=128, C=64, decay=0.1
  O_fla:  mean=0.000056, std=0.026306, range=[-0.1611, 0.1572]
  O_cute: mean=0.000056, std=0.026306, range=[-0.1611, 0.1572]
  output    max_diff=0.000488  rel=0.003030
  ✓ PASSED

============================================================
SUMMARY
============================================================
✓ PASSED: FLA Small (64x64)
✓ PASSED: FLA Zero decay
✓ PASSED: FLA Multi-chunk (256)
✓ PASSED: FLA Decay 0.05
✓ PASSED: FLA Decay 0.2
✓ PASSED: FLA Decay 0.5
✓ PASSED: FLA Batch
✓ PASSED: FLA GVA H2-HV4

Total: 8/8 tests passed

python tests/test_lightning_attn.py --test h0ht

============================================================
LIGHTNING ATTENTION — TEST SUITE
============================================================

============================================================
H0/HT STATE TESTS (vs PyTorch ref)
============================================================

h0/ht: B=1, S=64, H=2, HV=2, D=128, C=64, decay=0.1
  output    max_diff=0.000488  rel=0.002994
  state     max_diff=0.000176  rel=0.001508
  ✓ PASSED

h0/ht: B=1, S=256, H=4, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000488  rel=0.002890
  state     max_diff=0.000236  rel=0.001516
  ✓ PASSED

h0/ht: B=2, S=128, H=4, HV=4, D=128, C=64, decay=0.2
  output    max_diff=0.000488  rel=0.003472
  state     max_diff=0.000217  rel=0.001883
  ✓ PASSED

h0/ht: B=1, S=128, H=2, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000977  rel=0.006061
  state     max_diff=0.000340  rel=0.002199
  ✓ PASSED

============================================================
H0/HT STATE TESTS (vs FLA)
============================================================

FLA h0/ht: B=1, S=64, H=2, HV=2, D=128, C=64, decay=0.1
  output    max_diff=0.000000  rel=0.000000
  state     max_diff=0.000296  rel=0.002537
  ✓ PASSED

FLA h0/ht: B=1, S=256, H=4, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000488  rel=0.002890
  state     max_diff=0.000310  rel=0.001992
  ✓ PASSED

FLA h0/ht: B=2, S=128, H=4, HV=4, D=128, C=64, decay=0.2
  output    max_diff=0.000244  rel=0.001736
  state     max_diff=0.000406  rel=0.003523
  ✓ PASSED

FLA h0/ht: B=1, S=128, H=2, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000488  rel=0.003030
  state     max_diff=0.000538  rel=0.003480
  ✓ PASSED

============================================================
SUMMARY
============================================================
✓ PASSED: h0/ht Small
✓ PASSED: h0/ht Multi-chunk
✓ PASSED: h0/ht Batch
✓ PASSED: h0/ht GVA H2-HV4
✓ PASSED: FLA h0/ht Small
✓ PASSED: FLA h0/ht Multi-chunk
✓ PASSED: FLA h0/ht Batch
✓ PASSED: FLA h0/ht GVA H2-HV4

Total: 8/8 tests passed

python tests/test_lightning_attn.py --test varlen

============================================================
LIGHTNING ATTENTION — TEST SUITE
============================================================

============================================================
VARLEN TESTS
============================================================

Varlen single: S=128, H=4, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000000  rel=0.000000
  state     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen single: S=256, H=4, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000000  rel=0.000000
  state     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen single: S=128, H=4, HV=4, D=128, C=64, decay=0.5
  output    max_diff=0.000000  rel=0.000000
  state     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen single: S=128, H=2, HV=4, D=128, C=64, decay=0.1
  output    max_diff=0.000000  rel=0.000000
  state     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen multi: seqs=[128, 64, 192], H=4, HV=4, D=128, C=64, decay=0.1
  O[0]      max_diff=0.000000  rel=0.000000
  ht[0]     max_diff=0.000000  rel=0.000000
  O[1]      max_diff=0.000000  rel=0.000000
  ht[1]     max_diff=0.000000  rel=0.000000
  O[2]      max_diff=0.000000  rel=0.000000
  ht[2]     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen multi: seqs=[256, 128], H=4, HV=4, D=128, C=64, decay=0.1
  O[0]      max_diff=0.000000  rel=0.000000
  ht[0]     max_diff=0.000000  rel=0.000000
  O[1]      max_diff=0.000000  rel=0.000000
  ht[1]     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen multi: seqs=[128, 128], H=4, HV=4, D=128, C=64, decay=0.5
  O[0]      max_diff=0.000000  rel=0.000000
  ht[0]     max_diff=0.000000  rel=0.000000
  O[1]      max_diff=0.000000  rel=0.000000
  ht[1]     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen multi: seqs=[128, 64], H=2, HV=4, D=128, C=64, decay=0.1
  O[0]      max_diff=0.000000  rel=0.000000
  ht[0]     max_diff=0.000000  rel=0.000000
  O[1]      max_diff=0.000000  rel=0.000000
  ht[1]     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen h0: seqs=[128, 64], H=4, HV=4, D=128, C=64, decay=0.1
  O[0]      max_diff=0.000000  rel=0.000000
  ht[0]     max_diff=0.000000  rel=0.000000
  O[1]      max_diff=0.000000  rel=0.000000
  ht[1]     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen h0: seqs=[128, 64], H=4, HV=4, D=128, C=64, decay=0.2
  O[0]      max_diff=0.000000  rel=0.000000
  ht[0]     max_diff=0.000000  rel=0.000000
  O[1]      max_diff=0.000000  rel=0.000000
  ht[1]     max_diff=0.000000  rel=0.000000
  ✓ PASSED

Varlen h0: seqs=[128, 64], H=2, HV=4, D=128, C=64, decay=0.1
  O[0]      max_diff=0.000000  rel=0.000000
  ht[0]     max_diff=0.000000  rel=0.000000
  O[1]      max_diff=0.000000  rel=0.000000
  ht[1]     max_diff=0.000000  rel=0.000000
  ✓ PASSED

============================================================
VARLEN TESTS (vs PyTorch ref)
============================================================

Varlen vs ref: seqs=[128, 192], H=4, HV=4, D=128, C=64, decay=0.1
  O[0]      max_diff=0.000488  rel=0.002890
  ht[0]     max_diff=0.000294  rel=0.002351
  O[1]      max_diff=0.000977  rel=0.006803
  ht[1]     max_diff=0.000296  rel=0.001764
  ✓ PASSED

Varlen vs ref: seqs=[64, 128], H=4, HV=4, D=128, C=64, decay=0.5
  O[0]      max_diff=0.000488  rel=0.004950
  ht[0]     max_diff=0.000132  rel=0.001100
  O[1]      max_diff=0.000488  rel=0.004808
  ht[1]     max_diff=0.000149  rel=0.001631
  ✓ PASSED

Varlen vs ref: seqs=[64, 128], H=2, HV=4, D=128, C=64, decay=0.1
  O[0]      max_diff=0.000977  rel=0.006173
  ht[0]     max_diff=0.000211  rel=0.001542
  O[1]      max_diff=0.000977  rel=0.006061
  ht[1]     max_diff=0.000281  rel=0.002263
  ✓ PASSED

============================================================
SUMMARY
============================================================
✓ PASSED: Varlen Single seq
✓ PASSED: Varlen Single long
✓ PASSED: Varlen Decay 0.5
✓ PASSED: Varlen GVA single
✓ PASSED: Varlen Multi 3-seq
✓ PASSED: Varlen Multi 2-seq
✓ PASSED: Varlen Multi decay
✓ PASSED: Varlen GVA multi
✓ PASSED: Varlen h0 indirect
✓ PASSED: Varlen h0 decay 0.2
✓ PASSED: Varlen GVA h0
✓ PASSED: Varlen vs ref 2-seq
✓ PASSED: Varlen vs ref decay
✓ PASSED: Varlen GVA vs ref

Total: 14/14 tests passed

python -m pytest tests/test_la_decode.py tests/test_la_decode_pool.py -v -s

================================================================= test session starts ==================================================================
platform linux -- Python 3.12.3, pytest-9.0.3, pluggy-1.6.0 -- /usr/local/bin/python
cachedir: .pytest_cache
rootdir: /root/cuLA
configfile: pyproject.toml
plugins: anyio-4.11.0
collected 33 items                                                                                                                                     

tests/test_la_decode.py::test_output_vs_torch_ref[1] PASSED
tests/test_la_decode.py::test_output_vs_torch_ref[2] PASSED
tests/test_la_decode.py::test_output_vs_torch_ref[4] PASSED
tests/test_la_decode.py::test_output_vs_torch_ref[8] PASSED
tests/test_la_decode.py::test_output_vs_torch_ref[16] PASSED
tests/test_la_decode.py::test_output_vs_torch_ref[32] PASSED
tests/test_la_decode.py::test_output_vs_torch_ref[64] PASSED
tests/test_la_decode.py::test_output_vs_torch_ref[128] PASSED
tests/test_la_decode.py::test_output_vs_torch_ref[256] PASSED
tests/test_la_decode.py::test_different_heads[8] PASSED
tests/test_la_decode.py::test_different_heads[16] PASSED
tests/test_la_decode.py::test_different_heads[32] PASSED
tests/test_la_decode.py::test_different_heads[64] PASSED
tests/test_la_decode.py::test_gva_output_vs_torch_ref[qk-2] PASSED
tests/test_la_decode.py::test_gva_output_vs_torch_ref[qk-33] PASSED
tests/test_la_decode.py::test_gva_output_vs_torch_ref[value-2] PASSED
tests/test_la_decode.py::test_gva_output_vs_torch_ref[value-33] PASSED
tests/test_la_decode.py::test_zero_decay PASSED
tests/test_la_decode.py::test_zero_state PASSED
tests/test_la_decode.py::test_vs_fla[1] PASSED
tests/test_la_decode.py::test_vs_fla[8] PASSED
tests/test_la_decode.py::test_vs_fla[32] PASSED
tests/test_la_decode.py::test_vs_fla[128] PASSED
tests/test_la_decode.py::test_gva_vs_fla[2] PASSED
tests/test_la_decode.py::test_gva_vs_fla[33] PASSED
tests/test_la_decode.py::test_prefill_decode_e2e[8-8] PASSED
tests/test_la_decode.py::test_prefill_decode_e2e[4-8] PASSED
tests/test_la_decode_pool.py::test_identity_offsets PASSED
tests/test_la_decode_pool.py::test_non_identity_offsets PASSED
tests/test_la_decode_pool.py::test_gva_non_identity_offsets PASSED
tests/test_la_decode_pool.py::test_reversed_offsets PASSED
tests/test_la_decode_pool.py::test_state_writeback_non_identity PASSED
tests/test_la_decode_pool.py::test_big_batch_non_identity_offsets PASSED

python -m pytest tests/test_la_decode.py tests/test_la_decode_pool.py -v -s -k "gva or prefill_decode_e2e"

================================================================= test session starts ==================================================================
platform linux -- Python 3.12.3, pytest-9.0.3, pluggy-1.6.0 -- /usr/local/bin/python
cachedir: .pytest_cache
rootdir: /root/cuLA
configfile: pyproject.toml
plugins: anyio-4.11.0
collected 33 items / 24 deselected / 9 selected                                                                                                        

tests/test_la_decode.py::test_gva_output_vs_torch_ref[qk-2] PASSED
tests/test_la_decode.py::test_gva_output_vs_torch_ref[qk-33] PASSED
tests/test_la_decode.py::test_gva_output_vs_torch_ref[value-2] PASSED
tests/test_la_decode.py::test_gva_output_vs_torch_ref[value-33] PASSED
tests/test_la_decode.py::test_gva_vs_fla[2] PASSED
tests/test_la_decode.py::test_gva_vs_fla[33] PASSED
tests/test_la_decode.py::test_prefill_decode_e2e[8-8] PASSED
tests/test_la_decode.py::test_prefill_decode_e2e[4-8] PASSED
tests/test_la_decode_pool.py::test_gva_non_identity_offsets PASSED

=========================================================== 9 passed, 24 deselected in 8.66s ===========================================================
python benchmarks/bench_lightning_attn.py \
  --modes no_state h0_ht varlen \
  --batch-sizes 1 \
  --seq-lens 256 1024 \
  --num-heads 32 \
  --num-v-heads 64 \
  --head-dim 128 \
  --warmup 2 \
  --iterations 5

====================================================================================================
Lightning Attention Benchmark: CuteDSL vs FLA
====================================================================================================
  Modes:         ['no_state', 'h0_ht', 'varlen']
  Batch sizes:   [1]
  Seq lengths:   [256, 1024]
  Num heads:     [32]
  Num V heads:   [64]
  Head dim:      128
  Layer:         12/24
  Warmup/Iters:  2/5
====================================================================================================

Config                       Mode         FLA(ms)  CuteDSL(ms)  Speedup            FLA_O_rel_rmse%            Cute_O_rel_rmse%            FLA_Ht_rel_rmse%            Cute_Ht_rel_rmse%
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
B=1,T=256,H=32,HV=64         no_state       0.067        0.035    1.93x       0.235%        0.235%             -              -
B=1,T=1024,H=32,HV=64        no_state       0.073        0.057    1.29x       2.178%        0.235%             -              -
B=1,T=256,H=32,HV=64         h0_ht          0.068        0.042    1.62x       0.235%        0.235%        0.041%         0.041%
B=1,T=1024,H=32,HV=64        h0_ht          0.075        0.068    1.10x       2.684%        0.234%        0.023%         0.023%

====================================================================================================
 Varlen Mode: Persistent vs Non-Persistent vs FLA varlen
====================================================================================================

  --- H=32, HV=64, D=128 ---
Config                   Dist      Persist(ms)  NonPer(ms)  FLA_vl(ms)   P/NP  P/FLAvl     O diff            O_rel_rmse%    ht diff            ht_rel_rmse%
-----------------------------------------------------------------------------------------------------------------------------------------------------------
N=5,T=1024,H=32,HV=64    uniform         0.086       0.090       0.118  1.05x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=1024,H=32,HV=64    skewed          0.071       0.072       0.112  1.02x    1.57x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=1024,H=32,HV=64    random          0.077       0.078       0.112  1.02x    1.45x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=2048,H=32,HV=64    uniform         0.113       0.117       0.150  1.03x    1.32x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=2048,H=32,HV=64    skewed          0.097       0.099       0.139  1.01x    1.42x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=2048,H=32,HV=64    random          0.101       0.105       0.148  1.03x    1.46x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=4096,H=32,HV=64    uniform         0.169       0.172       0.225  1.01x    1.33x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=4096,H=32,HV=64    skewed          0.153       0.152       0.222  0.99x    1.45x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=4096,H=32,HV=64    random          0.147       0.151       0.224  1.03x    1.52x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=8192,H=32,HV=64    uniform         0.277       0.275       0.375  0.99x    1.36x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=8192,H=32,HV=64    skewed          0.246       0.248       0.371  1.01x    1.51x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=8192,H=32,HV=64    random          0.237       0.235       0.372  0.99x    1.57x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=16384,H=32,HV=64   uniform         0.493       0.484       0.684  0.98x    1.39x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=16384,H=32,HV=64   skewed          0.429       0.423       0.664  0.99x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=16384,H=32,HV=64   random          0.436       0.414       0.676  0.95x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=32768,H=32,HV=64   uniform         0.915       0.896       1.291  0.98x    1.41x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=32768,H=32,HV=64   skewed          0.807       0.774       1.251  0.96x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=32768,H=32,HV=64   random          0.832       0.793       1.264  0.95x    1.52x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=1024,H=32,HV=64    uniform         0.086       0.093       0.109  1.07x    1.26x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=1024,H=32,HV=64    skewed          0.095       0.099       0.117  1.04x    1.23x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=1024,H=32,HV=64    random          0.097       0.102       0.112  1.06x    1.16x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=2048,H=32,HV=64    uniform         0.113       0.119       0.144  1.06x    1.27x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=2048,H=32,HV=64    skewed          0.124       0.128       0.156  1.03x    1.26x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=2048,H=32,HV=64    random          0.125       0.131       0.153  1.05x    1.22x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=4096,H=32,HV=64    uniform         0.162       0.166       0.222  1.02x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=4096,H=32,HV=64    skewed          0.163       0.170       0.228  1.05x    1.40x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=4096,H=32,HV=64    random          0.184       0.184       0.237  1.00x    1.29x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=8192,H=32,HV=64    uniform         0.253       0.256       0.375  1.01x    1.48x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=8192,H=32,HV=64    skewed          0.258       0.256       0.384  0.99x    1.49x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=8192,H=32,HV=64    random          0.293       0.291       0.389  0.99x    1.33x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=16384,H=32,HV=64   uniform         0.436       0.434       0.671  0.99x    1.54x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=16384,H=32,HV=64   skewed          0.441       0.442       0.673  1.00x    1.53x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=16384,H=32,HV=64   random          0.502       0.497       0.693  0.99x    1.38x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=32768,H=32,HV=64   uniform         0.806       0.793       1.251  0.98x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=32768,H=32,HV=64   skewed          0.818       0.775       1.254  0.95x    1.53x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=32768,H=32,HV=64   random          0.910       0.885       1.302  0.97x    1.43x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=1024,H=32,HV=64   uniform         0.105       0.115       0.115  1.10x    1.10x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=1024,H=32,HV=64   skewed          0.099       0.107       0.110  1.08x    1.12x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=1024,H=32,HV=64   random          0.107       0.119       0.121  1.11x    1.14x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=2048,H=32,HV=64   uniform         0.137       0.147       0.162  1.07x    1.18x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=2048,H=32,HV=64   skewed          0.133       0.140       0.151  1.05x    1.13x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=2048,H=32,HV=64   random          0.135       0.144       0.161  1.07x    1.19x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=4096,H=32,HV=64   uniform         0.184       0.192       0.235  1.05x    1.28x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=4096,H=32,HV=64   skewed          0.175       0.182       0.232  1.04x    1.33x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=4096,H=32,HV=64   random          0.182       0.193       0.235  1.06x    1.29x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=8192,H=32,HV=64   uniform         0.277       0.282       0.380  1.02x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=8192,H=32,HV=64   skewed          0.273       0.279       0.385  1.02x    1.41x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=8192,H=32,HV=64   random          0.277       0.276       0.383  1.00x    1.39x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=16384,H=32,HV=64  uniform         0.463       0.460       0.679  1.00x    1.47x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=16384,H=32,HV=64  skewed          0.447       0.440       0.674  0.99x    1.51x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=16384,H=32,HV=64  random          0.453       0.450       0.679  0.99x    1.50x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=32768,H=32,HV=64  uniform         0.827       0.821       1.268  0.99x    1.53x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=32768,H=32,HV=64  skewed          0.812       0.775       1.256  0.95x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=32768,H=32,HV=64  random          0.814       0.801       1.276  0.98x    1.57x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=1024,H=32,HV=64   uniform         0.122       0.134       0.124  1.10x    1.01x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=1024,H=32,HV=64   skewed          0.116       0.127       0.117  1.09x    1.01x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=1024,H=32,HV=64   random          0.126       0.140       0.133  1.11x    1.05x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=2048,H=32,HV=64   uniform         0.147       0.160       0.156  1.08x    1.06x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=2048,H=32,HV=64   skewed          0.148       0.158       0.163  1.07x    1.10x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=2048,H=32,HV=64   random          0.156       0.168       0.171  1.08x    1.09x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=4096,H=32,HV=64   uniform         0.196       0.207       0.238  1.06x    1.21x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=4096,H=32,HV=64   skewed          0.183       0.195       0.232  1.07x    1.27x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=4096,H=32,HV=64   random          0.210       0.219       0.248  1.04x    1.18x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=8192,H=32,HV=64   uniform         0.292       0.298       0.385  1.02x    1.32x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=8192,H=32,HV=64   skewed          0.276       0.280       0.381  1.02x    1.38x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=8192,H=32,HV=64   random          0.318       0.318       0.397  1.00x    1.25x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=16384,H=32,HV=64  uniform         0.477       0.479       0.688  1.00x    1.44x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=16384,H=32,HV=64  skewed          0.449       0.444       0.673  0.99x    1.50x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=16384,H=32,HV=64  random          0.528       0.520       0.714  0.98x    1.35x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=32768,H=32,HV=64  uniform         0.838       0.829       1.267  0.99x    1.51x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=32768,H=32,HV=64  skewed          0.816       0.789       1.261  0.97x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=32768,H=32,HV=64  random          0.936       0.929       1.347  0.99x    1.44x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=1024,H=32,HV=64   uniform         0.123       0.136       0.115  1.11x    0.94x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=1024,H=32,HV=64   skewed          0.145       0.160       0.130  1.11x    0.90x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=1024,H=32,HV=64   random          0.143       0.158       0.134  1.10x    0.93x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=2048,H=32,HV=64   uniform         0.151       0.163       0.153  1.08x    1.01x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=2048,H=32,HV=64   skewed          0.171       0.185       0.180  1.08x    1.05x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=2048,H=32,HV=64   random          0.166       0.183       0.171  1.10x    1.03x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=4096,H=32,HV=64   uniform         0.191       0.206       0.231  1.08x    1.20x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=4096,H=32,HV=64   skewed          0.218       0.233       0.252  1.07x    1.16x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=4096,H=32,HV=64   random          0.211       0.226       0.238  1.08x    1.13x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=8192,H=32,HV=64   uniform         0.279       0.286       0.380  1.03x    1.36x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=8192,H=32,HV=64   skewed          0.301       0.315       0.394  1.04x    1.31x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=8192,H=32,HV=64   random          0.300       0.309       0.395  1.03x    1.32x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=16384,H=32,HV=64  uniform         0.452       0.451       0.676  1.00x    1.49x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=16384,H=32,HV=64  skewed          0.477       0.477       0.680  1.00x    1.43x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=16384,H=32,HV=64  random          0.476       0.474       0.690  0.99x    1.45x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=32768,H=32,HV=64  uniform         0.799       0.782       1.248  0.98x    1.56x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=32768,H=32,HV=64  skewed          0.827       0.815       1.271  0.98x    1.54x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=32768,H=32,HV=64  random          0.834       0.828       1.285  0.99x    1.54x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=1024,H=32,HV=64   uniform         0.165       0.183       0.127  1.11x    0.77x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=1024,H=32,HV=64   skewed          0.175       0.194       0.138  1.10x    0.79x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=1024,H=32,HV=64   random          0.171       0.191       0.147  1.11x    0.86x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=2048,H=32,HV=64   uniform         0.194       0.213       0.171  1.10x    0.88x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=2048,H=32,HV=64   skewed          0.189       0.208       0.166  1.10x    0.88x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=2048,H=32,HV=64   random          0.195       0.214       0.183  1.10x    0.94x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=4096,H=32,HV=64   uniform         0.243       0.262       0.260  1.08x    1.07x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=4096,H=32,HV=64   skewed          0.235       0.253       0.249  1.07x    1.06x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=4096,H=32,HV=64   random          0.238       0.257       0.253  1.08x    1.06x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=8192,H=32,HV=64   uniform         0.329       0.343       0.402  1.04x    1.22x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=8192,H=32,HV=64   skewed          0.324       0.342       0.400  1.06x    1.24x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=8192,H=32,HV=64   random          0.330       0.344       0.403  1.04x    1.22x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=16384,H=32,HV=64  uniform         0.504       0.507       0.689  1.00x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=16384,H=32,HV=64  skewed          0.492       0.498       0.681  1.01x    1.38x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=16384,H=32,HV=64  random          0.499       0.503       0.692  1.01x    1.39x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=32768,H=32,HV=64  uniform         0.857       0.847       1.269  0.99x    1.48x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=32768,H=32,HV=64  skewed          0.849       0.840       1.269  0.99x    1.50x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=32768,H=32,HV=64  random          0.840       0.838       1.272  1.00x    1.51x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=1024,H=32,HV=64   uniform         0.196       0.221       0.140  1.13x    0.72x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=1024,H=32,HV=64   skewed          0.207       0.231       0.158  1.12x    0.76x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=1024,H=32,HV=64   random          0.203       0.227       0.158  1.12x    0.78x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=2048,H=32,HV=64   uniform         0.228       0.252       0.199  1.11x    0.87x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=2048,H=32,HV=64   skewed          0.222       0.246       0.182  1.11x    0.82x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=2048,H=32,HV=64   random          0.227       0.253       0.194  1.12x    0.85x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=4096,H=32,HV=64   uniform         0.268       0.292       0.260  1.09x    0.97x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=4096,H=32,HV=64   skewed          0.271       0.295       0.269  1.09x    0.99x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=4096,H=32,HV=64   random          0.270       0.295       0.264  1.09x    0.98x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=8192,H=32,HV=64   uniform         0.361       0.378       0.426  1.05x    1.18x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=8192,H=32,HV=64   skewed          0.349       0.373       0.399  1.07x    1.14x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=8192,H=32,HV=64   random          0.357       0.381       0.410  1.07x    1.15x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=16384,H=32,HV=64  uniform         0.545       0.547       0.711  1.00x    1.31x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=16384,H=32,HV=64  skewed          0.529       0.540       0.704  1.02x    1.33x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=16384,H=32,HV=64  random          0.528       0.542       0.705  1.03x    1.34x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=32768,H=32,HV=64  uniform         0.888       0.880       1.281  0.99x    1.44x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=32768,H=32,HV=64  skewed          0.872       0.870       1.269  1.00x    1.46x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=32768,H=32,HV=64  random          0.870       0.868       1.283  1.00x    1.47x    0.0e+00    0.000%    0.0e+00     0.000%

====================================================================================================
SUMMARY BY MODE
====================================================================================================

  [no_state]  (2 configs)
    Speedup (CuteDSL/FLA):  avg=1.61x  min=1.29x  max=1.93x
    FLA O relative_rms_error% (vs naive): avg=1.2065  max=2.1778
    CuteDSL O relative_rms_error% (vs naive): avg=0.2350  max=0.2353

  [h0_ht]  (2 configs)
    Speedup (CuteDSL/FLA):  avg=1.36x  min=1.10x  max=1.62x
    FLA O relative_rms_error% (vs naive): avg=1.4596  max=2.6840
    FLA Ht relative_rms_error% (vs naive): avg=0.0318  max=0.0410
    CuteDSL O relative_rms_error% (vs naive): avg=0.2348  max=0.2351
    CuteDSL Ht relative_rms_error% (vs naive): avg=0.0320  max=0.0411

  [varlen]  (126 configs)
    Persist vs NonPer:      avg=1.04x  min=0.95x  max=1.13x
    Persist vs FLA varlen:   avg=1.27x  min=0.72x  max=1.57x  (FAIR)
    P vs NP O diff:         max=0.00e+00  (bit-exact=True)
    P vs NP O relative_rms_error: avg=0.0000%  max=0.0000%
python benchmarks/bench_lightning_attn.py \
  --modes no_state h0_ht varlen \
  --batch-sizes 1 2 8 \
  --seq-lens 256 1024 4096 8192 \
  --num-heads 32 64 \
  --num-v-heads 64 128 \
  --head-dim 128 \
  --warmup 5 \
  --iterations 20 \
  --report

====================================================================================================
Lightning Attention Benchmark: CuteDSL vs FLA
====================================================================================================
  Modes:         ['no_state', 'h0_ht', 'varlen']
  Batch sizes:   [1, 2, 8]
  Seq lengths:   [256, 1024, 4096, 8192]
  Num heads:     [32, 64]
  Num V heads:   [64, 128]
  Head dim:      128
  Layer:         12/24
  Warmup/Iters:  5/20
====================================================================================================

Config                       Mode         FLA(ms)  CuteDSL(ms)  Speedup            FLA_O_rel_rmse%            Cute_O_rel_rmse%            FLA_Ht_rel_rmse%            Cute_Ht_rel_rmse%
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
B=1,T=256,H=32,HV=64         no_state       0.063        0.031    2.02x       0.235%        0.235%             -              -
B=1,T=256,H=32,HV=128        no_state       0.063        0.032    1.94x       0.235%        0.235%             -              -
B=1,T=256,H=64,HV=64         no_state       0.062        0.031    2.01x       0.234%        0.234%             -              -
B=1,T=256,H=64,HV=128        no_state       0.063        0.032    2.00x       0.236%        0.236%             -              -
B=1,T=1024,H=32,HV=64        no_state       0.064        0.055    1.15x       2.578%        0.235%             -              -
B=1,T=1024,H=32,HV=128       no_state       0.110        0.061    1.79x       3.327%        0.234%             -              -
B=1,T=1024,H=64,HV=64        no_state       0.063        0.055    1.14x       2.895%        0.234%             -              -
B=1,T=1024,H=64,HV=128       no_state       0.110        0.061    1.79x       3.402%        0.236%             -              -
B=1,T=4096,H=32,HV=64        no_state       0.206        0.162    1.28x       1.630%        0.235%             -              -
B=1,T=4096,H=32,HV=128       no_state       0.367        0.181    2.03x       2.064%        0.235%             -              -
B=1,T=4096,H=64,HV=64        no_state       0.207        0.164    1.26x       1.734%        0.235%             -              -
B=1,T=4096,H=64,HV=128       no_state       0.367        0.181    2.02x       2.547%        0.234%             -              -
B=1,T=8192,H=32,HV=64        no_state       0.389        0.304    1.28x       1.275%        0.234%             -              -
B=1,T=8192,H=32,HV=128       no_state       0.709        0.339    2.09x       1.693%        0.235%             -              -
B=1,T=8192,H=64,HV=64        no_state       0.389        0.306    1.27x       1.210%        0.235%             -              -
B=1,T=8192,H=64,HV=128       no_state       0.709        0.340    2.09x       1.672%        0.235%             -              -
B=2,T=256,H=32,HV=64         no_state       0.063        0.032    1.99x       0.235%        0.235%             -              -
B=2,T=256,H=32,HV=128        no_state       0.062        0.046    1.35x       5.165%        0.235%             -              -
B=2,T=256,H=64,HV=64         no_state       0.061        0.031    1.97x       0.235%        0.235%             -              -
B=2,T=256,H=64,HV=128        no_state       0.062        0.046    1.36x       6.614%        0.235%             -              -
B=2,T=1024,H=32,HV=64        no_state       0.109        0.061    1.79x       2.759%        0.235%             -              -
B=2,T=1024,H=32,HV=128       no_state       0.196        0.106    1.84x       3.512%        0.235%             -              -
B=2,T=1024,H=64,HV=64        no_state       0.110        0.061    1.79x       3.015%        0.235%             -              -
B=2,T=1024,H=64,HV=128       no_state       0.196        0.106    1.84x       3.484%        0.235%             -              -
B=2,T=4096,H=32,HV=64        no_state       0.367        0.181    2.03x       1.528%        0.235%             -              -
B=2,T=4096,H=32,HV=128       no_state       0.702        0.344    2.04x       2.327%        0.235%             -              -
B=2,T=4096,H=64,HV=64        no_state       0.367        0.182    2.02x       1.620%        0.235%             -              -
B=2,T=4096,H=64,HV=128       no_state       0.702        0.344    2.04x       2.857%        0.235%             -              -
B=2,T=8192,H=32,HV=64        no_state       0.709        0.340    2.08x       1.414%        0.234%             -              -
B=2,T=8192,H=32,HV=128       no_state       1.372        0.661    2.07x       1.759%        0.235%             -              -
B=2,T=8192,H=64,HV=64        no_state       0.709        0.341    2.08x       1.214%        0.235%             -              -
B=2,T=8192,H=64,HV=128       no_state       1.371        0.662    2.07x       1.811%        0.235%             -              -
B=8,T=256,H=32,HV=64         no_state       0.109        0.075    1.46x       3.256%        0.234%             -              -
B=8,T=256,H=32,HV=128        no_state       0.200        0.123    1.62x       5.199%        0.235%             -              -
B=8,T=256,H=64,HV=64         no_state       0.109        0.075    1.45x       4.938%        0.235%             -              -
B=8,T=256,H=64,HV=128        no_state       0.199        0.123    1.62x       4.755%        0.236%             -              -
B=8,T=1024,H=32,HV=64        no_state       0.365        0.194    1.88x       2.953%        0.235%             -              -
B=8,T=1024,H=32,HV=128       no_state       0.701        0.337    2.08x       4.148%        0.235%             -              -
B=8,T=1024,H=64,HV=64        no_state       0.365        0.195    1.87x       3.362%        1.409%             -              -
B=8,T=1024,H=64,HV=128       no_state       0.701        0.338    2.07x       3.959%        0.235%             -              -
B=8,T=4096,H=32,HV=64        no_state       1.363        0.670    2.03x       1.829%        0.235%             -              -
B=8,T=4096,H=32,HV=128       no_state       2.681        1.192    2.25x       2.639%        0.235%             -              -
B=8,T=4096,H=64,HV=64        no_state       1.363        0.671    2.03x       1.917%        0.235%             -              -
B=8,T=4096,H=64,HV=128       no_state       2.682        1.192    2.25x       2.669%        0.235%             -              -
B=1,T=256,H=32,HV=64         h0_ht          0.067        0.041    1.65x       0.235%        0.235%        0.041%         0.041%
B=1,T=256,H=32,HV=128        h0_ht          0.069        0.042    1.65x       3.263%        0.235%        0.057%         0.058%
B=1,T=256,H=64,HV=64         h0_ht          0.064        0.041    1.55x       0.234%        0.234%        0.041%         0.042%
B=1,T=256,H=64,HV=128        h0_ht          0.065        0.042    1.55x       2.003%        0.236%        0.058%         0.058%
B=1,T=1024,H=32,HV=64        h0_ht          0.067        0.066    1.01x       2.852%        0.234%        0.023%         0.023%
B=1,T=1024,H=32,HV=128       h0_ht          0.121        0.074    1.64x       4.379%        0.234%        0.035%         0.035%
B=1,T=1024,H=64,HV=64        h0_ht          0.066        0.066    1.00x       3.384%        0.235%        0.023%         0.023%
B=1,T=1024,H=64,HV=128       h0_ht          0.121        0.074    1.64x       4.262%        0.236%        0.036%         0.036%
B=1,T=4096,H=32,HV=64        h0_ht          0.205        0.174    1.18x       1.867%        0.235%        0.012%         0.012%
B=1,T=4096,H=32,HV=128       h0_ht          0.399        0.193    2.06x       2.383%        0.235%        0.019%         0.018%
B=1,T=4096,H=64,HV=64        h0_ht          0.205        0.175    1.17x       2.002%        0.235%        0.012%         0.012%
B=1,T=4096,H=64,HV=128       h0_ht          0.399        0.194    2.05x       2.176%        0.234%        0.018%         0.018%
B=1,T=8192,H=32,HV=64        h0_ht          0.385        0.316    1.22x       1.296%        0.234%        0.008%         0.009%
B=1,T=8192,H=32,HV=128       h0_ht          0.767        0.353    2.17x       1.689%        0.235%        0.013%         0.013%
B=1,T=8192,H=64,HV=64        h0_ht          0.385        0.317    1.21x       1.201%        0.235%        0.009%         0.008%
B=1,T=8192,H=64,HV=128       h0_ht          0.768        0.353    2.17x       1.777%        0.235%        0.013%         0.013%
B=2,T=256,H=32,HV=64         h0_ht          0.065        0.042    1.55x       1.186%        0.235%        0.041%         0.041%
B=2,T=256,H=32,HV=128        h0_ht          0.073        0.065    1.12x       4.265%        0.235%        0.058%         0.058%
B=2,T=256,H=64,HV=64         h0_ht          0.065        0.042    1.55x       0.236%        0.236%        0.042%         0.041%
B=2,T=256,H=64,HV=128        h0_ht          0.073        0.066    1.11x       5.730%        0.235%        0.058%         0.058%
B=2,T=1024,H=32,HV=64        h0_ht          0.121        0.073    1.64x       3.827%        0.234%        0.023%         0.023%
B=2,T=1024,H=32,HV=128       h0_ht          0.216        0.129    1.68x       3.557%        0.235%        0.035%         0.035%
B=2,T=1024,H=64,HV=64        h0_ht          0.121        0.074    1.63x       2.016%        0.235%        0.023%         0.023%
B=2,T=1024,H=64,HV=128       h0_ht          0.216        0.130    1.66x       4.038%        0.235%        0.035%         0.035%
B=2,T=4096,H=32,HV=64        h0_ht          0.399        0.194    2.06x       1.943%        0.235%        0.012%         0.012%
B=2,T=4096,H=32,HV=128       h0_ht          0.743        0.367    2.02x       2.446%        0.235%        0.018%         0.019%
B=2,T=4096,H=64,HV=64        h0_ht          0.399        0.195    2.05x       1.750%        0.235%        0.012%         0.012%
B=2,T=4096,H=64,HV=128       h0_ht          0.739        0.368    2.01x       2.620%        0.235%        0.019%         0.019%
B=2,T=8192,H=32,HV=64        h0_ht          0.768        0.354    2.17x       1.175%        0.234%        0.009%         0.009%
B=2,T=8192,H=32,HV=128       h0_ht          1.438        0.685    2.10x       1.854%        0.235%        0.013%         0.013%
B=2,T=8192,H=64,HV=64        h0_ht          0.768        0.355    2.16x       1.192%        0.235%        0.008%         0.008%
B=2,T=8192,H=64,HV=128       h0_ht          1.438        0.686    2.10x       1.875%        0.235%        0.013%         0.013%
B=8,T=256,H=32,HV=64         h0_ht          0.129        0.118    1.09x       2.642%        0.234%        0.041%         0.041%
B=8,T=256,H=32,HV=128        h0_ht          0.232        0.194    1.19x       5.662%        0.235%        0.058%         0.058%
B=8,T=256,H=64,HV=64         h0_ht          0.128        0.121    1.06x       3.171%        0.235%        0.042%         0.041%
B=8,T=256,H=64,HV=128        h0_ht          0.232        0.196    1.18x       5.465%        0.236%        0.058%         0.058%
B=8,T=1024,H=32,HV=64        h0_ht          0.390        0.236    1.65x       2.837%        0.235%        0.023%         0.023%
B=8,T=1024,H=32,HV=128       h0_ht          0.752        0.407    1.85x       4.170%        0.235%        0.035%         0.035%
B=8,T=1024,H=64,HV=64        h0_ht          0.390        0.238    1.64x       3.668%        0.235%        0.023%         0.023%
B=8,T=1024,H=64,HV=128       h0_ht          0.752        0.409    1.84x       4.299%        0.235%        0.035%         0.035%
B=8,T=4096,H=32,HV=64        h0_ht          1.426        0.709    2.01x       1.811%        0.235%        0.012%         0.012%
B=8,T=4096,H=32,HV=128       h0_ht          2.808        1.257    2.23x       2.713%        0.235%        0.019%         0.019%
B=8,T=4096,H=64,HV=64        h0_ht          1.426        0.711    2.01x       1.823%        0.235%        0.012%         0.012%
B=8,T=4096,H=64,HV=128       h0_ht          2.807        1.260    2.23x       2.708%        0.235%        0.019%         0.019%

====================================================================================================
 Varlen Mode: Persistent vs Non-Persistent vs FLA varlen
====================================================================================================

  --- H=32, HV=64, D=128 ---
Config                   Dist      Persist(ms)  NonPer(ms)  FLA_vl(ms)   P/NP  P/FLAvl     O diff            O_rel_rmse%    ht diff            ht_rel_rmse%
-----------------------------------------------------------------------------------------------------------------------------------------------------------
N=5,T=1024,H=32,HV=64    uniform         0.084       0.089       0.110  1.06x    1.31x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=1024,H=32,HV=64    skewed          0.070       0.073       0.108  1.04x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=1024,H=32,HV=64    random          0.076       0.079       0.108  1.04x    1.42x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=2048,H=32,HV=64    uniform         0.113       0.117       0.144  1.04x    1.28x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=2048,H=32,HV=64    skewed          0.098       0.098       0.137  1.00x    1.40x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=2048,H=32,HV=64    random          0.100       0.106       0.145  1.06x    1.45x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=4096,H=32,HV=64    uniform         0.169       0.171       0.221  1.01x    1.31x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=4096,H=32,HV=64    skewed          0.152       0.152       0.218  1.00x    1.43x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=4096,H=32,HV=64    random          0.146       0.151       0.219  1.03x    1.49x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=8192,H=32,HV=64    uniform         0.275       0.275       0.377  1.00x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=8192,H=32,HV=64    skewed          0.246       0.248       0.366  1.01x    1.49x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=8192,H=32,HV=64    random          0.237       0.235       0.370  0.99x    1.56x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=16384,H=32,HV=64   uniform         0.492       0.483       0.684  0.98x    1.39x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=16384,H=32,HV=64   skewed          0.428       0.424       0.662  0.99x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=16384,H=32,HV=64   random          0.437       0.416       0.674  0.95x    1.54x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=32768,H=32,HV=64   uniform         0.914       0.895       1.281  0.98x    1.40x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=32768,H=32,HV=64   skewed          0.810       0.773       1.246  0.96x    1.54x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=32768,H=32,HV=64   random          0.834       0.793       1.264  0.95x    1.52x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=1024,H=32,HV=64    uniform         0.087       0.093       0.108  1.07x    1.24x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=1024,H=32,HV=64    skewed          0.093       0.099       0.116  1.06x    1.25x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=1024,H=32,HV=64    random          0.096       0.103       0.108  1.07x    1.13x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=2048,H=32,HV=64    uniform         0.112       0.119       0.143  1.06x    1.27x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=2048,H=32,HV=64    skewed          0.124       0.126       0.156  1.02x    1.26x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=2048,H=32,HV=64    random          0.126       0.130       0.153  1.04x    1.22x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=4096,H=32,HV=64    uniform         0.160       0.166       0.219  1.03x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=4096,H=32,HV=64    skewed          0.163       0.171       0.228  1.05x    1.40x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=4096,H=32,HV=64    random          0.183       0.184       0.238  1.00x    1.30x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=8192,H=32,HV=64    uniform         0.252       0.256       0.373  1.01x    1.48x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=8192,H=32,HV=64    skewed          0.257       0.256       0.379  0.99x    1.47x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=8192,H=32,HV=64    random          0.292       0.290       0.387  0.99x    1.32x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=16384,H=32,HV=64   uniform         0.437       0.434       0.670  0.99x    1.53x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=16384,H=32,HV=64   skewed          0.441       0.441       0.671  1.00x    1.52x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=16384,H=32,HV=64   random          0.502       0.494       0.689  0.98x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=32768,H=32,HV=64   uniform         0.803       0.789       1.249  0.98x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=32768,H=32,HV=64   skewed          0.816       0.775       1.251  0.95x    1.53x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=32768,H=32,HV=64   random          0.912       0.888       1.306  0.97x    1.43x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=1024,H=32,HV=64   uniform         0.106       0.116       0.111  1.09x    1.05x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=1024,H=32,HV=64   skewed          0.101       0.109       0.107  1.09x    1.07x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=1024,H=32,HV=64   random          0.106       0.117       0.118  1.10x    1.11x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=2048,H=32,HV=64   uniform         0.136       0.146       0.158  1.07x    1.16x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=2048,H=32,HV=64   skewed          0.132       0.140       0.150  1.07x    1.14x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=2048,H=32,HV=64   random          0.135       0.144       0.156  1.07x    1.15x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=4096,H=32,HV=64   uniform         0.183       0.191       0.231  1.04x    1.26x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=4096,H=32,HV=64   skewed          0.173       0.182       0.229  1.05x    1.32x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=4096,H=32,HV=64   random          0.183       0.193       0.234  1.06x    1.28x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=8192,H=32,HV=64   uniform         0.276       0.281       0.379  1.02x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=8192,H=32,HV=64   skewed          0.272       0.278       0.382  1.02x    1.41x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=8192,H=32,HV=64   random          0.276       0.277       0.382  1.00x    1.38x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=16384,H=32,HV=64  uniform         0.463       0.462       0.674  1.00x    1.46x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=16384,H=32,HV=64  skewed          0.448       0.442       0.673  0.99x    1.50x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=16384,H=32,HV=64  random          0.455       0.450       0.678  0.99x    1.49x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=32768,H=32,HV=64  uniform         0.830       0.820       1.266  0.99x    1.53x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=32768,H=32,HV=64  skewed          0.815       0.775       1.254  0.95x    1.54x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=32768,H=32,HV=64  random          0.812       0.800       1.275  0.98x    1.57x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=1024,H=32,HV=64   uniform         0.121       0.135       0.121  1.12x    1.00x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=1024,H=32,HV=64   skewed          0.115       0.126       0.118  1.10x    1.03x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=1024,H=32,HV=64   random          0.125       0.139       0.130  1.11x    1.04x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=2048,H=32,HV=64   uniform         0.146       0.160       0.155  1.10x    1.06x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=2048,H=32,HV=64   skewed          0.147       0.158       0.159  1.07x    1.08x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=2048,H=32,HV=64   random          0.156       0.168       0.168  1.07x    1.08x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=4096,H=32,HV=64   uniform         0.197       0.208       0.239  1.06x    1.21x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=4096,H=32,HV=64   skewed          0.182       0.196       0.229  1.08x    1.26x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=4096,H=32,HV=64   random          0.209       0.218       0.242  1.04x    1.16x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=8192,H=32,HV=64   uniform         0.290       0.297       0.381  1.02x    1.31x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=8192,H=32,HV=64   skewed          0.275       0.280       0.378  1.02x    1.38x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=8192,H=32,HV=64   random          0.319       0.318       0.396  1.00x    1.24x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=16384,H=32,HV=64  uniform         0.477       0.479       0.685  1.00x    1.44x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=16384,H=32,HV=64  skewed          0.450       0.444       0.673  0.99x    1.49x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=16384,H=32,HV=64  random          0.527       0.521       0.714  0.99x    1.35x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=32768,H=32,HV=64  uniform         0.839       0.829       1.265  0.99x    1.51x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=32768,H=32,HV=64  skewed          0.819       0.788       1.259  0.96x    1.54x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=32768,H=32,HV=64  random          0.938       0.929       1.344  0.99x    1.43x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=1024,H=32,HV=64   uniform         0.121       0.136       0.114  1.12x    0.94x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=1024,H=32,HV=64   skewed          0.145       0.160       0.128  1.11x    0.89x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=1024,H=32,HV=64   random          0.143       0.158       0.131  1.10x    0.92x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=2048,H=32,HV=64   uniform         0.151       0.163       0.154  1.08x    1.02x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=2048,H=32,HV=64   skewed          0.171       0.185       0.179  1.08x    1.05x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=2048,H=32,HV=64   random          0.167       0.183       0.169  1.09x    1.01x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=4096,H=32,HV=64   uniform         0.192       0.205       0.229  1.07x    1.19x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=4096,H=32,HV=64   skewed          0.216       0.233       0.253  1.08x    1.17x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=4096,H=32,HV=64   random          0.210       0.225       0.237  1.07x    1.13x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=8192,H=32,HV=64   uniform         0.279       0.286       0.378  1.03x    1.36x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=8192,H=32,HV=64   skewed          0.300       0.315       0.392  1.05x    1.31x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=8192,H=32,HV=64   random          0.299       0.308       0.390  1.03x    1.31x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=16384,H=32,HV=64  uniform         0.451       0.450       0.672  1.00x    1.49x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=16384,H=32,HV=64  skewed          0.475       0.477       0.676  1.00x    1.42x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=16384,H=32,HV=64  random          0.475       0.473       0.692  1.00x    1.46x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=32768,H=32,HV=64  uniform         0.797       0.780       1.246  0.98x    1.56x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=32768,H=32,HV=64  skewed          0.826       0.815       1.267  0.99x    1.53x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=32768,H=32,HV=64  random          0.833       0.829       1.281  0.99x    1.54x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=1024,H=32,HV=64   uniform         0.164       0.184       0.125  1.12x    0.76x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=1024,H=32,HV=64   skewed          0.175       0.195       0.140  1.11x    0.80x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=1024,H=32,HV=64   random          0.172       0.191       0.144  1.11x    0.84x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=2048,H=32,HV=64   uniform         0.194       0.212       0.170  1.10x    0.88x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=2048,H=32,HV=64   skewed          0.189       0.208       0.167  1.10x    0.88x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=2048,H=32,HV=64   random          0.194       0.214       0.180  1.10x    0.93x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=4096,H=32,HV=64   uniform         0.243       0.262       0.257  1.08x    1.06x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=4096,H=32,HV=64   skewed          0.237       0.253       0.244  1.07x    1.03x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=4096,H=32,HV=64   random          0.239       0.256       0.253  1.07x    1.06x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=8192,H=32,HV=64   uniform         0.328       0.341       0.402  1.04x    1.22x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=8192,H=32,HV=64   skewed          0.323       0.342       0.401  1.06x    1.24x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=8192,H=32,HV=64   random          0.329       0.343       0.404  1.04x    1.23x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=16384,H=32,HV=64  uniform         0.505       0.507       0.684  1.00x    1.36x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=16384,H=32,HV=64  skewed          0.492       0.497       0.679  1.01x    1.38x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=16384,H=32,HV=64  random          0.499       0.503       0.688  1.01x    1.38x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=32768,H=32,HV=64  uniform         0.856       0.847       1.264  0.99x    1.48x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=32768,H=32,HV=64  skewed          0.847       0.841       1.266  0.99x    1.50x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=32768,H=32,HV=64  random          0.839       0.836       1.269  1.00x    1.51x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=1024,H=32,HV=64   uniform         0.196       0.220       0.142  1.12x    0.73x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=1024,H=32,HV=64   skewed          0.207       0.232       0.155  1.12x    0.75x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=1024,H=32,HV=64   random          0.203       0.226       0.155  1.12x    0.76x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=2048,H=32,HV=64   uniform         0.227       0.252       0.193  1.11x    0.85x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=2048,H=32,HV=64   skewed          0.221       0.245       0.180  1.11x    0.81x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=2048,H=32,HV=64   random          0.227       0.252       0.194  1.11x    0.85x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=4096,H=32,HV=64   uniform         0.268       0.292       0.256  1.09x    0.95x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=4096,H=32,HV=64   skewed          0.271       0.294       0.266  1.09x    0.98x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=4096,H=32,HV=64   random          0.271       0.295       0.260  1.09x    0.96x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=8192,H=32,HV=64   uniform         0.360       0.379       0.426  1.05x    1.18x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=8192,H=32,HV=64   skewed          0.348       0.371       0.402  1.07x    1.15x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=8192,H=32,HV=64   random          0.357       0.380       0.411  1.06x    1.15x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=16384,H=32,HV=64  uniform         0.545       0.547       0.710  1.00x    1.30x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=16384,H=32,HV=64  skewed          0.527       0.540       0.700  1.02x    1.33x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=16384,H=32,HV=64  random          0.528       0.543       0.701  1.03x    1.33x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=32768,H=32,HV=64  uniform         0.889       0.879       1.278  0.99x    1.44x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=32768,H=32,HV=64  skewed          0.873       0.870       1.268  1.00x    1.45x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=32768,H=32,HV=64  random          0.870       0.869       1.279  1.00x    1.47x    0.0e+00    0.000%    0.0e+00     0.000%

  --- H=32, HV=128, D=128 ---
Config                   Dist      Persist(ms)  NonPer(ms)  FLA_vl(ms)   P/NP  P/FLAvl     O diff            O_rel_rmse%    ht diff            ht_rel_rmse%
-----------------------------------------------------------------------------------------------------------------------------------------------------------
N=5,T=1024,H=32,HV=128   uniform         0.135       0.145       0.160  1.08x    1.19x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=1024,H=32,HV=128   skewed          0.122       0.130       0.145  1.07x    1.19x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=1024,H=32,HV=128   random          0.129       0.139       0.158  1.08x    1.23x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=2048,H=32,HV=128   uniform         0.180       0.189       0.231  1.05x    1.29x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=2048,H=32,HV=128   skewed          0.165       0.175       0.219  1.06x    1.33x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=2048,H=32,HV=128   random          0.169       0.179       0.230  1.06x    1.36x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=4096,H=32,HV=128   uniform         0.272       0.278       0.379  1.02x    1.39x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=4096,H=32,HV=128   skewed          0.253       0.262       0.373  1.03x    1.48x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=4096,H=32,HV=128   random          0.253       0.260       0.379  1.03x    1.50x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=8192,H=32,HV=128   uniform         0.456       0.461       0.676  1.01x    1.48x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=8192,H=32,HV=128   skewed          0.430       0.431       0.667  1.00x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=8192,H=32,HV=128   random          0.428       0.428       0.674  1.00x    1.58x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=16384,H=32,HV=128  uniform         0.819       0.821       1.268  1.00x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=16384,H=32,HV=128  skewed          0.763       0.745       1.249  0.98x    1.64x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=16384,H=32,HV=128  random          0.769       0.760       1.258  0.99x    1.64x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=32768,H=32,HV=128  uniform         1.531       1.526       2.441  1.00x    1.59x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=32768,H=32,HV=128  skewed          1.437       1.395       2.410  0.97x    1.68x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=32768,H=32,HV=128  random          1.457       1.427       2.423  0.98x    1.66x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=1024,H=32,HV=128   uniform         0.147       0.161       0.155  1.09x    1.06x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=1024,H=32,HV=128   skewed          0.169       0.183       0.180  1.08x    1.06x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=1024,H=32,HV=128   random          0.162       0.177       0.166  1.09x    1.03x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=2048,H=32,HV=128   uniform         0.190       0.203       0.231  1.07x    1.22x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=2048,H=32,HV=128   skewed          0.212       0.227       0.245  1.07x    1.16x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=2048,H=32,HV=128   random          0.209       0.222       0.240  1.07x    1.15x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=4096,H=32,HV=128   uniform         0.274       0.285       0.379  1.04x    1.38x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=4096,H=32,HV=128   skewed          0.293       0.307       0.390  1.05x    1.33x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=4096,H=32,HV=128   random          0.300       0.311       0.411  1.04x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=8192,H=32,HV=128   uniform         0.445       0.450       0.676  1.01x    1.52x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=8192,H=32,HV=128   skewed          0.469       0.479       0.708  1.02x    1.51x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=8192,H=32,HV=128   random          0.472       0.481       0.685  1.02x    1.45x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=16384,H=32,HV=128  uniform         0.784       0.780       1.254  0.99x    1.60x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=16384,H=32,HV=128  skewed          0.810       0.813       1.267  1.00x    1.56x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=16384,H=32,HV=128  random          0.809       0.813       1.266  1.00x    1.56x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=32768,H=32,HV=128  uniform         1.458       1.437       2.409  0.99x    1.65x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=32768,H=32,HV=128  skewed          1.475       1.472       2.424  1.00x    1.64x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=32768,H=32,HV=128  random          1.489       1.470       2.448  0.99x    1.64x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=1024,H=32,HV=128  uniform         0.192       0.211       0.170  1.10x    0.89x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=1024,H=32,HV=128  skewed          0.189       0.208       0.167  1.10x    0.88x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=1024,H=32,HV=128  random          0.192       0.212       0.181  1.10x    0.94x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=2048,H=32,HV=128  uniform         0.240       0.259       0.257  1.08x    1.07x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=2048,H=32,HV=128  skewed          0.235       0.254       0.242  1.08x    1.03x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=2048,H=32,HV=128  random          0.235       0.255       0.253  1.09x    1.07x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=4096,H=32,HV=128  uniform         0.322       0.338       0.402  1.05x    1.25x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=4096,H=32,HV=128  skewed          0.321       0.339       0.393  1.06x    1.22x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=4096,H=32,HV=128  random          0.324       0.341       0.402  1.05x    1.24x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=8192,H=32,HV=128  uniform         0.497       0.503       0.686  1.01x    1.38x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=8192,H=32,HV=128  skewed          0.494       0.509       0.700  1.03x    1.42x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=8192,H=32,HV=128  random          0.501       0.512       0.698  1.02x    1.39x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=16384,H=32,HV=128 uniform         0.844       0.845       1.268  1.00x    1.50x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=16384,H=32,HV=128 skewed          0.839       0.840       1.275  1.00x    1.52x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=16384,H=32,HV=128 random          0.845       0.849       1.277  1.00x    1.51x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=32768,H=32,HV=128 uniform         1.533       1.514       2.438  0.99x    1.59x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=32768,H=32,HV=128 skewed          1.506       1.490       2.425  0.99x    1.61x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=32768,H=32,HV=128 random          1.524       1.520       2.444  1.00x    1.60x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=1024,H=32,HV=128  uniform         0.223       0.246       0.191  1.10x    0.86x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=1024,H=32,HV=128  skewed          0.217       0.239       0.178  1.10x    0.82x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=1024,H=32,HV=128  random          0.225       0.250       0.195  1.11x    0.87x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=2048,H=32,HV=128  uniform         0.262       0.287       0.253  1.09x    0.97x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=2048,H=32,HV=128  skewed          0.263       0.287       0.257  1.09x    0.98x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=2048,H=32,HV=128  random          0.267       0.290       0.268  1.09x    1.00x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=4096,H=32,HV=128  uniform         0.349       0.373       0.412  1.07x    1.18x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=4096,H=32,HV=128  skewed          0.337       0.357       0.392  1.06x    1.16x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=4096,H=32,HV=128  random          0.354       0.374       0.412  1.06x    1.16x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=8192,H=32,HV=128  uniform         0.523       0.536       0.695  1.02x    1.33x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=8192,H=32,HV=128  skewed          0.506       0.521       0.688  1.03x    1.36x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=8192,H=32,HV=128  random          0.524       0.540       0.702  1.03x    1.34x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=16384,H=32,HV=128 uniform         0.872       0.886       1.289  1.02x    1.48x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=16384,H=32,HV=128 skewed          0.852       0.859       1.267  1.01x    1.49x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=16384,H=32,HV=128 random          0.875       0.880       1.292  1.01x    1.48x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=32768,H=32,HV=128 uniform         1.533       1.543       2.433  1.01x    1.59x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=32768,H=32,HV=128 skewed          1.520       1.527       2.446  1.00x    1.61x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=32768,H=32,HV=128 random          1.562       1.563       2.462  1.00x    1.58x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=1024,H=32,HV=128  uniform         0.231       0.259       0.172  1.12x    0.74x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=1024,H=32,HV=128  skewed          0.267       0.296       0.199  1.11x    0.75x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=1024,H=32,HV=128  random          0.267       0.298       0.206  1.12x    0.77x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=2048,H=32,HV=128  uniform         0.277       0.305       0.246  1.10x    0.89x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=2048,H=32,HV=128  skewed          0.319       0.350       0.296  1.10x    0.93x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=2048,H=32,HV=128  random          0.309       0.340       0.272  1.10x    0.88x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=4096,H=32,HV=128  uniform         0.358       0.387       0.399  1.08x    1.11x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=4096,H=32,HV=128  skewed          0.400       0.432       0.440  1.08x    1.10x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=4096,H=32,HV=128  random          0.390       0.421       0.416  1.08x    1.07x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=8192,H=32,HV=128  uniform         0.524       0.548       0.690  1.04x    1.32x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=8192,H=32,HV=128  skewed          0.562       0.590       0.722  1.05x    1.29x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=8192,H=32,HV=128  random          0.560       0.585       0.711  1.04x    1.27x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=16384,H=32,HV=128 uniform         0.863       0.877       1.272  1.02x    1.47x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=16384,H=32,HV=128 skewed          0.897       0.909       1.289  1.01x    1.44x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=16384,H=32,HV=128 random          0.893       0.915       1.291  1.02x    1.44x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=32768,H=32,HV=128 uniform         1.531       1.527       2.425  1.00x    1.58x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=32768,H=32,HV=128 skewed          1.584       1.587       2.472  1.00x    1.56x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=32768,H=32,HV=128 random          1.539       1.544       2.439  1.00x    1.58x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=1024,H=32,HV=128  uniform         0.309       0.348       0.195  1.13x    0.63x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=1024,H=32,HV=128  skewed          0.319       0.360       0.221  1.13x    0.69x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=1024,H=32,HV=128  random          0.318       0.361       0.230  1.13x    0.72x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=2048,H=32,HV=128  uniform         0.359       0.398       0.282  1.11x    0.78x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=2048,H=32,HV=128  skewed          0.349       0.389       0.271  1.11x    0.77x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=2048,H=32,HV=128  random          0.357       0.400       0.302  1.12x    0.85x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=4096,H=32,HV=128  uniform         0.449       0.492       0.455  1.10x    1.01x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=4096,H=32,HV=128  skewed          0.437       0.475       0.428  1.09x    0.98x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=4096,H=32,HV=128  random          0.444       0.482       0.441  1.08x    0.99x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=8192,H=32,HV=128  uniform         0.611       0.648       0.736  1.06x    1.20x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=8192,H=32,HV=128  skewed          0.607       0.645       0.738  1.06x    1.22x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=8192,H=32,HV=128  random          0.615       0.649       0.736  1.06x    1.20x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=16384,H=32,HV=128 uniform         0.960       0.977       1.293  1.02x    1.35x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=16384,H=32,HV=128 skewed          0.932       0.960       1.291  1.03x    1.38x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=16384,H=32,HV=128 random          0.946       0.973       1.308  1.03x    1.38x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=32768,H=32,HV=128 uniform         1.632       1.643       2.463  1.01x    1.51x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=32768,H=32,HV=128 skewed          1.625       1.631       2.460  1.00x    1.51x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=32768,H=32,HV=128 random          1.602       1.616       2.459  1.01x    1.53x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=1024,H=32,HV=128  uniform         0.373       0.423       0.224  1.13x    0.60x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=1024,H=32,HV=128  skewed          0.386       0.435       0.252  1.13x    0.65x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=1024,H=32,HV=128  random          0.383       0.434       0.249  1.13x    0.65x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=2048,H=32,HV=128  uniform         0.428       0.479       0.329  1.12x    0.77x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=2048,H=32,HV=128  skewed          0.415       0.468       0.297  1.13x    0.72x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=2048,H=32,HV=128  random          0.421       0.473       0.318  1.12x    0.76x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=4096,H=32,HV=128  uniform         0.504       0.555       0.452  1.10x    0.90x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=4096,H=32,HV=128  skewed          0.508       0.557       0.467  1.10x    0.92x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=4096,H=32,HV=128  random          0.503       0.554       0.464  1.10x    0.92x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=8192,H=32,HV=128  uniform         0.679       0.726       0.782  1.07x    1.15x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=8192,H=32,HV=128  skewed          0.661       0.711       0.733  1.08x    1.11x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=8192,H=32,HV=128  random          0.673       0.718       0.754  1.07x    1.12x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=16384,H=32,HV=128 uniform         1.035       1.056       1.352  1.02x    1.31x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=16384,H=32,HV=128 skewed          1.000       1.040       1.337  1.04x    1.34x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=16384,H=32,HV=128 random          1.010       1.046       1.336  1.04x    1.32x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=32768,H=32,HV=128 uniform         1.706       1.724       2.484  1.01x    1.46x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=32768,H=32,HV=128 skewed          1.673       1.682       2.469  1.01x    1.48x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=32768,H=32,HV=128 random          1.671       1.693       2.483  1.01x    1.49x    0.0e+00    0.000%    0.0e+00     0.000%

  --- H=64, HV=64, D=128 ---
Config                   Dist      Persist(ms)  NonPer(ms)  FLA_vl(ms)   P/NP  P/FLAvl     O diff            O_rel_rmse%    ht diff            ht_rel_rmse%
-----------------------------------------------------------------------------------------------------------------------------------------------------------
N=5,T=1024,H=64,HV=64    uniform         0.085       0.090       0.110  1.06x    1.29x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=1024,H=64,HV=64    skewed          0.070       0.073       0.107  1.04x    1.53x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=1024,H=64,HV=64    random          0.076       0.079       0.108  1.03x    1.42x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=2048,H=64,HV=64    uniform         0.115       0.120       0.145  1.04x    1.25x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=2048,H=64,HV=64    skewed          0.097       0.099       0.138  1.02x    1.42x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=2048,H=64,HV=64    random          0.102       0.108       0.144  1.05x    1.41x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=4096,H=64,HV=64    uniform         0.170       0.174       0.220  1.02x    1.30x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=4096,H=64,HV=64    skewed          0.152       0.153       0.218  1.01x    1.44x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=4096,H=64,HV=64    random          0.148       0.153       0.220  1.03x    1.48x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=8192,H=64,HV=64    uniform         0.276       0.277       0.378  1.01x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=8192,H=64,HV=64    skewed          0.246       0.250       0.369  1.01x    1.50x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=8192,H=64,HV=64    random          0.235       0.238       0.369  1.01x    1.57x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=16384,H=64,HV=64   uniform         0.491       0.487       0.684  0.99x    1.39x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=16384,H=64,HV=64   skewed          0.425       0.427       0.664  1.00x    1.56x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=16384,H=64,HV=64   random          0.433       0.420       0.672  0.97x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=32768,H=64,HV=64   uniform         0.911       0.900       1.285  0.99x    1.41x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=32768,H=64,HV=64   skewed          0.802       0.777       1.249  0.97x    1.56x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=32768,H=64,HV=64   random          0.823       0.800       1.265  0.97x    1.54x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=1024,H=64,HV=64    uniform         0.087       0.094       0.108  1.09x    1.24x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=1024,H=64,HV=64    skewed          0.093       0.100       0.118  1.08x    1.27x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=1024,H=64,HV=64    random          0.096       0.103       0.107  1.07x    1.12x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=2048,H=64,HV=64    uniform         0.114       0.121       0.144  1.06x    1.26x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=2048,H=64,HV=64    skewed          0.124       0.128       0.156  1.03x    1.26x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=2048,H=64,HV=64    random          0.127       0.132       0.151  1.04x    1.19x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=4096,H=64,HV=64    uniform         0.162       0.168       0.219  1.04x    1.35x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=4096,H=64,HV=64    skewed          0.167       0.173       0.228  1.04x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=4096,H=64,HV=64    random          0.186       0.187       0.231  1.01x    1.24x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=8192,H=64,HV=64    uniform         0.251       0.257       0.371  1.02x    1.48x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=8192,H=64,HV=64    skewed          0.257       0.257       0.380  1.00x    1.48x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=8192,H=64,HV=64    random          0.292       0.292       0.389  1.00x    1.33x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=16384,H=64,HV=64   uniform         0.432       0.435       0.670  1.01x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=16384,H=64,HV=64   skewed          0.440       0.442       0.668  1.01x    1.52x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=16384,H=64,HV=64   random          0.500       0.498       0.691  1.00x    1.38x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=32768,H=64,HV=64   uniform         0.795       0.792       1.249  1.00x    1.57x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=32768,H=64,HV=64   skewed          0.807       0.783       1.252  0.97x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=32768,H=64,HV=64   random          0.908       0.896       1.300  0.99x    1.43x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=1024,H=64,HV=64   uniform         0.108       0.118       0.111  1.09x    1.03x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=1024,H=64,HV=64   skewed          0.100       0.109       0.107  1.08x    1.06x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=1024,H=64,HV=64   random          0.108       0.118       0.119  1.10x    1.10x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=2048,H=64,HV=64   uniform         0.137       0.148       0.158  1.08x    1.15x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=2048,H=64,HV=64   skewed          0.135       0.142       0.150  1.05x    1.11x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=2048,H=64,HV=64   random          0.136       0.146       0.156  1.08x    1.15x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=4096,H=64,HV=64   uniform         0.187       0.195       0.231  1.04x    1.23x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=4096,H=64,HV=64   skewed          0.176       0.184       0.231  1.05x    1.31x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=4096,H=64,HV=64   random          0.186       0.196       0.233  1.05x    1.26x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=8192,H=64,HV=64   uniform         0.277       0.284       0.378  1.02x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=8192,H=64,HV=64   skewed          0.276       0.281       0.383  1.02x    1.39x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=8192,H=64,HV=64   random          0.276       0.280       0.382  1.02x    1.39x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=16384,H=64,HV=64  uniform         0.461       0.464       0.676  1.01x    1.47x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=16384,H=64,HV=64  skewed          0.444       0.444       0.672  1.00x    1.51x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=16384,H=64,HV=64  random          0.451       0.454       0.677  1.01x    1.50x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=32768,H=64,HV=64  uniform         0.827       0.824       1.266  1.00x    1.53x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=32768,H=64,HV=64  skewed          0.811       0.783       1.253  0.97x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=32768,H=64,HV=64  random          0.807       0.806       1.272  1.00x    1.58x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=1024,H=64,HV=64   uniform         0.124       0.138       0.121  1.11x    0.97x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=1024,H=64,HV=64   skewed          0.117       0.128       0.116  1.10x    1.00x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=1024,H=64,HV=64   random          0.127       0.141       0.131  1.11x    1.03x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=2048,H=64,HV=64   uniform         0.151       0.163       0.157  1.08x    1.04x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=2048,H=64,HV=64   skewed          0.150       0.159       0.159  1.06x    1.05x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=2048,H=64,HV=64   random          0.159       0.170       0.169  1.07x    1.06x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=4096,H=64,HV=64   uniform         0.200       0.211       0.240  1.06x    1.20x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=4096,H=64,HV=64   skewed          0.186       0.198       0.230  1.06x    1.24x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=4096,H=64,HV=64   random          0.213       0.222       0.243  1.04x    1.14x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=8192,H=64,HV=64   uniform         0.292       0.302       0.382  1.03x    1.31x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=8192,H=64,HV=64   skewed          0.278       0.282       0.378  1.02x    1.36x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=8192,H=64,HV=64   random          0.319       0.321       0.394  1.01x    1.24x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=16384,H=64,HV=64  uniform         0.477       0.482       0.685  1.01x    1.44x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=16384,H=64,HV=64  skewed          0.449       0.449       0.672  1.00x    1.50x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=16384,H=64,HV=64  random          0.525       0.525       0.717  1.00x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=32768,H=64,HV=64  uniform         0.834       0.834       1.265  1.00x    1.52x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=32768,H=64,HV=64  skewed          0.814       0.792       1.261  0.97x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=32768,H=64,HV=64  random          0.938       0.934       1.349  1.00x    1.44x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=1024,H=64,HV=64   uniform         0.125       0.137       0.114  1.10x    0.91x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=1024,H=64,HV=64   skewed          0.147       0.164       0.129  1.11x    0.88x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=1024,H=64,HV=64   random          0.145       0.160       0.131  1.11x    0.91x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=2048,H=64,HV=64   uniform         0.155       0.167       0.154  1.08x    0.99x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=2048,H=64,HV=64   skewed          0.172       0.187       0.180  1.09x    1.05x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=2048,H=64,HV=64   random          0.169       0.185       0.168  1.09x    1.00x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=4096,H=64,HV=64   uniform         0.195       0.208       0.229  1.07x    1.18x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=4096,H=64,HV=64   skewed          0.218       0.236       0.252  1.08x    1.16x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=4096,H=64,HV=64   random          0.213       0.228       0.238  1.07x    1.11x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=8192,H=64,HV=64   uniform         0.279       0.289       0.379  1.03x    1.36x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=8192,H=64,HV=64   skewed          0.303       0.318       0.392  1.05x    1.29x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=8192,H=64,HV=64   random          0.301       0.312       0.390  1.04x    1.30x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=16384,H=64,HV=64  uniform         0.450       0.455       0.673  1.01x    1.50x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=16384,H=64,HV=64  skewed          0.477       0.482       0.676  1.01x    1.42x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=16384,H=64,HV=64  random          0.475       0.477       0.686  1.00x    1.45x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=32768,H=64,HV=64  uniform         0.792       0.787       1.249  0.99x    1.58x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=32768,H=64,HV=64  skewed          0.821       0.818       1.267  1.00x    1.54x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=32768,H=64,HV=64  random          0.833       0.835       1.282  1.00x    1.54x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=1024,H=64,HV=64   uniform         0.167       0.186       0.127  1.11x    0.76x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=1024,H=64,HV=64   skewed          0.175       0.195       0.139  1.11x    0.79x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=1024,H=64,HV=64   random          0.173       0.191       0.144  1.11x    0.83x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=2048,H=64,HV=64   uniform         0.198       0.217       0.170  1.10x    0.86x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=2048,H=64,HV=64   skewed          0.191       0.210       0.167  1.10x    0.88x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=2048,H=64,HV=64   random          0.196       0.215       0.181  1.09x    0.92x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=4096,H=64,HV=64   uniform         0.245       0.265       0.257  1.08x    1.05x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=4096,H=64,HV=64   skewed          0.239       0.254       0.244  1.06x    1.02x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=4096,H=64,HV=64   random          0.240       0.258       0.255  1.07x    1.06x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=8192,H=64,HV=64   uniform         0.334       0.345       0.402  1.03x    1.20x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=8192,H=64,HV=64   skewed          0.326       0.344       0.403  1.05x    1.23x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=8192,H=64,HV=64   random          0.332       0.347       0.403  1.05x    1.22x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=16384,H=64,HV=64  uniform         0.505       0.514       0.685  1.02x    1.36x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=16384,H=64,HV=64  skewed          0.498       0.504       0.679  1.01x    1.36x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=16384,H=64,HV=64  random          0.499       0.508       0.689  1.02x    1.38x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=32768,H=64,HV=64  uniform         0.847       0.853       1.266  1.01x    1.49x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=32768,H=64,HV=64  skewed          0.841       0.847       1.265  1.01x    1.50x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=32768,H=64,HV=64  random          0.837       0.843       1.268  1.01x    1.51x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=1024,H=64,HV=64   uniform         0.198       0.221       0.142  1.12x    0.72x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=1024,H=64,HV=64   skewed          0.208       0.232       0.156  1.12x    0.75x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=1024,H=64,HV=64   random          0.204       0.227       0.157  1.11x    0.77x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=2048,H=64,HV=64   uniform         0.231       0.256       0.194  1.11x    0.84x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=2048,H=64,HV=64   skewed          0.223       0.246       0.181  1.11x    0.81x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=2048,H=64,HV=64   random          0.229       0.254       0.193  1.11x    0.84x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=4096,H=64,HV=64   uniform         0.272       0.297       0.255  1.09x    0.94x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=4096,H=64,HV=64   skewed          0.273       0.297       0.267  1.09x    0.98x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=4096,H=64,HV=64   random          0.272       0.296       0.259  1.09x    0.95x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=8192,H=64,HV=64   uniform         0.365       0.384       0.425  1.05x    1.16x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=8192,H=64,HV=64   skewed          0.349       0.376       0.402  1.08x    1.15x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=8192,H=64,HV=64   random          0.359       0.383       0.409  1.07x    1.14x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=16384,H=64,HV=64  uniform         0.548       0.556       0.710  1.02x    1.30x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=16384,H=64,HV=64  skewed          0.534       0.545       0.700  1.02x    1.31x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=16384,H=64,HV=64  random          0.529       0.547       0.703  1.03x    1.33x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=32768,H=64,HV=64  uniform         0.882       0.886       1.278  1.01x    1.45x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=32768,H=64,HV=64  skewed          0.871       0.878       1.267  1.01x    1.45x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=32768,H=64,HV=64  random          0.868       0.876       1.282  1.01x    1.48x    0.0e+00    0.000%    0.0e+00     0.000%

  --- H=64, HV=128, D=128 ---
Config                   Dist      Persist(ms)  NonPer(ms)  FLA_vl(ms)   P/NP  P/FLAvl     O diff            O_rel_rmse%    ht diff            ht_rel_rmse%
-----------------------------------------------------------------------------------------------------------------------------------------------------------
N=5,T=1024,H=64,HV=128   uniform         0.136       0.146       0.160  1.07x    1.17x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=1024,H=64,HV=128   skewed          0.124       0.132       0.146  1.07x    1.18x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=1024,H=64,HV=128   random          0.131       0.140       0.162  1.07x    1.24x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=2048,H=64,HV=128   uniform         0.183       0.191       0.233  1.04x    1.27x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=2048,H=64,HV=128   skewed          0.167       0.175       0.220  1.05x    1.31x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=2048,H=64,HV=128   random          0.171       0.181       0.230  1.06x    1.34x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=4096,H=64,HV=128   uniform         0.277       0.280       0.378  1.01x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=4096,H=64,HV=128   skewed          0.257       0.263       0.372  1.02x    1.45x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=4096,H=64,HV=128   random          0.257       0.261       0.379  1.02x    1.47x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=8192,H=64,HV=128   uniform         0.462       0.461       0.676  1.00x    1.46x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=8192,H=64,HV=128   skewed          0.436       0.432       0.668  0.99x    1.53x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=8192,H=64,HV=128   random          0.435       0.429       0.673  0.99x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=16384,H=64,HV=128  uniform         0.830       0.820       1.269  0.99x    1.53x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=16384,H=64,HV=128  skewed          0.775       0.746       1.250  0.96x    1.61x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=16384,H=64,HV=128  random          0.781       0.761       1.257  0.97x    1.61x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=32768,H=64,HV=128  uniform         1.554       1.525       2.441  0.98x    1.57x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=32768,H=64,HV=128  skewed          1.460       1.396       2.409  0.96x    1.65x    0.0e+00    0.000%    0.0e+00     0.000%
N=5,T=32768,H=64,HV=128  random          1.480       1.427       2.424  0.96x    1.64x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=1024,H=64,HV=128   uniform         0.150       0.163       0.156  1.09x    1.04x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=1024,H=64,HV=128   skewed          0.171       0.185       0.179  1.09x    1.05x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=1024,H=64,HV=128   random          0.163       0.177       0.167  1.09x    1.03x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=2048,H=64,HV=128   uniform         0.193       0.205       0.235  1.07x    1.22x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=2048,H=64,HV=128   skewed          0.214       0.228       0.245  1.06x    1.14x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=2048,H=64,HV=128   random          0.212       0.224       0.240  1.06x    1.13x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=4096,H=64,HV=128   uniform         0.278       0.285       0.379  1.03x    1.36x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=4096,H=64,HV=128   skewed          0.296       0.308       0.390  1.04x    1.32x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=4096,H=64,HV=128   random          0.305       0.313       0.390  1.02x    1.28x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=8192,H=64,HV=128   uniform         0.452       0.451       0.674  1.00x    1.49x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=8192,H=64,HV=128   skewed          0.479       0.480       0.688  1.00x    1.44x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=8192,H=64,HV=128   random          0.478       0.482       0.684  1.01x    1.43x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=16384,H=64,HV=128  uniform         0.797       0.780       1.253  0.98x    1.57x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=16384,H=64,HV=128  skewed          0.822       0.814       1.267  0.99x    1.54x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=16384,H=64,HV=128  random          0.822       0.813       1.266  0.99x    1.54x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=32768,H=64,HV=128  uniform         1.490       1.439       2.408  0.97x    1.62x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=32768,H=64,HV=128  skewed          1.496       1.474       2.423  0.99x    1.62x    0.0e+00    0.000%    0.0e+00     0.000%
N=8,T=32768,H=64,HV=128  random          1.512       1.472       2.445  0.97x    1.62x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=1024,H=64,HV=128  uniform         0.194       0.213       0.171  1.10x    0.88x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=1024,H=64,HV=128  skewed          0.190       0.208       0.166  1.10x    0.87x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=1024,H=64,HV=128  random          0.194       0.214       0.180  1.10x    0.93x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=2048,H=64,HV=128  uniform         0.241       0.261       0.257  1.08x    1.07x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=2048,H=64,HV=128  skewed          0.236       0.255       0.243  1.08x    1.03x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=2048,H=64,HV=128  random          0.238       0.257       0.250  1.08x    1.05x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=4096,H=64,HV=128  uniform         0.327       0.340       0.404  1.04x    1.23x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=4096,H=64,HV=128  skewed          0.324       0.339       0.394  1.05x    1.22x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=4096,H=64,HV=128  random          0.329       0.342       0.402  1.04x    1.22x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=8192,H=64,HV=128  uniform         0.505       0.507       0.686  1.00x    1.36x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=8192,H=64,HV=128  skewed          0.502       0.511       0.699  1.02x    1.39x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=8192,H=64,HV=128  random          0.508       0.514       0.698  1.01x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=16384,H=64,HV=128 uniform         0.856       0.847       1.268  0.99x    1.48x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=16384,H=64,HV=128 skewed          0.852       0.845       1.274  0.99x    1.50x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=16384,H=64,HV=128 random          0.857       0.850       1.278  0.99x    1.49x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=32768,H=64,HV=128 uniform         1.554       1.514       2.440  0.97x    1.57x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=32768,H=64,HV=128 skewed          1.531       1.491       2.424  0.97x    1.58x    0.0e+00    0.000%    0.0e+00     0.000%
N=10,T=32768,H=64,HV=128 random          1.547       1.522       2.443  0.98x    1.58x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=1024,H=64,HV=128  uniform         0.224       0.249       0.191  1.11x    0.85x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=1024,H=64,HV=128  skewed          0.218       0.240       0.178  1.10x    0.82x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=1024,H=64,HV=128  random          0.227       0.251       0.195  1.11x    0.86x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=2048,H=64,HV=128  uniform         0.265       0.289       0.253  1.09x    0.95x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=2048,H=64,HV=128  skewed          0.264       0.288       0.258  1.09x    0.97x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=2048,H=64,HV=128  random          0.269       0.292       0.269  1.09x    1.00x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=4096,H=64,HV=128  uniform         0.354       0.374       0.413  1.06x    1.17x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=4096,H=64,HV=128  skewed          0.340       0.358       0.392  1.05x    1.15x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=4096,H=64,HV=128  random          0.358       0.377       0.411  1.05x    1.15x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=8192,H=64,HV=128  uniform         0.533       0.542       0.693  1.02x    1.30x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=8192,H=64,HV=128  skewed          0.514       0.523       0.688  1.02x    1.34x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=8192,H=64,HV=128  random          0.532       0.543       0.701  1.02x    1.32x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=16384,H=64,HV=128 uniform         0.884       0.886       1.289  1.00x    1.46x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=16384,H=64,HV=128 skewed          0.866       0.863       1.268  1.00x    1.46x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=16384,H=64,HV=128 random          0.888       0.881       1.292  0.99x    1.45x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=32768,H=64,HV=128 uniform         1.555       1.543       2.431  0.99x    1.56x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=32768,H=64,HV=128 skewed          1.545       1.528       2.445  0.99x    1.58x    0.0e+00    0.000%    0.0e+00     0.000%
N=12,T=32768,H=64,HV=128 random          1.583       1.564       2.461  0.99x    1.55x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=1024,H=64,HV=128  uniform         0.232       0.260       0.171  1.12x    0.74x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=1024,H=64,HV=128  skewed          0.267       0.297       0.199  1.11x    0.74x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=1024,H=64,HV=128  random          0.268       0.300       0.205  1.12x    0.77x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=2048,H=64,HV=128  uniform         0.281       0.309       0.246  1.10x    0.88x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=2048,H=64,HV=128  skewed          0.321       0.351       0.295  1.10x    0.92x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=2048,H=64,HV=128  random          0.311       0.342       0.270  1.10x    0.87x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=4096,H=64,HV=128  uniform         0.363       0.389       0.401  1.07x    1.10x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=4096,H=64,HV=128  skewed          0.403       0.433       0.440  1.07x    1.09x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=4096,H=64,HV=128  random          0.394       0.423       0.414  1.07x    1.05x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=8192,H=64,HV=128  uniform         0.531       0.550       0.690  1.04x    1.30x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=8192,H=64,HV=128  skewed          0.569       0.591       0.722  1.04x    1.27x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=8192,H=64,HV=128  random          0.568       0.586       0.710  1.03x    1.25x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=16384,H=64,HV=128 uniform         0.876       0.878       1.272  1.00x    1.45x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=16384,H=64,HV=128 skewed          0.917       0.913       1.288  1.00x    1.40x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=16384,H=64,HV=128 random          0.905       0.917       1.291  1.01x    1.43x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=32768,H=64,HV=128 uniform         1.556       1.529       2.427  0.98x    1.56x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=32768,H=64,HV=128 skewed          1.607       1.588       2.470  0.99x    1.54x    0.0e+00    0.000%    0.0e+00     0.000%
N=16,T=32768,H=64,HV=128 random          1.561       1.547       2.438  0.99x    1.56x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=1024,H=64,HV=128  uniform         0.310       0.349       0.195  1.13x    0.63x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=1024,H=64,HV=128  skewed          0.319       0.360       0.221  1.13x    0.69x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=1024,H=64,HV=128  random          0.320       0.363       0.231  1.14x    0.72x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=2048,H=64,HV=128  uniform         0.361       0.401       0.283  1.11x    0.78x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=2048,H=64,HV=128  skewed          0.351       0.391       0.270  1.11x    0.77x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=2048,H=64,HV=128  random          0.360       0.401       0.299  1.11x    0.83x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=4096,H=64,HV=128  uniform         0.453       0.493       0.453  1.09x    1.00x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=4096,H=64,HV=128  skewed          0.440       0.477       0.427  1.08x    0.97x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=4096,H=64,HV=128  random          0.448       0.484       0.441  1.08x    0.98x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=8192,H=64,HV=128  uniform         0.622       0.651       0.734  1.05x    1.18x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=8192,H=64,HV=128  skewed          0.614       0.646       0.736  1.05x    1.20x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=8192,H=64,HV=128  random          0.622       0.652       0.735  1.05x    1.18x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=16384,H=64,HV=128 uniform         0.973       0.985       1.293  1.01x    1.33x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=16384,H=64,HV=128 skewed          0.947       0.961       1.290  1.02x    1.36x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=16384,H=64,HV=128 random          0.959       0.976       1.309  1.02x    1.37x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=32768,H=64,HV=128 uniform         1.654       1.644       2.459  0.99x    1.49x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=32768,H=64,HV=128 skewed          1.648       1.638       2.459  0.99x    1.49x    0.0e+00    0.000%    0.0e+00     0.000%
N=20,T=32768,H=64,HV=128 random          1.625       1.618       2.456  1.00x    1.51x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=1024,H=64,HV=128  uniform         0.373       0.425       0.225  1.14x    0.60x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=1024,H=64,HV=128  skewed          0.386       0.436       0.251  1.13x    0.65x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=1024,H=64,HV=128  random          0.384       0.436       0.250  1.14x    0.65x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=2048,H=64,HV=128  uniform         0.432       0.483       0.328  1.12x    0.76x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=2048,H=64,HV=128  skewed          0.417       0.469       0.297  1.13x    0.71x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=2048,H=64,HV=128  random          0.423       0.475       0.317  1.12x    0.75x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=4096,H=64,HV=128  uniform         0.508       0.559       0.451  1.10x    0.89x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=4096,H=64,HV=128  skewed          0.512       0.558       0.466  1.09x    0.91x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=4096,H=64,HV=128  random          0.507       0.556       0.464  1.10x    0.92x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=8192,H=64,HV=128  uniform         0.688       0.729       0.782  1.06x    1.14x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=8192,H=64,HV=128  skewed          0.666       0.712       0.734  1.07x    1.10x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=8192,H=64,HV=128  random          0.681       0.721       0.755  1.06x    1.11x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=16384,H=64,HV=128 uniform         1.058       1.066       1.349  1.01x    1.28x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=16384,H=64,HV=128 skewed          1.015       1.043       1.337  1.03x    1.32x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=16384,H=64,HV=128 random          1.024       1.050       1.335  1.03x    1.30x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=32768,H=64,HV=128 uniform         1.730       1.725       2.482  1.00x    1.43x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=32768,H=64,HV=128 skewed          1.705       1.694       2.466  0.99x    1.45x    0.0e+00    0.000%    0.0e+00     0.000%
N=25,T=32768,H=64,HV=128 random          1.696       1.697       2.481  1.00x    1.46x    0.0e+00    0.000%    0.0e+00     0.000%

====================================================================================================
SUMMARY BY MODE
====================================================================================================

  [no_state]  (44 configs)
    Speedup (CuteDSL/FLA):  avg=1.82x  min=1.14x  max=2.25x
    FLA O relative_rms_error% (vs naive): avg=2.4578  max=6.6145
    CuteDSL O relative_rms_error% (vs naive): avg=0.2616  max=1.4093

  [h0_ht]  (44 configs)
    Speedup (CuteDSL/FLA):  avg=1.67x  min=1.00x  max=2.23x
    FLA O relative_rms_error% (vs naive): avg=2.6291  max=5.7301
    FLA Ht relative_rms_error% (vs naive): avg=0.0276  max=0.0580
    CuteDSL O relative_rms_error% (vs naive): avg=0.2348  max=0.2362
    CuteDSL Ht relative_rms_error% (vs naive): avg=0.0276  max=0.0582

  [varlen]  (504 configs)
    Persist vs NonPer:      avg=1.04x  min=0.95x  max=1.14x
    Persist vs FLA varlen:   avg=1.25x  min=0.60x  max=1.68x  (FAIR)
    P vs NP O diff:         max=0.00e+00  (bit-exact=True)
    P vs NP O relative_rms_error: avg=0.0000%  max=0.0000%

Report saved to /root/cuLA/benchmarks/benchmark_report.md
python benchmarks/bench_la_decode_vs_fla.py \
  --heads 32 \
  --num-v-heads 64 \
  --head-dim 128 \
  --batch-sizes 1 2 4 8 16 32 64 128 256


====================================================================================================
  Mode 1: KERNEL-ONLY (pre-allocated buffers, direct kernel dispatch)
  fla: kernel + sum(0) with pre-allocated out=; cute: compiled() with pre-created stream
====================================================================================================
    B |   fla (ms) |  cute (ms) |  speedup |     rel_rmse |  Rel MaxDiff | State rel_rmse
──────────────────────────────────────────────────────────────────────────────────────────
    1 |     0.0313 |     0.0074 |    4.25x |     0.000002 |     0.000020 |   0.00000000
    2 |     0.0317 |     0.0075 |    4.26x |     0.000008 |     0.000139 |   0.00000000
    4 |     0.0328 |     0.0104 |    3.14x |     0.000006 |     0.000139 |   0.00000000
    8 |     0.0325 |     0.0132 |    2.46x |     0.000004 |     0.000101 |   0.00000000
   16 |     0.0354 |     0.0208 |    1.70x |     0.000003 |     0.000101 |   0.00000000
   32 |     0.0590 |     0.0471 |    1.25x |     0.000003 |     0.000097 |   0.00000000
   64 |     0.1019 |     0.0875 |    1.17x |     0.000005 |     0.000182 |   0.00000000
  128 |     0.1884 |     0.1657 |    1.14x |     0.000016 |     0.001092 |   0.00000000
  256 |     0.3618 |     0.3226 |    1.12x |     0.000029 |     0.002183 |   0.00000000

====================================================================================================
  Mode 2: WRAPPER (fused_recurrent_fwd vs linear_attention_decode, full call path)
  fla: alloc o[NK,B,1,HV,V]+ht[B,HV,K,V] + kernel + sum(0); cute: cache lookup + CUstream + kernel
====================================================================================================
    B |   fla (ms) |  cute (ms) |  speedup
──────────────────────────────────────────────────
    1 |     0.0390 |     0.0116 |    3.36x
    2 |     0.0393 |     0.0116 |    3.38x
    4 |     0.0405 |     0.0130 |    3.11x
    8 |     0.0408 |     0.0131 |    3.11x
   16 |     0.0405 |     0.0208 |    1.95x
   32 |     0.0586 |     0.0473 |    1.24x
   64 |     0.1018 |     0.0876 |    1.16x
  128 |     0.1883 |     0.1658 |    1.14x
  256 |     0.3613 |     0.3226 |    1.12x

Notes:
  Kernel-only: both sides use pre-allocated buffers, direct kernel dispatch.
               fla: fused_recurrent_fwd_kernel + torch.sum(o,0,out=) [NK=2 K-blocks].
               cute: compiled() with pre-created stream handle.
  Wrapper:     fla: fused_recurrent_fwd allocs o+ht per call + kernel + o.sum(0).
               cute: linear_attention_decode does cache lookup + CUstream() per call.
  Both modes:  same g_gamma decay, same softmax_scale, state write-back included.

@icavan @KevinZeng08

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces Grouped Value Attention (GVA) support to the lightning attention SM100 operators, allowing the number of value heads (HV) to be greater than the query/key heads (H) as long as it is divisible by H. The changes span the core operator implementation, the benchmark suite, and the test suite. The review feedback identifies critical safety improvements for the CUDA kernels, specifically recommending that input tensors (Q, K, V, initial_state, and state_pool) be made contiguous to prevent silent memory corruption, and that the state_pool size be validated to avoid out-of-bounds memory accesses during variable-length sequence processing.

Comment on lines 3015 to +3027
B, S, H, D = Q.shape
O = torch.zeros_like(Q)
if K.shape != Q.shape:
raise ValueError(f"K must have the same shape as Q, got K={tuple(K.shape)}, Q={tuple(Q.shape)}")
if V.ndim != 4 or V.shape[0] != B or V.shape[1] != S or V.shape[3] != D:
raise ValueError(f"V must have shape (B, S, HV, D), got {tuple(V.shape)}")
HV = V.shape[2]
if HV < H or HV % H != 0:
raise ValueError(f"HV ({HV}) must be >= H ({H}) and divisible by H")
decay = _normalize_gva_decay(decay, H, HV)
if initial_state is not None and initial_state.shape != (B, HV, D, D):
raise ValueError(f"initial_state must have shape {(B, HV, D, D)}, got {tuple(initial_state.shape)}")

O = torch.zeros_like(V)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Custom CUDA kernels using CuTe/Cutlass layouts assume standard contiguous memory strides. If non-contiguous tensors are passed to Q, K, V, or initial_state, the kernel will read/write incorrect memory locations, leading to silent data corruption. Ensuring these tensors are contiguous before passing them to the compiled kernel prevents this issue.

    B, S, H, D = Q.shape
    if K.shape != Q.shape:
        raise ValueError(f"K must have the same shape as Q, got K={tuple(K.shape)}, Q={tuple(Q.shape)}")
    if V.ndim != 4 or V.shape[0] != B or V.shape[1] != S or V.shape[3] != D:
        raise ValueError(f"V must have shape (B, S, HV, D), got {tuple(V.shape)}")
    HV = V.shape[2]
    if HV < H or HV % H != 0:
        raise ValueError(f"HV ({HV}) must be >= H ({H}) and divisible by H")
    decay = _normalize_gva_decay(decay, H, HV)
    if initial_state is not None:
        if initial_state.shape != (B, HV, D, D):
            raise ValueError(f"initial_state must have shape {(B, HV, D, D)}, got {tuple(initial_state.shape)}")
        initial_state = initial_state.contiguous()

    Q = Q.contiguous()
    K = K.contiguous()
    V = V.contiguous()
    O = torch.zeros_like(V)

Comment on lines 3248 to +3264
_, T, H, D = Q.shape
if K.shape != Q.shape:
raise ValueError(f"K must have the same shape as Q, got K={tuple(K.shape)}, Q={tuple(Q.shape)}")
if V.ndim != 4 or V.shape[0] != 1 or V.shape[1] != T or V.shape[3] != D:
raise ValueError(f"V must have shape (1, T, HV, D), got {tuple(V.shape)}")
HV = V.shape[2]
if HV < H or HV % H != 0:
raise ValueError(f"HV ({HV}) must be >= H ({H}) and divisible by H")
decay = _normalize_gva_decay(decay, H, HV)
N = cu_seqlens.shape[0] - 1
O = torch.zeros_like(Q)
O = torch.zeros_like(V)

# Allocate state pool if not provided
if state_pool is None:
state_pool = torch.zeros(N, H, D, D, dtype=torch.float32, device=Q.device)
state_pool = torch.zeros(N, HV, D, D, dtype=torch.float32, device=Q.device)
elif state_pool.ndim != 4 or state_pool.shape[1:] != (HV, D, D):
raise ValueError(f"state_pool must have shape (pool_size, {HV}, {D}, {D}), got {tuple(state_pool.shape)}")
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Like the standard forward pass, the varlen kernel assumes contiguous layouts for Q, K, V, and state_pool. Additionally, if state_pool is provided but its first dimension (pool size) is smaller than the maximum index in initial_state_indices (or N if indices are None), the kernel will perform out-of-bounds memory accesses, leading to undefined behavior or crashes. Adding explicit checks for both pool size and contiguity prevents these critical issues.

    _, T, H, D = Q.shape
    if K.shape != Q.shape:
        raise ValueError(f"K must have the same shape as Q, got K={tuple(K.shape)}, Q={tuple(Q.shape)}")
    if V.ndim != 4 or V.shape[0] != 1 or V.shape[1] != T or V.shape[3] != D:
        raise ValueError(f"V must have shape (1, T, HV, D), got {tuple(V.shape)}")
    HV = V.shape[2]
    if HV < H or HV % H != 0:
        raise ValueError(f"HV ({HV}) must be >= H ({H}) and divisible by H")
    decay = _normalize_gva_decay(decay, H, HV)
    N = cu_seqlens.shape[0] - 1

    Q = Q.contiguous()
    K = K.contiguous()
    V = V.contiguous()
    O = torch.zeros_like(V)

    # Allocate state pool if not provided
    if state_pool is None:
        state_pool = torch.zeros(N, HV, D, D, dtype=torch.float32, device=Q.device)
    elif state_pool.ndim != 4 or state_pool.shape[1:] != (HV, D, D):
        raise ValueError(f"state_pool must have shape (pool_size, {HV}, {D}, {D}), got {tuple(state_pool.shape)}")
    else:
        required_size = N if initial_state_indices is None else int(initial_state_indices.max().item()) + 1
        if state_pool.shape[0] < required_size:
            raise ValueError(f"state_pool pool_size ({state_pool.shape[0]}) must be at least {required_size}")
        state_pool = state_pool.contiguous()

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.

1 participant