Skip to content

v0.1.1

Pre-release
Pre-release
Compare
Choose a tag to compare
@eozd eozd released this 28 Mar 09:48
· 122 commits to master since this release

bnmf-algs v0.1.1

In this release we implement benchmarks for all NMF and BLD algorithms. There is also a minor improvement to bnmf_algs::bld::seq_greedy_bld to speed it up since the previous implementation was flawed in a major way.

Highlights

  • Benchmarks using Celero library.
    • Benchmark code is separated into modules. Adding a new benchmark is relatively simple by adding a new header file. This new benchmark group is automatically added to benchmark executable when the header file is included in benchmark.cpp
  • bnmf_algs::bld::seq_greedy_bld performance improvement
    • Previous version of bnmf_algs::bld::seq_greedy_bld used to allocate and deallocate a GSL rng object in each iteration. Since for dense matrices the number of iterations needed in seq_greedy_bld can be very high, algorithm performance drops dramatically.
    • In this version, we don't use the GSL rng to sample from a custom distribution but implement our own inverse CDF sampling. This is done by keeping a O(n) sized cumulative distribution array. Sampling an individual element is done in O(logn) time whereas updating the cumulative distribution is done in O(n) time.
    • In later versions, this sampling mechanism is going to be improved even further by performing an O(nlogn) time preprocessing step in the beginning and then performing sampling and updating in O(logn) time each.