Skip to content

v0.2.0

Latest
Compare
Choose a tag to compare
@ajalab ajalab released this 21 Dec 11:27
· 2 commits to master since this release
effccb7

Features

We have changed to use Vers for its
underlying rank/select data structures rather than Fids. It also uses the Vers
implementation of WaveletMatrix rather than the version custom one included
previously.

As a result of the port to Vers, the operations for count and locate accesses
are now 2 - 6 times faster than they were before in the included benchmarks.
The construction of the index is a little bit slower than in the
original.

group                             vers port                                original
-----                             ---------                                --------
construction/FMIndex/1000         1.03     45.4±0.93µs        ? ?/sec      1.00     44.2±1.65µs        ? ?/sec
construction/FMIndex/10000        1.02    647.8±3.15µs        ? ?/sec      1.00    635.5±8.88µs        ? ?/sec
construction/FMIndex/100000       1.10      7.8±0.07ms        ? ?/sec      1.00      7.1±0.09ms        ? ?/sec
construction/FMIndex/1000000      1.33    101.8±4.82ms        ? ?/sec      1.00     76.7±2.58ms        ? ?/sec
construction/RLFMIndex/1000       1.09     52.7±2.04µs        ? ?/sec      1.00     48.2±0.78µs        ? ?/sec
construction/RLFMIndex/10000      1.01    686.2±2.54µs        ? ?/sec      1.00    680.5±3.61µs        ? ?/sec
construction/RLFMIndex/100000     1.03      8.0±0.12ms        ? ?/sec      1.00      7.7±0.03ms        ? ?/sec
construction/RLFMIndex/1000000    1.09    101.8±1.87ms        ? ?/sec      1.00     93.7±4.28ms        ? ?/sec
count/FMIndex/0.005               1.00     67.6±1.55µs  3.6 MElem/sec      2.46    166.1±2.72µs 1505.5 KElem/sec
count/FMIndex/0.05                1.00    118.9±4.70µs  2.1 MElem/sec      3.04    360.9±7.14µs 692.7 KElem/sec
count/FMIndex/0.5                 1.00    116.1±2.15µs  2.1 MElem/sec      3.46    402.2±1.76µs 621.5 KElem/sec
count/RLFMIndex/0.005             1.00    232.5±4.62µs 1075.2 KElem/sec    1.91    444.2±6.78µs 562.8 KElem/sec
count/RLFMIndex/0.05              1.00    426.4±9.77µs 586.3 KElem/sec     2.51  1069.7±10.15µs 233.7 KElem/sec
count/RLFMIndex/0.5               1.00   494.0±11.52µs 506.1 KElem/sec     2.60   1285.7±8.28µs 194.4 KElem/sec
locate/FMIndex/1                  1.00      3.2±0.05ms 79.1 KElem/sec      4.49     14.2±0.04ms 17.6 KElem/sec
locate/FMIndex/2                  1.00      8.3±0.02ms 30.1 KElem/sec      4.99     41.4±0.57ms  6.0 KElem/sec
locate/FMIndex/3                  1.00     18.2±0.05ms 13.8 KElem/sec      5.39     97.9±0.35ms  2.6 KElem/sec
locate/RLFMIndex/1                1.00      8.9±0.02ms 28.0 KElem/sec      2.80     25.0±0.08ms 10.0 KElem/sec
locate/RLFMIndex/2                1.00     24.9±0.12ms 10.0 KElem/sec      3.02     75.3±1.13ms  3.3 KElem/sec
locate/RLFMIndex/3                1.00     57.7±0.29ms  4.3 KElem/sec      3.25    187.8±2.91ms  1363 Elem/sec

If compiled using -C target-cpu=native (so that Vers can make use of additional optimizations) it's faster yet:

group                             vers port (native)                       original
-----                             ------------------                       --------
construction/FMIndex/1000         1.05     46.5±1.06µs        ? ?/sec      1.00     44.2±1.65µs        ? ?/sec
construction/FMIndex/10000        1.03   657.6±11.59µs        ? ?/sec      1.00    635.5±8.88µs        ? ?/sec
construction/FMIndex/100000       1.14      8.0±0.09ms        ? ?/sec      1.00      7.1±0.09ms        ? ?/sec
construction/FMIndex/1000000      1.27     97.0±1.08ms        ? ?/sec      1.00     76.7±2.58ms        ? ?/sec
construction/RLFMIndex/1000       1.12     54.1±1.16µs        ? ?/sec      1.00     48.2±0.78µs        ? ?/sec
construction/RLFMIndex/10000      1.04    708.1±3.77µs        ? ?/sec      1.00    680.5±3.61µs        ? ?/sec
construction/RLFMIndex/100000     1.05      8.1±0.11ms        ? ?/sec      1.00      7.7±0.03ms        ? ?/sec
construction/RLFMIndex/1000000    1.06     99.3±1.38ms        ? ?/sec      1.00     93.7±4.28ms        ? ?/sec
count/FMIndex/0.005               1.00     47.1±1.12µs  5.2 MElem/sec      3.53    166.1±2.72µs 1505.5 KElem/sec
count/FMIndex/0.05                1.00     75.6±0.53µs  3.2 MElem/sec      4.78    360.9±7.14µs 692.7 KElem/sec
count/FMIndex/0.5                 1.00     86.0±2.29µs  2.8 MElem/sec      4.68    402.2±1.76µs 621.5 KElem/sec
count/RLFMIndex/0.005             1.00    115.3±0.96µs  2.1 MElem/sec      3.85    444.2±6.78µs 562.8 KElem/sec
count/RLFMIndex/0.05              1.00    203.8±1.98µs 1226.9 KElem/sec    5.25  1069.7±10.15µs 233.7 KElem/sec
count/RLFMIndex/0.5               1.00    252.8±3.94µs 988.8 KElem/sec     5.09   1285.7±8.28µs 194.4 KElem/sec
locate/FMIndex/1                  1.00      2.7±0.02ms 93.6 KElem/sec      5.31     14.2±0.04ms 17.6 KElem/sec
locate/FMIndex/2                  1.00      7.1±0.04ms 35.2 KElem/sec      5.84     41.4±0.57ms  6.0 KElem/sec
locate/FMIndex/3                  1.00     15.6±0.08ms 16.0 KElem/sec      6.26     97.9±0.35ms  2.6 KElem/sec
locate/RLFMIndex/1                1.00      5.2±0.02ms 48.5 KElem/sec      4.84     25.0±0.08ms 10.0 KElem/sec
locate/RLFMIndex/2                1.00     14.1±0.06ms 17.7 KElem/sec      5.33     75.3±1.13ms  3.3 KElem/sec
locate/RLFMIndex/3                1.00     31.9±0.09ms  7.8 KElem/sec      5.89    187.8±2.91ms  1363 Elem/sec

What's Changed

New Contributors

Full Changelog: v0.1.2...v0.2.0