The Problem Based Benchmark Suite (PBBS) is a collection of over 20 benchmarks defined in terms of their IO characteristics. They are designed to make it possible to compare different algorithms, or implementations in different programming languages. The emphasis is on parallel algorithms. Our default implementations are for shared-memory multicore machines, although we would be delighted if others implemented versions on GPUs or distributed machines and made comparisons.
A list of the benchmarks can be found on here.
Information on the organization and on how to run PBBS can be found on here.
And here is a paper outlining the benchmarks:
The problem-based benchmark suite (PBBS), V2
Daniel Anderson, Guy E. Blelloch, Laxman Dhulipala, Magdalen Dobson, and Yihan Sun
ACM SIGPLAN Symposium on Principles & Practice of Parallel Programming (PPoPP), 2022
It is proposed to use run_benches.py script.
- Currently 3 backends are supported: OMP, TBB and Eigen
- OMP and Eigen are used similarly: provide
--ompand/or--eigenoptions respectively - To use TBB, you'll need to have it built somewhere. Provide
--tbb-path path/to/tbband--tbbflags. It is expected thatpath/to/tbbhasinclude/directory on the top level and.sosomewhere within
- OMP and Eigen are used similarly: provide
- Sometimes checks work weirdly (and always long) so you might want to add
--nocheckflag - If you don't need the full measurement, use
--smallflag, then input sizes will be reduced. (Though, few benches will not work properly with small inputs) - Script will generate a directory with an ugly name for logs for each backend. If you want to provide your own directory instead, add
--dir logs/dir- There is a separate script that turns logs into .jsons
Example:
./run_benches.py --tbb-path=$HOME/local --tbb --dir tmp_res/ --small
for file in tmp_res/*.txt ; do cat $file | ./gather_stats.py > $file.json ; doneAfter that in graphs.ipynb provide your logs directory (tmp_res/ in example) and run all the cells. There are a few things you might need to tweak:
filter_execfunction: it's responsible for choosing backends which results will be displayedtarget_execswill highlight results for provided backendsbase_execis a baseline backend. It also has to deal with highlightingcurr_targetwill filter out all graphs wherecurr_targetbackend is absent