v0.1.1
Pre-release
Pre-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 inO(logn)
time whereas updating the cumulative distribution is done inO(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 inO(logn)
time each.
- Previous version of