cd src/
mkdir -p build
cd build
cmake ..
make
Generating Fig. 6 and Fig. 8: To obtain the running times for clique queries, we will use ./clique_bench (this will run 5 rounds of query graphs of 3 relations up to
In the experiments, we used the largest join cardinality
./clique_bench 24 100000000
All results (even those of individual rounds) are stored in the benchs directory, labeled normal-clique. The average result is stored in a file with the suffix -final.
As regards the actual figures:
- Fig. 6 uses
minmax_dpsub_timeandminmax_dpconv_instant_boosted_time. - Fig. 8 uses
hybrid_capped_dpsub_time,simple_capped_dpsub_time, andminplus_dpsub_time.
To obtain Fig. 5, we can use the ./bench binary. We provide the query graphs with the true cardinalities of JOB and CEB directly in queries. The list of pairs represents (bitset, cardinality).
Since the previous clique benchmark does not use DPccp, due to its overhead to generate the ccp's, let's activate the mode to have it.
To this end, change the macro in BenchmarkRunner.cpp to the following configuration:
#define CLIQUE_BENCHMARK 0
#define CAPPED_COUT_BENCHMARK 1
And run make again:
make
Then,
./bench ../../queries/job/
generates the necessary runtimes in benchs, prefixed by cap-cout. Similarly, for CEB run the following (might take a couple of minutes due to the large number of queries):
./bench ../../queries/ceb-imdb-full/
You can also obtain the statistics about the cout_cmax_ratios.csv.
All algorithms are in src/algorithms.
DPconv: Its simple and fast algorithm (Sec. 6) is inDPconv.cpp.DPsub: All variants ofDPsubare inDPsub.cpp.DPccp: All variants ofDPccpare inDPccp.cpp.SubsetConvolution: The heart of our improved layered dynamic programs isinclude/SubsetConvolution.hpp.
In particular, BooleanFSC implements all our optimizations (Sec. 5.2, Sec. 5.3) and reduces the copy between the DP-table and the actual subset convolution.
In BoostedBooleanFSC, we reduce the number of steps in the last step.