Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • thomasb/tardisdb
  • tardisDB/tardisdb
2 results
Show changes
Showing
with 2626 additions and 6 deletions
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include "algebra/logical/expressions.hpp" #include "algebra/logical/expressions.hpp"
#include "algebra/physical/Operator.hpp" #include "algebra/physical/Operator.hpp"
#include "codegen/CodeGen.hpp" #include "codegen/CodeGen.hpp"
#include "foundations/InformationUnit.hpp" #include "semanticAnalyser/logicalAlgebra/InformationUnit.hpp"
#include "sql/SqlUtils.hpp" #include "sql/SqlUtils.hpp"
#include "sql/SqlType.hpp" #include "sql/SqlType.hpp"
#include "sql/SqlValues.hpp" #include "sql/SqlValues.hpp"
......
...@@ -8,3 +8,7 @@ ...@@ -8,3 +8,7 @@
#include "Print.hpp" #include "Print.hpp"
#include "Select.hpp" #include "Select.hpp"
#include "TableScan.hpp" #include "TableScan.hpp"
#include "Update.hpp"
#include "Delete.hpp"
#include "Insert.hpp"
#include "TupleStream.hpp"
\ No newline at end of file
...@@ -374,6 +374,44 @@ public: ...@@ -374,6 +374,44 @@ public:
throw NotImplementedException(); throw NotImplementedException();
} }
void visit(Logical::Insert & op) override
{
_translated.push( std::make_unique<Physical::Insert>(
op,
op.getTable(),
op.getTuple(),
op.getContext(),
op.getBranchId()
) );
}
void visit(Logical::Update & op) override
{
auto child = std::move(_translated.top());
_translated.pop();
_translated.push( std::make_unique<Physical::Update>(
op,
std::move(child),
op.getTable(),
op.getUpdateIUValuePairs(),
op.getBranchId()
) );
}
void visit(Logical::Delete & op) override
{
auto child = std::move(_translated.top());
_translated.pop();
_translated.push( std::make_unique<Physical::Delete>(
op,
std::move(child),
op.getTIDIU(),
op.getTable()
));
}
void visit(Logical::Result & op) override void visit(Logical::Result & op) override
{ {
auto child = std::move(_translated.top()); auto child = std::move(_translated.top());
...@@ -382,8 +420,15 @@ public: ...@@ -382,8 +420,15 @@ public:
switch (op._type) { switch (op._type) {
case Logical::Result::Type::PrintToStdOut: { case Logical::Result::Type::PrintToStdOut: {
_translated.push( std::make_unique<Physical::Print>( _translated.push( std::make_unique<Physical::Print>(
op, op,
std::move(child) std::move(child)
) );
break;
}
case Logical::Result::Type::TupleStreamHandler: {
_translated.push( std::make_unique<Physical::TupleStream>(
op,
std::move(child)
) ); ) );
break; break;
} }
...@@ -411,13 +456,14 @@ public: ...@@ -411,13 +456,14 @@ public:
{ {
_translated.push( std::make_unique<Physical::TableScan>( _translated.push( std::make_unique<Physical::TableScan>(
op, op,
op.getTable() op.getTable(),
op.getBranchId()
) ); ) );
} }
}; };
std::unique_ptr<Physical::Operator> translateToPhysicalTree(const Logical::Result & resultOperator) std::unique_ptr<Physical::Operator> translateToPhysicalTree(const Logical::Operator & resultOperator)
{ {
TreeTranslator t(resultOperator); TreeTranslator t(resultOperator);
return t.getResult(); return t.getResult();
......
...@@ -10,6 +10,6 @@ namespace Algebra { ...@@ -10,6 +10,6 @@ namespace Algebra {
/// \note This function must only be used inside a code generation context. /// \note This function must only be used inside a code generation context.
/// This means that there already has to be a valid ModuleGen available within the current context. /// This means that there already has to be a valid ModuleGen available within the current context.
std::unique_ptr<Physical::Operator> translateToPhysicalTree(const Logical::Result & resultOperator); std::unique_ptr<Physical::Operator> translateToPhysicalTree(const Logical::Operator & resultOperator);
} // end namespace Algebra } // end namespace Algebra
#!/bin/bash
computeInputStatement() {
pageInsertFile="page_inserts.txt"
contentInsertFile="content_inserts.txt"
pageUpdateFile="page_updates.txt"
contentUpdateFile="content_updates.txt"
insertStatementsFile="insert_statements.txt"
rm $pageInsertFile
rm $contentInsertFile
rm $pageUpdateFile
rm $contentUpdateFile
revisionFile="revision_trunc.tbl"
pageFile="page_trunc.tbl"
contentFile="content_trunc.tbl"
input=$revisionFile
currentPageId=""
lineCounter=1
lastLine=""
while IFS= read -r line
do
IFS='|'
read -ra VALUES <<< "$line"
if [ "${currentPageId}" = "" ]; then
pageline="$(grep "${VALUES[2]}|" "${pageFile}" | head -1 )"
read -ra PAGEVALUES <<< "$pageline"
echo "INSERT INTO page ( id , title , textId ) VALUES ( ${PAGEVALUES[0]} , '$(echo "${PAGEVALUES[1]}" | tr ' ' '_' | tr ',' '_' | tr '(' '_' | tr ')' '_' | tr '*' '_' )' , ${VALUES[3]} );" | cat >> $pageInsertFile
contentline="$(sed "${lineCounter}!d" "${contentFile}" )"
read -ra CONTENTVALUES <<< "$contentline"
echo "INSERT INTO content ( id , text ) VALUES ( ${CONTENTVALUES[0]} , '$(echo "${CONTENTVALUES[1]}" | tr ' ' '_' | tr ',' '_' | tr '(' '_' | tr ')' '_' | tr '*' '_' )' );" | cat >> $contentInsertFile
currentPageId="${VALUES[2]}"
((lineCounter=lineCounter+1))
continue
fi
if [ "${currentPageId}" != "${VALUES[2]}" ]; then
if [ "${lastLine}" != "" ]; then
read -ra UPDATEVALUES <<< "$line"
lastLine=0
((lastLine=lineCounter-1))
contentline="$(sed "${lastLine}!d" "${contentFile}" )"
read -ra CONTENTVALUES <<< "$contentline"
echo "INSERT INTO content VERSION branch1 ( id , text ) VALUES ( ${CONTENTVALUES[0]} , '$(echo "${CONTENTVALUES[1]}" | tr ' ' '_' | tr ',' '_' | tr '(' '_' | tr ')' '_' | tr '*' '_' )' );" | cat >> $contentUpdateFile
echo "UPDATE page VERSION branch1 SET textId = ${UPDATEVALUES[3]} WHERE id = ${UPDATEVALUES[2]};" | cat >> $pageUpdateFile
fi
pageline="$(grep "${VALUES[2]}|" "${pageFile}" | head -1 )"
read -ra PAGEVALUES <<< "$pageline"
echo "INSERT INTO page ( id , title , textId ) VALUES ( ${PAGEVALUES[0]} , '$(echo "${PAGEVALUES[1]}" | tr ' ' '_' | tr ',' '_' | tr '(' '_' | tr ')' '_' | tr '*' '_' )' , ${VALUES[3]} );" | cat >> $pageInsertFile
contentline="$(sed "${lineCounter}!d" "${contentFile}" )"
read -ra CONTENTVALUES <<< "$contentline"
echo "INSERT INTO content ( id , text ) VALUES ( ${CONTENTVALUES[0]} , '$(echo "${CONTENTVALUES[1]}" | tr ' ' '_' | tr ',' '_' | tr '(' '_' | tr ')' '_' | tr '*' '_' )' );" | cat >> $contentInsertFile
currentPageId="${VALUES[2]}"
((lineCounter=lineCounter+1))
continue
fi
lastLine="$line"
((lineCounter=lineCounter+1))
done < "$input"
cat $contentInsertFile | cat > $insertStatementsFile
cat $pageInsertFile | cat >> $insertStatementsFile
echo "create branch branch1 from master;" | cat >> $insertStatementsFile
cat $contentUpdateFile | cat >> $insertStatementsFile
cat $pageUpdateFile | cat >> $insertStatementsFile
}
computeInputStatement
<<STATEMENTS
1: MS = SELECT content FROM page p WHERE p.id = <pageid>;
2: B1S = SELECT content FROM page VERSION branch1 p WHERE p.id = <pageid>;
3: B2S = SELECT content FROM page VERSION branch2 p WHERE p.id = <pageid>;
4: MM = SELECT name FROM user u , page p WHERE p.userId = u.id AND p.id = <pageid>;
5: B1M = SELECT name FROM user u , page VERSION branch1 p WHERE p.userId = u.id AND p.id = <pageid>;
6: B2M = SELECT name FROM user u , page VERSION branch2 p WHERE p.userId = u.id AND p.id = <pageid>;
7: MU = UPDATE page SET content = 'Hello_World!' WHERE id = <pageid>;
8: B1U = UPDATE page VERSION branch1 SET content = 'Hello_World!' WHERE id = <pageid>;
9: B2U = UPDATE page VERSION branch2 SET content = 'Hello_World!' WHERE id = <pageid>;
10: MI = INSERT INTO content ( id , text ) VALUES ( <textid> , 'Hello_world!' );
11: BI = INSERT INTO content VERSION branch1 ( id , text ) VALUES (<textid> , 'Hello_World!');
12: MD = DELETE FROM page WHERE id = <pageId>;
13: B1D = DELETE FROM page VERSION branch1 WHERE id = <pageId>;
14: B2D = DELETE FROM page VERSION branch2 WHERE id = <pageId>;
STATEMENTS
generate_MS() {
statementFile=$(echo "./benchmarkStatements/ms_statements_$1_$2.txt")
unversionizedStatementFile=$(echo "./benchmarkStatements/ms_statements_unv_$1_$2.txt")
rm $statementFile
rm $unversionizedStatementFile
for i in {1..100}
do
randomNumber=$(( ( RANDOM % ($2 - $1) ) + $1 + 1 ));
echo "SELECT content FROM page p WHERE p.id = $randomNumber;" | cat >> $statementFile
echo "SELECT text FROM revision r , content c, page p WHERE c.id = r.textId AND p.id = r.pageId AND r.pageId = $randomNumber;" | cat >> $unversionizedStatementFile
done
echo "quit" | cat >> $statementFile
echo "quit" | cat >> $unversionizedStatementFile
}
generate_B1S() {
statementFile=$(echo "./benchmarkStatements/b1s_statements_$1_$2.txt")
rm $statementFile
for i in {1..100}
do
echo "SELECT content FROM page VERSION branch1 p WHERE p.id = $(( ( RANDOM % ($2 - $1) ) + $1 + 1 ));" | cat >> $statementFile
done
echo "quit" | cat >> $statementFile
}
generate_B2S() {
statementFile=$(echo "./benchmarkStatements/b2s_statements_$1_$2.txt")
rm $statementFile
for i in {1..100}
do
echo "SELECT content FROM page VERSION branch2 p WHERE p.id = $(( ( RANDOM % ($2 - $1) ) + $1 + 1 ));" | cat >> $statementFile
done
echo "quit" | cat >> $statementFile
}
generate_MM() {
statementFile=$(echo "./benchmarkStatements/mm_statements_$1_$2.txt")
unversionizedStatementFile=$(echo "./benchmarkStatements/mm_statements_unv_$1_$2.txt")
rm $statementFile
rm $unversionizedStatementFile
for i in {1..100}
do
randomNumber=$(( ( RANDOM % ($2 - $1) ) + $1 + 1 ));
echo "SELECT name FROM user u , page p WHERE p.userId = u.id AND p.id = $randomNumber;" | cat >> $statementFile
echo "SELECT name FROM revision r , content c, page p, user u WHERE u.id = r.userId AND c.id = r.textId AND p.id = r.pageId AND r.pageId = $randomNumber;" | cat >> $unversionizedStatementFile
done
echo "quit" | cat >> $statementFile
echo "quit" | cat >> $unversionizedStatementFile
}
generate_B1M() {
statementFile=$(echo "./benchmarkStatements/b1m_statements_$1_$2.txt")
rm $statementFile
for i in {1..100}
do
echo "SELECT name FROM user u , page VERSION branch1 p WHERE p.userId = u.id AND p.id = $(( ( RANDOM % ($2 - $1) ) + $1 + 1 ));" | cat >> $statementFile
done
echo "quit" | cat >> $statementFile
}
generate_B2M() {
statementFile=$(echo "./benchmarkStatements/b2m_statements_$1_$2.txt")
rm $statementFile
for i in {1..100}
do
echo "SELECT name FROM user u , page VERSION branch2 p WHERE p.userId = u.id AND p.id = $(( ( RANDOM % ($2 - $1) ) + $1 + 1 ));" | cat >> $statementFile
done
echo "quit" | cat >> $statementFile
}
generate_MU() {
statementFile=$(echo "./benchmarkStatements/mu_statements_$1_$2.txt")
unversionizedStatementFile=$(echo "./benchmarkStatements/mu_statements_unv_$1_$2.txt")
rm $statementFile
rm $unversionizedStatementFile
for i in {1..100}
do
randomNumber=$(( ( RANDOM % ($2 - $1) ) + $1 + 1 ));
echo "UPDATE page SET content = 'Hello_World!' WHERE id = $randomNumber;" | cat >> $statementFile
echo "SELECT id FROM revision r WHERE r.pageId = $randomNumber ;" | cat >> $unversionizedStatementFile
echo "INSERT INTO revision ( id , parentId , pageId , textId , userId ) VALUES ( 2 , 1 , $randomNumber , $(($randomNumber + 1)) , 1 );" | cat >> $unversionizedStatementFile
echo "INSERT INTO content ( id , text ) VALUES ( $(($randomNumber + 1)) , 'Hello' );" | cat >> $unversionizedStatementFile
done
echo "quit" | cat >> $statementFile
echo "quit" | cat >> $unversionizedStatementFile
}
generate_B1U() {
statementFile=$(echo "./benchmarkStatements/b1u_statements_$1_$2.txt")
rm $statementFile
for i in {1..100}
do
echo "UPDATE page VERSION branch1 SET content = 'Hello_World!' WHERE id = $(( ( RANDOM % ($2 - $1) ) + $1 + 1 ));" | cat >> $statementFile
done
echo "quit" | cat >> $statementFile
}
generate_B2U() {
statementFile=$(echo "./benchmarkStatements/b2u_statements_$1_$2.txt")
rm $statementFile
for i in {1..100}
do
echo "UPDATE page VERSION branch2 SET content = 'Hello_World!' WHERE id = $(( ( RANDOM % ($2 - $1) ) + $1 + 1 ));" | cat >> $statementFile
done
echo "quit" | cat >> $statementFile
}
generate_MI() {
statementFile=$(echo "./benchmarkStatements/mi_statements_$1_$2.txt")
unversionizedStatementFile=$(echo "./benchmarkStatements/mi_statements_unv_$1_$2.txt")
rm $statementFile
rm $unversionizedStatementFile
for i in {1..100}
do
randomNumber=$(( ( RANDOM % ($2 - $1) ) + $1 + 1 ));
echo "INSERT INTO user ( id , name ) VALUES ( $randomNumber , 'John_Doe' );" | cat >> $statementFile
echo "INSERT INTO user ( id , name ) VALUES ( $randomNumber , 'John_Doe' );" | cat >> $unversionizedStatementFile
done
echo "quit" | cat >> $statementFile
echo "quit" | cat >> $unversionizedStatementFile
}
generate_BI() {
statementFile=$(echo "./benchmarkStatements/bi_statements_$1_$2.txt")
rm $statementFile
for i in {1..100}
do
echo "INSERT INTO user VERSION branch1 ( id , name ) VALUES ( $(( ( RANDOM % ($2 - $1) ) + $1 + 1 )) , 'John_Doe');" | cat >> $statementFile
done
echo "quit" | cat >> $statementFile
}
generate_MD() {
statementFile=$(echo "./benchmarkStatements/md_statements_$1_$2.txt")
unversionizedStatementFile=$(echo "./benchmarkStatements/md_statements_unv_$1_$2.txt")
deleteTempFile=$(echo "./delete_temp.txt")
rm $statementFile
rm $unversionizedStatementFile
for i in {1..100}
do
randomNumber=$(( ( RANDOM % ($2 - $1) ) + $1 + 1 ));
echo "DELETE FROM page WHERE id = $randomNumber ;" | cat >> $statementFile
echo "SELECT textId FROM revision r , content c WHERE r.textId = c.id AND r.pageId = $randomNumber;" | cat >> $unversionizedStatementFile
echo "DELETE FROM page WHERE id = $randomNumber;" | cat >> $unversionizedStatementFile
echo "DELETE FROM revision WHERE pageId = $randomNumber;" | cat >> $unversionizedStatementFile
rm $deleteTempFile
grep -n "|$randomNumber|" "revision_$1_$2.tbl" | cat > $deleteTempFile
while IFS= read -r line
do
IFS=':'
read -ra METRICS <<< "$line"
if [ "${#METRICS[@]}" = "2" ]; then
echo "DELETE FROM content WHERE id = $(bc -l <<<"${METRICS[0]}-1");" | cat >> $unversionizedStatementFile
fi
done < "$deleteTempFile"
done
echo "quit" | cat >> $statementFile
echo "quit" | cat >> $unversionizedStatementFile
}
generate_B1D() {
statementFile=$(echo "./benchmarkStatements/b1d_statements_$1_$2.txt")
rm $statementFile
for i in {1..100}
do
echo "DELETE FROM page VERSION branch1 WHERE id = $(( ( RANDOM % ($2 - $1) ) + $1 + 1 )) ;" | cat >> $statementFile
done
echo "quit" | cat >> $statementFile
}
generate_B2D() {
statementFile=$(echo "./benchmarkStatements/b2d_statements_$1_$2.txt")
rm $statementFile
for i in {1..100}
do
echo "DELETE FROM page VERSION branch2 WHERE id = $(( ( RANDOM % ($2 - $1) ) + $1 + 1 )) ;" | cat >> $statementFile
done
echo "quit" | cat >> $statementFile
}
generate_statements() {
generate_MS $1 $2
generate_B1S $1 $2
generate_B2S $1 $2
echo "${Green}Generated Select Statements for PageIDs $1 to $2!${Color_Off}"
generate_MM $1 $2
generate_B1M $1 $2
generate_B2M $1 $2
echo "${Green}Generated Merge Statements for PageIDs $1 to $2!${Color_Off}"
generate_MU $1 $2
generate_B1U $1 $2
generate_B2U $1 $2
echo "${Green}Generated Update Statements for PageIDs $1 to $2!${Color_Off}"
generate_MI $1 $2
generate_BI $1 $2
echo "${Green}Generated Insert Statements for PageIDs $1 to $2!${Color_Off}"
generate_MD $1 $2
generate_B1D $1 $2
generate_B2D $1 $2
echo "${Green}Generated Delete Statements for PageIDs $1 to $2!${Color_Off}"
}
mkdir "benchmarkStatements"
generate_statements 23910821 23927983
\ No newline at end of file
#include "foundations/Database.hpp"
#include "foundations/version_management.hpp"
#include <chrono>
#include <random>
#include <iostream>
#include "native/sql/SqlValues.hpp"
#include "native/sql/SqlTuple.hpp"
static constexpr size_t repetitions = 16;
static constexpr auto master_factor = 0.7;
static constexpr auto update_factor = 10.0;
static constexpr int seed = 42;
//static constexpr size_t new_tuples_per_episode = 1<<18;
static constexpr size_t new_tuples_per_episode = 500'000; //1<<19;
static std::mt19937 rd_engine(seed);
using namespace Native::Sql;
void insert_tuples(branch_id_t branch, size_t cnt, Database & db, Table & table) {
QueryContext ctx(db);
ctx.executionContext.branchId = branch;
db.constructBranchLineage(branch, ctx.executionContext);
std::vector<value_op_t> values;
values.push_back(std::make_unique<Integer>(1));
values.push_back(std::make_unique<Integer>(2));
values.push_back(std::make_unique<Integer>(3));
SqlTuple tuple(std::move(values));
for (size_t i = 0; i < cnt; ++i) {
insert_tuple(tuple, table, ctx);
}
}
void update_tuples_once(branch_id_t branch, size_t cnt, Database & db, Table & table) {
QueryContext ctx(db);
ctx.executionContext.branchId = branch;
db.constructBranchLineage(branch, ctx.executionContext);
std::vector<tid_t> tids;
for (size_t tid = 0; tid < table._version_mgmt_column.size(); ++tid) {
tids.push_back(tid);
}
for (size_t tid = 0; tid < table._dangling_version_mgmt_column.size(); ++tid) {
tids.push_back(mark_as_dangling_tid(tid));
}
std::vector<value_op_t> values;
values.push_back(std::make_unique<Integer>(1));
values.push_back(std::make_unique<Integer>(2));
values.push_back(std::make_unique<Integer>(3));
SqlTuple tuple(std::move(values));
std::shuffle(tids.begin(), tids.end(), rd_engine);
size_t updated = 0;
for (tid_t tid : tids) {
VersionEntry * version_entry;
if (is_marked_as_dangling_tid(tid)) {
tid_t unmarked = unmark_dangling_tid(tid);
version_entry = table._dangling_version_mgmt_column[unmarked].get();
} else {
version_entry = table._version_mgmt_column[tid].get();
}
if (!has_lineage_intersection(ctx, version_entry)) {
continue;
}
update_tuple(tid, tuple, table, ctx);
updated += 1;
}
assert(updated == cnt);
}
void update_tuples(branch_id_t branch, size_t cnt, Database & db, Table & table) {
QueryContext ctx(db);
ctx.executionContext.branchId = branch;
db.constructBranchLineage(branch, ctx.executionContext);
std::vector<tid_t> tids;
for (size_t tid = 0; tid < table._version_mgmt_column.size(); ++tid) {
tids.push_back(tid);
}
for (size_t tid = 0; tid < table._dangling_version_mgmt_column.size(); ++tid) {
tids.push_back(mark_as_dangling_tid(tid));
}
std::vector<value_op_t> values;
values.push_back(std::make_unique<Integer>(1));
values.push_back(std::make_unique<Integer>(2));
values.push_back(std::make_unique<Integer>(3));
SqlTuple tuple(std::move(values));
std::uniform_int_distribution<size_t> distribution(0, tids.size());
for (size_t updated = 0; updated < cnt; ++updated) {
tid_t tid = tids[distribution(rd_engine)];
if (!is_visible(tid, table, ctx)) {
continue;
}
update_tuple(tid, tuple, table, ctx);
}
}
std::vector<branch_id_t> get_branches_dist(Database & db) {
branch_id_t max_branch = db.getLargestBranchId();
if (max_branch == master_branch_id) {
return {master_branch_id};
}
size_t master_cnt = max_branch/(1.0-master_factor)*master_factor;
std::vector<branch_id_t> branches_dist;
for (size_t i = 0; i < master_cnt; ++i) {
branches_dist.push_back(master_branch_id);
}
for (branch_id_t branch = 0; branch <= max_branch; ++branch) {
if (branch != master_branch_id) {
branches_dist.push_back(branch);
}
}
std::shuffle(branches_dist.begin(), branches_dist.end(), rd_engine);
return branches_dist;
}
static uint64_t total_inserts = 0;
static uint64_t total_updates = 0;
void perform_bunch_inserts(Database & db, Table & table) {
auto branches_dist = get_branches_dist(db);
size_t chunk_size = new_tuples_per_episode/branches_dist.size();
for (branch_id_t branch : branches_dist) {
insert_tuples(branch, chunk_size, db, table);
}
total_inserts += new_tuples_per_episode;
}
void perform_bunch_updates(Database & db, Table & table) {
auto branches_dist = get_branches_dist(db);
size_t table_size = table._version_mgmt_column.size() + table._dangling_version_mgmt_column.size();
size_t total_cnt = table_size*update_factor;
size_t chunk_size = total_cnt/branches_dist.size();
for (branch_id_t branch : branches_dist) {
update_tuples(branch, chunk_size, db, table);
}
total_updates += total_cnt;
}
inline void print_result(const std::tuple<ScanItem<Register<Integer>>, ScanItem<Register<Integer>>, ScanItem<Register<Integer>>> & scan_items) {
printf("%d\t%d\t%d\n",
std::get<0>(scan_items).reg.sql_value.value,
std::get<1>(scan_items).reg.sql_value.value,
std::get<2>(scan_items).reg.sql_value.value
);
}
static size_t tuple_cnt = 0;
static int sum = 0;
inline void sum_consumer(const std::tuple<ScanItem<Register<Integer>>, ScanItem<Register<Integer>>, ScanItem<Register<Integer>>> & scan_items) {
sum += std::get<0>(scan_items).reg.sql_value.value;
sum += std::get<1>(scan_items).reg.sql_value.value;
sum += std::get<2>(scan_items).reg.sql_value.value;
tuple_cnt += 1;
}
int64_t measure_master_scan_yielding_latest(branch_id_t branch, Database & db, Table & table) {
QueryContext ctx(db);
ctx.executionContext.branchId = branch;
db.constructBranchLineage(branch, ctx.executionContext);
const auto & column0 = table.getColumn(0);
const auto & column1 = table.getColumn(1);
const auto & column2 = table.getColumn(2);
auto scan_items = std::make_tuple<
ScanItem<Register<Integer>>, ScanItem<Register<Integer>>, ScanItem<Register<Integer>>>(
{column0, 0},
{column1, 4},
{column2, 8});
tuple_cnt = 0;
using namespace std::chrono;
const auto query_start = high_resolution_clock::now();
scan_relation_yielding_latest(ctx, table, sum_consumer, scan_items);
const auto query_duration = high_resolution_clock::now() - query_start;
auto duration = duration_cast<milliseconds>(query_duration).count();
// printf("Execution time: %lums\n", duration);
return duration;
}
int64_t measure_master_scan_yielding_earliest(branch_id_t branch, Database & db, Table & table) {
QueryContext ctx(db);
ctx.executionContext.branchId = branch;
db.constructBranchLineage(branch, ctx.executionContext);
const auto & column0 = table.getColumn(0);
const auto & column1 = table.getColumn(1);
const auto & column2 = table.getColumn(2);
auto scan_items = std::make_tuple<
ScanItem<Register<Integer>>, ScanItem<Register<Integer>>, ScanItem<Register<Integer>>>(
{column0, 0},
{column1, 4},
{column2, 8});
tuple_cnt = 0;
using namespace std::chrono;
const auto query_start = high_resolution_clock::now();
scan_relation_yielding_earliest(ctx, table, sum_consumer, scan_items);
const auto query_duration = high_resolution_clock::now() - query_start;
auto duration = duration_cast<milliseconds>(query_duration).count();
// printf("Execution time: %lums\n", duration);
return duration;
}
void measure(std::function<int64_t()> bench_func) {
int64_t acc = 0;
std::vector<int64_t> samples;
for (size_t i = 0; i < repetitions; ++i) {
auto sample = bench_func();
acc += sample;
samples.push_back(sample);
}
double mean = static_cast<double>(acc)/repetitions;
double var = 0.0, std;
for (size_t i = 0; i < repetitions; ++i) {
var += (samples[i] - mean) * (samples[i] - mean);
}
std = std::sqrt(var);
std::cout << "mean: " << mean << " std: " << std << std::endl;
std::cout << "tuple count: " << tuple_cnt << std::endl;
double tuple_cost = mean/tuple_cnt*1.e6;
std::cout << "per tuple cost: " << tuple_cost << "ns" << std::endl;
}
void run_benchmark() {
printf("generating data...\n");
auto db = std::make_unique<Database>();
auto & bench_table = db->createTable("bench_table");
bench_table.addColumn("a", Sql::getIntegerTy());
bench_table.addColumn("b", Sql::getIntegerTy());
bench_table.addColumn("c", Sql::getIntegerTy());
std::vector<branch_id_t> branches{ master_branch_id };
perform_bunch_inserts(*db, bench_table);
perform_bunch_updates(*db, bench_table);
branch_id_t branch1 = db->createBranch("branch1", master_branch_id);
branches.push_back(branch1);
perform_bunch_inserts(*db, bench_table);
perform_bunch_updates(*db, bench_table);
branch_id_t branch2 = db->createBranch("branch2", branch1);
branches.push_back(branch2);
perform_bunch_inserts(*db, bench_table);
perform_bunch_updates(*db, bench_table);
branch_id_t branch3 = db->createBranch("branch3", invalid_branch_id);
branches.push_back(branch3);
perform_bunch_inserts(*db, bench_table);
perform_bunch_updates(*db, bench_table);
branch_id_t branch4 = db->createBranch("branch4", branch3);
branches.push_back(branch4);
perform_bunch_inserts(*db, bench_table);
perform_bunch_updates(*db, bench_table);
for (branch_id_t branch : branches) {
printf("measuring scan performance on branch %d yielding earliest tuples...\n", branch);
measure([&]{
return measure_master_scan_yielding_earliest(branch, *db, bench_table);
});
printf("measuring scan performance on branch %d yielding latest tuples...\n", branch);
measure([&]{
return measure_master_scan_yielding_latest(branch, *db, bench_table);
});
}
printf("update insert ratio: %f\n", static_cast<double>(total_updates)/static_cast<double>(total_inserts));
}
int main(int argc, char * argv[]) {
ModuleGen moduleGen("QueryModule");
run_benchmark();
}
//
// Created by Blum Thomas on 2020-08-13.
//
#include <fstream>
#include <iostream>
#include <sstream>
#include <random>
#include <llvm/ADT/STLExtras.h>
#include <llvm/ExecutionEngine/ExecutionEngine.h>
#include <llvm/ExecutionEngine/GenericValue.h>
#include <llvm/IR/Constants.h>
#include <llvm/IR/IRBuilder.h>
#include <llvm/Support/ManagedStatic.h>
#include <llvm/Support/TargetSelect.h>
#include <foundations/StringPool.hpp>
#include "codegen/CodeGen.hpp"
#include "foundations/Database.hpp"
#include "queryExecutor/queryExecutor.hpp"
#include "queryCompiler/queryCompiler.hpp"
#include "foundations/version_management.hpp"
#include "sql/SqlType.hpp"
#include "sql/SqlValues.hpp"
#include "utils/general.hpp"
#if LIBXML_AVAILABLE
#include "wikiParser/WikiParser.hpp"
#endif
#if PERF_AVAILABLE
#include "perfevent/PerfEvent.hpp"
#endif
#include "gflags/gflags.h"
DEFINE_bool(b, false, "isBenchmarking");
DEFINE_string(l, "wikidb", "database");
DEFINE_double(d, 0.5, "distribution");
DEFINE_uint64(r, 1, "runs");
DEFINE_uint64(lowerBound, 1, "lowerBound");
DEFINE_uint64(upperBound, 30303, "upperBound");
static bool ValidateDatabase(const char *flagname, const std::string &value) {
return value.compare("wikidb") == 0;
}
static bool ValidateDistribution(const char *flagname, const std::string &value) {
std::vector<std::string> distributions = split(value,',');
return distributions.size() == 2;
}
DEFINE_validator(l, &ValidateDatabase);
#if USE_DATA_VERSIONING
void loadWikiDb(Database *db, int lowerBound, int upperBound)
{
uint64_t loadDuration = 0;
std::stringstream ssRange;
ssRange << "_";
ssRange << lowerBound;
ssRange << "_";
ssRange << upperBound;
std::string pageRangeStr = ssRange.str();
std::string pageFileName = "page" + pageRangeStr + ".tbl";
std::string revisionFileName = "revision" + pageRangeStr + ".tbl";
std::string contentFileName = "content" + pageRangeStr + ".tbl";
std::string userFileName = "user" + pageRangeStr + ".tbl";
QueryCompiler::compileAndExecute("CREATE TABLE page ( id INTEGER NOT NULL, title TEXT NOT NULL , userId INTEGER NOT NULL , content TEXT NOT NULL );",*db);
QueryCompiler::compileAndExecute("CREATE TABLE user ( id INTEGER NOT NULL, name TEXT NOT NULL );",*db);
std::ifstream streamRevision(revisionFileName);
if (!streamRevision) { throw std::runtime_error("file not found: tables/revision.tbl"); }
std::ifstream streamPage(pageFileName);
if (!streamPage) { throw std::runtime_error("file not found: tables/page.tbl"); }
std::ifstream streamContent(contentFileName);
if (!streamContent) { throw std::runtime_error("file not found: tables/content.tbl"); }
std::ifstream streamUser(userFileName);
if (!streamUser) { throw std::runtime_error("file not found: tables/user.tbl"); }
Table *pageTable = db->getTable("page");
Table *userTable = db->getTable("user");
std::set<std::string> userIDS = {};
std::string userRowStr;
QueryContext userCtx(*db);
userCtx.executionContext.branchId = 0;
db->constructBranchLineage(0, userCtx.executionContext);
while(std::getline(streamUser,userRowStr)) {
std::vector<std::string> userValues = split(userRowStr,'|');
if (userIDS.find(userValues[0]) == userIDS.end()) {
userIDS.insert(userValues[0]);
std::vector<std::unique_ptr<Native::Sql::Value>> sqlvalues;
int counter = 0;
for (auto &columnName : userTable->getColumnNames()) {
sqlvalues.push_back(Native::Sql::Value::castString(userValues[counter],userTable->getCI(columnName)->type));
counter++;
}
Native::Sql::SqlTuple userTuple(std::move(sqlvalues));
insert_tuple(userTuple, *userTable, userCtx);
}
}
streamUser.close();
streamUser = std::ifstream(userFileName);
if (!streamUser) { throw std::runtime_error("file not found: tables/user.tbl"); }
std::string skippingPageId = "";
std::string currentPageId = "";
std::string currentPageTitle = "";
std::string revisionRowStr;
std::string pageRowStr;
std::string contentRowStr;
QueryContext firstctx(*db);
firstctx.executionContext.branchId = 0;
db->constructBranchLineage(0, firstctx.executionContext);
while(std::getline(streamRevision, revisionRowStr)) {
std::vector<std::string> revisionValues = split(revisionRowStr,'|');
if (std::stoi(revisionValues[2]) < lowerBound) {
if (skippingPageId.compare("") == 0 || skippingPageId.compare(revisionValues[2]) != 0) {
skippingPageId = revisionValues[2];
assert(std::getline(streamPage,pageRowStr));
}
assert(std::getline(streamContent,contentRowStr));
assert(std::getline(streamUser,userRowStr));
continue;
}
if (std::stoi(revisionValues[2]) > upperBound) {
break;
}
if (currentPageId.compare("") == 0 || currentPageId.compare(revisionValues[2]) != 0) {
currentPageId = revisionValues[2];
assert(std::getline(streamPage,pageRowStr));
std::vector<std::string> pageValues = split(pageRowStr,'|');
assert(pageValues.size() == 2);
assert(pageValues[0].compare(currentPageId) == 0);
assert(std::getline(streamUser,userRowStr));
std::vector<std::string> userValues = split(userRowStr,'|');
assert(userValues.size() == 2);
pageValues.push_back(userValues[0]);
assert(std::getline(streamContent,contentRowStr));
std::vector<std::string> contentValues = split(contentRowStr,'|');
assert(contentValues.size() == 2);
pageValues.push_back(contentValues[1]);
std::vector<std::unique_ptr<Native::Sql::Value>> sqlvalues;
int counter = 0;
for (auto &columnName : pageTable->getColumnNames()) {
sqlvalues.push_back(Native::Sql::Value::castString(pageValues[counter],pageTable->getCI(columnName)->type));
counter++;
}
Native::Sql::SqlTuple pageTuple(std::move(sqlvalues));
auto loadStart = std::chrono::high_resolution_clock::now();
insert_tuple(pageTuple, *pageTable, firstctx);
loadDuration += std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - loadStart).count();
} else {
assert(std::getline(streamContent,contentRowStr));
assert(std::getline(streamUser,userRowStr));
}
}
QueryCompiler::compileAndExecute("CREATE BRANCH branch1 FROM master;",*db);
streamRevision.close();
streamPage.close();
streamContent.close();
streamUser.close();
streamRevision = std::ifstream(revisionFileName);
if (!streamRevision) { throw std::runtime_error("file not found: tables/revision.tbl"); }
streamPage = std::ifstream(pageFileName);
if (!streamPage) { throw std::runtime_error("file not found: tables/page.tbl"); }
streamContent = std::ifstream(contentFileName);
if (!streamContent) { throw std::runtime_error("file not found: tables/content.tbl"); }
streamUser = std::ifstream(userFileName);
if (!streamUser) { throw std::runtime_error("file not found: tables/user.tbl"); }
currentPageId = "";
skippingPageId = "";
std::vector<std::string> currentPageValues;
std::vector<std::string> lastContentValues;
std::vector<std::string> lastUserValues;
tid_t pageTID = 0;
bool wasFirstRevision = true;
QueryContext secondctx(*db);
secondctx.executionContext.branchId = 0;
db->constructBranchLineage(0, secondctx.executionContext);
while(std::getline(streamRevision, revisionRowStr)) {
std::vector<std::string> revisionValues = split(revisionRowStr,'|');
if (std::stoi(revisionValues[2]) < lowerBound) {
if (skippingPageId.compare("") == 0 || skippingPageId.compare(revisionValues[2]) != 0) {
skippingPageId = revisionValues[2];
assert(std::getline(streamPage,pageRowStr));
}
assert(std::getline(streamContent,contentRowStr));
assert(std::getline(streamUser,userRowStr));
continue;
}
if (std::stoi(revisionValues[2]) > upperBound) {
break;
}
if (currentPageId.compare("") == 0) {
currentPageId = revisionValues[2];
assert(std::getline(streamPage,pageRowStr));
currentPageValues = split(pageRowStr,'|');
assert(currentPageValues.size() == 2);
assert(currentPageValues[0].compare(currentPageId) == 0);
assert(std::getline(streamContent,contentRowStr));
assert(std::getline(streamUser,userRowStr));
wasFirstRevision = true;
continue;
}
if (currentPageId.compare(revisionValues[2]) != 0) {
currentPageId = revisionValues[2];
assert(std::getline(streamPage,pageRowStr));
currentPageValues = split(pageRowStr,'|');
assert(currentPageValues.size() == 2);
assert(currentPageValues[0].compare(currentPageId) == 0);
assert(std::getline(streamContent,contentRowStr));
assert(std::getline(streamUser,userRowStr));
pageTID++;
wasFirstRevision = true;
continue;
}
if (!wasFirstRevision && currentPageId.compare(revisionValues[2]) == 0) {
std::vector<std::string> lastPageValues = currentPageValues;
lastPageValues.push_back(lastUserValues[0]);
lastPageValues.push_back(lastContentValues[1]);
std::vector<std::unique_ptr<Native::Sql::Value>> sqlValues;
int counter = 0;
for (auto &columnName : pageTable->getColumnNames()) {
sqlValues.push_back(Native::Sql::Value::castString(lastPageValues[counter],pageTable->getCI(columnName)->type));
counter++;
}
Native::Sql::SqlTuple pageTuple(std::move(sqlValues));
auto loadStart = std::chrono::high_resolution_clock::now();
update_tuple(pageTID,pageTuple,*pageTable,secondctx);
loadDuration += std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - loadStart).count();
}
assert(std::getline(streamUser,userRowStr));
lastUserValues = split(userRowStr,'|');
assert(lastUserValues.size() == 2);
assert(std::getline(streamContent,contentRowStr));
lastContentValues = split(contentRowStr,'|');
assert(lastContentValues.size() == 2);
wasFirstRevision = false;
}
QueryCompiler::compileAndExecute("CREATE BRANCH branch2 FROM master;",*db);
streamRevision.close();
streamPage.close();
streamContent.close();
streamUser.close();
streamRevision = std::ifstream(revisionFileName);
if (!streamRevision) { throw std::runtime_error("file not found: tables/revision.tbl"); }
streamPage = std::ifstream(pageFileName);
if (!streamPage) { throw std::runtime_error("file not found: tables/page.tbl"); }
streamContent = std::ifstream(contentFileName);
if (!streamContent) { throw std::runtime_error("file not found: tables/content.tbl"); }
streamUser = std::ifstream(userFileName);
if (!streamUser) { throw std::runtime_error("file not found: tables/user.tbl"); }
currentPageId = "";
skippingPageId = "";
pageTID = 0;
bool isFirstRevisionOfPage = true;
QueryContext thirdctx(*db);
thirdctx.executionContext.branchId = 0;
db->constructBranchLineage(0, thirdctx.executionContext);
while(std::getline(streamRevision, revisionRowStr)) {
std::vector<std::string> revisionValues = split(revisionRowStr,'|');
if (std::stoi(revisionValues[2]) < lowerBound) {
if (skippingPageId.compare("") == 0 || skippingPageId.compare(revisionValues[2]) != 0) {
skippingPageId = revisionValues[2];
assert(std::getline(streamPage,pageRowStr));
}
assert(std::getline(streamContent,contentRowStr));
assert(std::getline(streamUser,userRowStr));
continue;
}
if (std::stoi(revisionValues[2]) > upperBound) {
break;
}
if (currentPageId.compare("") == 0) {
currentPageId = revisionValues[2];
isFirstRevisionOfPage = true;
continue;
}
if (!isFirstRevisionOfPage && currentPageId.compare(revisionValues[2]) != 0) {
assert(std::getline(streamPage,pageRowStr));
std::vector<std::string> pageValues = split(pageRowStr,'|');
assert(pageValues.size() == 2);
assert(pageValues[0].compare(currentPageId) == 0);
assert(std::getline(streamUser,userRowStr));
std::vector<std::string> userValues = split(userRowStr,'|');
assert(userValues.size() == 2);
pageValues.push_back(userValues[0]);
assert(std::getline(streamContent,contentRowStr));
std::vector<std::string> contentValues = split(contentRowStr,'|');
assert(contentValues.size() == 2);
pageValues.push_back(contentValues[1]);
std::vector<std::unique_ptr<Native::Sql::Value>> sqlvalues;
int counter = 0;
for (auto &columnName : pageTable->getColumnNames()) {
sqlvalues.push_back(Native::Sql::Value::castString(pageValues[counter],pageTable->getCI(columnName)->type));
counter++;
}
Native::Sql::SqlTuple pageTuple(std::move(sqlvalues));
auto loadStart = std::chrono::high_resolution_clock::now();
update_tuple(pageTID,pageTuple,*pageTable,thirdctx);
loadDuration += std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - loadStart).count();
pageTID++;
isFirstRevisionOfPage = true;
currentPageId = revisionValues[2];
continue;
}
if (currentPageId.compare(revisionValues[2]) != 0) {
assert(std::getline(streamPage,pageRowStr));
pageTID++;
isFirstRevisionOfPage = true;
currentPageId = revisionValues[2];
} else {
isFirstRevisionOfPage = false;
}
assert(std::getline(streamUser,userRowStr));
assert(std::getline(streamContent,contentRowStr));
}
if (!isFirstRevisionOfPage) {
assert(std::getline(streamPage,pageRowStr));
std::vector<std::string> pageValues = split(pageRowStr,'|');
assert(pageValues.size() == 2);
assert(pageValues[0].compare(currentPageId) == 0);
assert(std::getline(streamUser,userRowStr));
std::vector<std::string> userValues = split(userRowStr,'|');
assert(userValues.size() == 2);
pageValues.push_back(userValues[0]);
assert(std::getline(streamContent,contentRowStr));
std::vector<std::string> contentValues = split(contentRowStr,'|');
assert(contentValues.size() == 2);
pageValues.push_back(contentValues[1]);
std::vector<std::unique_ptr<Native::Sql::Value>> sqlvalues;
int counter = 0;
for (auto &columnName : pageTable->getColumnNames()) {
sqlvalues.push_back(Native::Sql::Value::castString(pageValues[counter],pageTable->getCI(columnName)->type));
counter++;
}
Native::Sql::SqlTuple pageTuple(std::move(sqlvalues));
auto loadStart = std::chrono::high_resolution_clock::now();
update_tuple(pageTID,pageTuple,*pageTable,thirdctx);
loadDuration += std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - loadStart).count();
}
streamRevision.close();
streamPage.close();
streamContent.close();
streamUser.close();
std::cout << "Table Sizes:\n";
std::cout << "Page:\t" << db->getTable("page")->size() << "\n";
std::cout << "User:\t" << db->getTable("user")->size() << "\n";
std::cout << "LoadDuration:\t" << std::fixed << loadDuration / 1000 << std::endl;
}
#else
void storeTextGen(char *dest, const uint8_t * bytes, size_t len) {
if (len > 15) {
std::unique_ptr<uint8_t[]> data(new uint8_t[len]);
std::memcpy(data.get(), bytes, len);
auto & storedStr = StringPool::instance().put(sql_string_t(len, std::move(data)));
uint8_t * beginPtr = storedStr.second.get();
uint8_t * endPtr = beginPtr+len;
uintptr_t first_value = reinterpret_cast<uintptr_t>(beginPtr);
first_value ^= static_cast<uintptr_t>(1) << (8*sizeof(uintptr_t)-1);
memcpy(dest,(char*)&first_value,8);
memcpy(dest + 8, &endPtr, 8);
} else {
dest[0] = (char) len;
memcpy(&dest[1],bytes,len);
}
}
void genLoadTextCall(cg_ptr8_t dest, cg_ptr8_t str, cg_size_t strLen)
{
auto & codeGen = getThreadLocalCodeGen();
auto & context = codeGen.getLLVMContext();
llvm::FunctionType * funcTy = llvm::TypeBuilder<void (const char *, const char*, size_t), false>::get(context);
llvm::CallInst * result = codeGen.CreateCall(&storeTextGen, funcTy, {dest, str, strLen});
}
void genLoadValue(cg_ptr8_t str, cg_size_t length, Sql::SqlType type, Vector & column)
{
auto & codeGen = getThreadLocalCodeGen();
// this is fine for both types of null indicators
// - there is no space within the Vector in the case of an external null indicator (see NullIndicatorTable)
// - it wont matter for internal null indicators
Sql::SqlType notNullableType = toNotNullableTy(type);
// parse value
Sql::value_op_t value;
if (type.typeID == Sql::SqlType::TypeID::TextID) {
cg_voidptr_t arrayPtr = cg_voidptr_t( llvm::cast<llvm::Value>(codeGen->CreateAlloca(llvm::Type::getInt64Ty(codeGen.getLLVMContext()),2)) );
genLoadTextCall(arrayPtr,str,length);
value = Sql::value_op_t( new Sql::Text(type, arrayPtr) );
} else {
value = Sql::Value::castString(str, length, notNullableType);
}
cg_voidptr_t destPtr = genVectoBackCall(cg_voidptr_t::fromRawPointer(&column));
// cast destination pointer
llvm::Type * sqlValuePtrTy = llvm::PointerType::getUnqual(toLLVMTy(notNullableType));
llvm::Value * sqlValuePtr = codeGen->CreatePointerCast(destPtr.getValue(), sqlValuePtrTy);
value->store(sqlValuePtr);
}
struct RowItem {
size_t length;
const char * str;
};
static llvm::Type * getRowItemTy()
{
auto & codeGen = getThreadLocalCodeGen();
auto & context = codeGen.getLLVMContext();
std::vector<llvm::Type *> members(2);
// RowItem struct members:
members[0] = cg_size_t::getType();
members[1] = cg_ptr8_t::getType();
llvm::StructType * rowItemTy = llvm::StructType::get(context, false);
rowItemTy->setBody(members);
return rowItemTy;
}
static inline llvm::Type * getRowTy(size_t columnCount, llvm::Type * rowItemTy)
{
llvm::Type * rowTy = llvm::ArrayType::get(rowItemTy, columnCount);
return rowTy;
}
llvm::Function * genLoadRowFunction(Table *table)
{
auto & codeGen = getThreadLocalCodeGen();
auto & context = codeGen.getLLVMContext();
auto & moduleGen = codeGen.getCurrentModuleGen();
// prototype: loadRow(RowItem items[])
llvm::FunctionType * funcTy = llvm::TypeBuilder<void (void *), false>::get(context);
FunctionGen funcGen(moduleGen, "loadRow", funcTy);
llvm::Type * rowItemTy = getRowItemTy();
// get types
llvm::Type * rowTy = getRowTy(table->getColumnCount(), rowItemTy);
// cast row pointer
llvm::Value * rawPtr = funcGen.getArg(0);
llvm::Value * rowPtr = codeGen->CreateBitCast(rawPtr, llvm::PointerType::getUnqual(rowTy));
// load each value within the row
size_t i = 0;
for (const std::string & column : table->getColumnNames()) {
ci_p_t ci = table->getCI(column);
#ifdef __APPLE__
llvm::Value * itemPtr = codeGen->CreateGEP(rowTy, rowPtr, { cg_size_t(0ull), cg_size_t(i) });
#else
llvm::Value * itemPtr = codeGen->CreateGEP(rowTy, rowPtr, { cg_size_t(0ul), cg_size_t(i) });
#endif
llvm::Value * lengthPtr = codeGen->CreateStructGEP(rowItemTy, itemPtr, 0);
llvm::Value * strPtr = codeGen->CreateStructGEP(rowItemTy, itemPtr, 1);
llvm::Value * length = codeGen->CreateLoad(lengthPtr);
llvm::Value * str = codeGen->CreateLoad(strPtr);
genLoadValue(cg_ptr8_t(str), cg_size_t(length), ci->type, *ci->column);
i += 1;
}
return funcGen.getFunction();
}
typedef void (* FunPtr)(void *);
void loadTable(std::istream & stream, Table* table, int tableType)
{
auto & codeGen = getThreadLocalCodeGen();
auto & moduleGen = codeGen.getCurrentModuleGen();
llvm::Function * loadFun = genLoadRowFunction(table);
// compile
llvm::EngineBuilder eb( moduleGen.finalizeModule() );
auto ee = std::unique_ptr<llvm::ExecutionEngine>( eb.create() );
ee->finalizeObject();
// lookup compiled function
FunPtr f = reinterpret_cast<FunPtr>(ee->getPointerToFunction(loadFun));
// Branch ID generator
std::default_random_engine generator;
size_t tid = 0;
// load each row
std::string rowStr;
std::vector<RowItem> row(table->getColumnCount());
while (std::getline(stream, rowStr)) {
table->addRow(0);
std::vector<std::string> items = split(rowStr, '|');
assert(row.size() == items.size());
if (tableType == 1) {
items[3] = std::to_string(tid);
}
if (tableType == 2) {
items[0] = std::to_string(tid);
}
size_t i = 0;
for (const std::string & itemStr : items) {
RowItem & item = row[i];
item.length = itemStr.size();
item.str = itemStr.c_str();
i += 1;
}
// load row
f(row.data());
tid++;
}
}
void loadWikiDb(Database *db, int lowerBound, int upperBound)
{
std::stringstream ssRange;
ssRange << "_";
ssRange << lowerBound;
ssRange << "_";
ssRange << upperBound;
std::string pageRangeStr = ssRange.str();
std::string pageFileName = "page" + pageRangeStr + ".tbl";
std::string revisionFileName = "revision" + pageRangeStr + ".tbl";
std::string contentFileName = "content" + pageRangeStr + ".tbl";
std::string userFileName = "user" + pageRangeStr + ".tbl";
QueryCompiler::compileAndExecute("CREATE TABLE user ( id INTEGER NOT NULL, name TEXT NOT NULL );",*db);
QueryCompiler::compileAndExecute("CREATE TABLE page ( id INTEGER NOT NULL, title TEXT NOT NULL);",*db);
QueryCompiler::compileAndExecute("CREATE TABLE revision ( id INTEGER NOT NULL, parentId INTEGER NOT NULL, pageId INTEGER NOT NULL, textId INTEGER NOT NULL, userId INTEGER NOT NULL);",*db);
QueryCompiler::compileAndExecute("CREATE TABLE content ( id INTEGER NOT NULL, text TEXT NOT NULL);",*db);
{
ModuleGen moduleGen("LoadTableModule");
Table *item = db->getTable("user");
std::ifstream fs(userFileName);
if (!fs) { throw std::runtime_error("file not found: tables/user.tbl"); }
loadTable(fs, item,0);
fs.close();
}
{
ModuleGen moduleGen("LoadTableModule");
Table *item = db->getTable("page");
std::ifstream fs(pageFileName);
if (!fs) { throw std::runtime_error("file not found: tables/page.tbl"); }
loadTable(fs, item,0);
fs.close();
}
{
ModuleGen moduleGen("LoadTableModule");
Table *item = db->getTable("content");
std::ifstream fs(contentFileName);
if (!fs) { throw std::runtime_error("file not found: tables/content.tbl"); }
loadTable(fs, item,2);
fs.close();
}
{
ModuleGen moduleGen("LoadTableModule");
Table *item = db->getTable("revision");
std::ifstream fs(revisionFileName);
if (!fs) { throw std::runtime_error("file not found: tables/revision.tbl"); }
loadTable(fs, item,1);
fs.close();
}
std::cout << "Table Sizes:\n";
std::cout << "User:\t" << db->getTable("user")->size() << "\n";
std::cout << "Page:\t" << db->getTable("page")->size() << "\n";
std::cout << "Revision:\t" << db->getTable("revision")->size() << "\n";
std::cout << "Content:\t" << db->getTable("content")->size() << "\n";
}
#endif
void benchmarkQuery(std::string query, Database &db, unsigned runs) {
std::vector<QueryCompiler::BenchmarkResult> results;
#ifdef PERF_AVAILABLE
std::string header;
std::string data;
BenchmarkParameters params;
{
PerfEventBlock e(runs, params, false);
#endif
for (int i = 0; i < runs; i++) {
results.push_back(QueryCompiler::compileAndBenchmark(query, db));
}
#ifdef PERF_AVAILABLE
}
#endif
double parsingTime = 0;
double analsingTime = 0;
double translationTime = 0;
double compileTime = 0;
double executionTime = 0;
for (auto &result : results) {
parsingTime += result.parsingTime;
analsingTime += result.analysingTime;
translationTime += result.translationTime;
compileTime += result.llvmCompilationTime;
executionTime += result.executionTime;
}
double sum = parsingTime + analsingTime + translationTime + compileTime + executionTime;
std::cout << std::fixed << (parsingTime / runs) << " , " << (analsingTime / runs) << " , " << (translationTime / runs) << " , " << (compileTime / runs) << " , " << (executionTime / runs) << " , " << (sum / runs) << std::endl;
}
void prompt(Database &database, unsigned runs)
{
while (true) {
try {
fflush(stdout);
std::string input = readline();
if (input == "quit\n") {
break;
}
benchmarkQuery(input,database,runs);
} catch (const std::exception & e) {
fprintf(stderr, "Exception: %s\n", e.what());
}
}
}
int main(int argc, char * argv[]) {
gflags::SetUsageMessage("semanticalBench [-b] [-l <Database Name>] [-d <Master Share>] [-r <Runs per Statement>]");
gflags::ParseCommandLineFlags(&argc, &argv, true);
llvm::InitializeNativeTarget();
llvm::InitializeNativeTargetAsmPrinter();
llvm::InitializeNativeTargetAsmParser();
std::unique_ptr<Database> db = std::make_unique<Database>();
loadWikiDb(db.get(),FLAGS_lowerBound,FLAGS_upperBound);
prompt(*db,FLAGS_r);
llvm::llvm_shutdown();
}
/*void genLoadValue(cg_ptr8_t str, cg_size_t length, Sql::SqlType type, Vector & column)
{
auto & codeGen = getThreadLocalCodeGen();
// this is fine for both types of null indicators
// - there is no space within the Vector in the case of an external null indicator (see NullIndicatorTable)
// - it wont matter for internal null indicators
Sql::SqlType notNullableType = toNotNullableTy(type);
// parse value
Sql::value_op_t value = Sql::Value::castString(str, length, notNullableType);
cg_voidptr_t destPtr = genVectoBackCall(cg_voidptr_t::fromRawPointer(&column));
// cast destination pointer
llvm::Type * sqlValuePtrTy = llvm::PointerType::getUnqual(toLLVMTy(notNullableType));
llvm::Value * sqlValuePtr = codeGen->CreatePointerCast(destPtr.getValue(), sqlValuePtrTy);
value->store(sqlValuePtr);
}
struct RowItem {
size_t length;
const char * str;
};
static llvm::Type * getRowItemTy()
{
auto & codeGen = getThreadLocalCodeGen();
auto & context = codeGen.getLLVMContext();
std::vector<llvm::Type *> members(2);
// RowItem struct members:
members[0] = cg_size_t::getType();
members[1] = cg_ptr8_t::getType();
llvm::StructType * rowItemTy = llvm::StructType::get(context, false);
rowItemTy->setBody(members);
return rowItemTy;
}
static inline llvm::Type * getRowTy(size_t columnCount, llvm::Type * rowItemTy)
{
llvm::Type * rowTy = llvm::ArrayType::get(rowItemTy, columnCount);
return rowTy;
}
llvm::Function * genLoadRowFunction(Table *table)
{
auto & codeGen = getThreadLocalCodeGen();
auto & context = codeGen.getLLVMContext();
auto & moduleGen = codeGen.getCurrentModuleGen();
std::set<uint32_t> timestamp_columns = {};
int j = 0;
for (auto &columnName : table->getColumnNames()) {
if (table->getCI(columnName)->type.typeID == Sql::SqlType::TypeID::TimestampID) {
timestamp_columns.insert(j);
}
j++;
}
const char * sampleTimestamp = "20-07-09 13:56:24.0600";
// prototype: loadRow(RowItem items[])
llvm::FunctionType * funcTy = llvm::TypeBuilder<void (void *), false>::get(context);
FunctionGen funcGen(moduleGen, "loadRow", funcTy);
// get types
llvm::Type * rowItemTy = getRowItemTy();
llvm::Type * rowTy = getRowTy(table->getColumnCount(), rowItemTy);
// cast row pointer
llvm::Value * rawPtr = funcGen.getArg(0);
llvm::Value * rowPtr = codeGen->CreateBitCast(rawPtr, llvm::PointerType::getUnqual(rowTy));
// load each value within the row
size_t i = 0;
for (const std::string & column : table->getColumnNames()) {
ci_p_t ci = table->getCI(column);
#ifdef __APPLE__
llvm::Value * itemPtr = codeGen->CreateGEP(rowTy, rowPtr, { cg_size_t(0ull), cg_size_t(i) });
#else
llvm::Value * itemPtr = codeGen->CreateGEP(rowTy, rowPtr, { cg_size_t(0ul), cg_size_t(i) });
#endif
llvm::Value * lengthPtr = codeGen->CreateStructGEP(rowItemTy, itemPtr, 0);
llvm::Value * strPtr = codeGen->CreateStructGEP(rowItemTy, itemPtr, 1);
llvm::Value * length = codeGen->CreateLoad(lengthPtr);
llvm::Value * str = codeGen->CreateLoad(strPtr);
if (timestamp_columns.count(i) > 0) {
genLoadValue(cg_ptr8_t::fromRawPointer(sampleTimestamp), cg_size_t(22), ci->type, *ci->column);
} else {
genLoadValue(cg_ptr8_t(str), cg_size_t(length), ci->type, *ci->column);
}
i += 1;
}
return funcGen.getFunction();
}
typedef void (* FunPtr)(void *);
void loadTable(std::istream & stream, Table* table, std::discrete_distribution<int> distribution)
{
auto & codeGen = getThreadLocalCodeGen();
auto & moduleGen = codeGen.getCurrentModuleGen();
llvm::Function * loadFun = genLoadRowFunction(table);
// compile
llvm::EngineBuilder eb( moduleGen.finalizeModule() );
auto ee = std::unique_ptr<llvm::ExecutionEngine>( eb.create() );
ee->finalizeObject();
// lookup compiled function
FunPtr f = reinterpret_cast<FunPtr>(ee->getPointerToFunction(loadFun));
// Branch ID generator
std::default_random_engine generator;
// load each row
std::string rowStr;
std::vector<RowItem> row(table->getColumnCount());
while (std::getline(stream, rowStr)) {
int branchId = distribution(generator);
table->_version_mgmt_column.push_back(std::make_unique<VersionEntry>());
VersionEntry * version_entry = table->_version_mgmt_column.back().get();
version_entry->first = version_entry;
version_entry->next = nullptr;
version_entry->next_in_branch = nullptr;
// branch visibility
version_entry->branch_id = branchId;
version_entry->branch_visibility.resize(distribution.probabilities().size(), false);
version_entry->branch_visibility.set(branchId);
version_entry->creation_ts = distribution.probabilities().size();
table->addRow(branchId);
std::vector<std::string> items = split(rowStr, '|');
assert(row.size() == items.size());
size_t i = 0;
for (const std::string & itemStr : items) {
RowItem & item = row[i];
item.length = itemStr.size();
item.str = itemStr.c_str();
i += 1;
}
// load row
f(row.data());
}
}
void loadWikiTable(std::istream & stream, bool isDistributing, Table* table, std::discrete_distribution<int> distribution, int groupByColumn)
{
auto & codeGen = getThreadLocalCodeGen();
auto & moduleGen = codeGen.getCurrentModuleGen();
llvm::Function * loadFun = genLoadRowFunction(table);
// compile
llvm::EngineBuilder eb( moduleGen.finalizeModule() );
auto ee = std::unique_ptr<llvm::ExecutionEngine>( eb.create() );
ee->finalizeObject();
// lookup compiled function
FunPtr f = reinterpret_cast<FunPtr>(ee->getPointerToFunction(loadFun));
// Branch ID generator
std::default_random_engine generator;
std::vector<RowItem> row(table->getColumnCount());
// load each row
std::string rowStr;
std::string currentGroupItem = "";
std::vector<std::vector<std::string>> pageRows;
std::vector<int> branchMappings;
while (std::getline(stream, rowStr)) {
std::vector<std::string> items = split(rowStr, '|');
if (currentGroupItem.compare("") == 0) {
currentGroupItem = items[groupByColumn];
if (isDistributing) {
branchMappings.push_back(distribution(generator));
} else {
branchMappings.push_back(0);
}
pageRows.push_back(items);
continue;
}
if (currentGroupItem.compare(items[groupByColumn]) != 0) {
assert(pageRows.size() == branchMappings.size());
std::sort(branchMappings.begin(),branchMappings.end());
for (int j=0; j<pageRows.size(); j++) {
table->_version_mgmt_column.push_back(std::make_unique<VersionEntry>());
VersionEntry * version_entry = table->_version_mgmt_column.back().get();
version_entry->first = version_entry;
version_entry->next = nullptr;
version_entry->next_in_branch = nullptr;
// branch visibility
version_entry->branch_id = branchMappings[j];
version_entry->branch_visibility.resize(distribution.probabilities().size(), false);
version_entry->branch_visibility.set(branchMappings[j]);
version_entry->creation_ts = distribution.probabilities().size();
table->addRow(branchMappings[j]);
assert(row.size() == pageRows[j].size());
size_t i = 0;
for (const std::string & itemStr : pageRows[j]) {
RowItem & item = row[i];
item.length = itemStr.size();
item.str = itemStr.c_str();
i += 1;
}
// load row
f(row.data());
}
currentGroupItem = items[groupByColumn];
branchMappings.clear();
pageRows.clear();
}
if (isDistributing) {
branchMappings.push_back(distribution(generator));
} else {
branchMappings.push_back(0);
}
pageRows.push_back(items);
}
assert(pageRows.size() == branchMappings.size());
for (int j=0; j<pageRows.size(); j++) {
table->_version_mgmt_column.push_back(std::make_unique<VersionEntry>());
VersionEntry * version_entry = table->_version_mgmt_column.back().get();
version_entry->first = version_entry;
version_entry->next = nullptr;
version_entry->next_in_branch = nullptr;
// branch visibility
version_entry->branch_id = branchMappings[j];
version_entry->branch_visibility.resize(distribution.probabilities().size(), false);
version_entry->branch_visibility.set(branchMappings[j]);
version_entry->creation_ts = distribution.probabilities().size();
table->addRow(branchMappings[j]);
assert(row.size() == pageRows[j].size());
size_t i = 0;
for (const std::string & itemStr : pageRows[j]) {
RowItem & item = row[i];
item.length = itemStr.size();
item.str = itemStr.c_str();
i += 1;
}
// load row
f(row.data());
}
}
std::unique_ptr<Database> loadTPCC() {
auto tpccDb = std::make_unique<Database>();
{
ModuleGen moduleGen("LoadTableModule");
auto & warehouse = tpccDb->createTable("warehouse");
warehouse.addColumn("w_id", Sql::getIntegerTy(false));
warehouse.addColumn("w_name", Sql::getVarcharTy(10, false));
warehouse.addColumn("w_street_1", Sql::getVarcharTy(20, false));
warehouse.addColumn("w_street_2", Sql::getVarcharTy(20, false));
warehouse.addColumn("w_city", Sql::getVarcharTy(20, false));
warehouse.addColumn("w_state", Sql::getCharTy(2, false));
warehouse.addColumn("w_zip", Sql::getCharTy(9, false));
warehouse.addColumn("w_tax", Sql::getNumericTy(4, 4, false));
warehouse.addColumn("w_ytd", Sql::getNumericTy(12, 2, false));
}
{
ModuleGen moduleGen("LoadTableModule");
auto & district = tpccDb->createTable("district");
district.addColumn("d_id", Sql::getIntegerTy(false));
district.addColumn("d_w_id", Sql::getIntegerTy(false));
district.addColumn("d_name", Sql::getVarcharTy(10, false));
district.addColumn("d_street_1", Sql::getVarcharTy(20, false));
district.addColumn("d_street_2", Sql::getVarcharTy(20, false));
district.addColumn("d_city", Sql::getVarcharTy(20, false));
district.addColumn("d_state", Sql::getCharTy(2, false));
district.addColumn("d_zip", Sql::getCharTy(9, false));
district.addColumn("d_tax", Sql::getNumericTy(4, 4, false));
district.addColumn("d_ytd", Sql::getNumericTy(12, 2, false));
district.addColumn("d_next_o_id", Sql::getIntegerTy(false));
}
{
ModuleGen moduleGen("LoadTableModule");
auto & customer = tpccDb->createTable("customer");
customer.addColumn("c_id", Sql::getIntegerTy(false));
customer.addColumn("c_d_id", Sql::getIntegerTy(false));
customer.addColumn("c_w_id", Sql::getIntegerTy(false));
customer.addColumn("c_:first", Sql::getVarcharTy(16, false));
customer.addColumn("c_middle", Sql::getCharTy(2, false));
customer.addColumn("c_last", Sql::getVarcharTy(16, false));
customer.addColumn("c_street_1", Sql::getVarcharTy(20, false));
customer.addColumn("c_street_2", Sql::getVarcharTy(20, false));
customer.addColumn("c_city", Sql::getVarcharTy(20, false));
customer.addColumn("c_state", Sql::getCharTy(2, false));
customer.addColumn("c_zip", Sql::getCharTy(9, false));
customer.addColumn("c_phone", Sql::getCharTy(16, false));
customer.addColumn("c_since", Sql::getTimestampTy(false));
customer.addColumn("c_credit", Sql::getCharTy(2, false));
customer.addColumn("c_credit_lim", Sql::getNumericTy(12, 2, false));
customer.addColumn("c_discount", Sql::getNumericTy(4, 4, false));
customer.addColumn("c_balance", Sql::getNumericTy(12, 2, false));
customer.addColumn("c_ytd_paymenr", Sql::getNumericTy(12, 2, false));
customer.addColumn("c_payment_cnt", Sql::getNumericTy(4, 0, false));
customer.addColumn("c_delivery_cnt", Sql::getNumericTy(4, 0, false));
customer.addColumn("c_data", Sql::getVarcharTy(500, false));
}
{
ModuleGen moduleGen("LoadTableModule");
auto & history = tpccDb->createTable("history");
history.addColumn("h_c_id", Sql::getIntegerTy(false));
history.addColumn("h_c_d_id", Sql::getIntegerTy(false));
history.addColumn("h_c_w_id", Sql::getIntegerTy(false));
history.addColumn("h_d_id", Sql::getIntegerTy(false));
history.addColumn("h_w_id", Sql::getIntegerTy(false));
history.addColumn("h_date", Sql::getTimestampTy(false));
history.addColumn("h_amount", Sql::getNumericTy(6, 2, false));
history.addColumn("h_data", Sql::getVarcharTy(24, false));
}
{
ModuleGen moduleGen("LoadTableModule");
auto & neworder = tpccDb->createTable("neworder");
neworder.addColumn("no_o_id", Sql::getIntegerTy(false));
neworder.addColumn("no_d_id", Sql::getIntegerTy(false));
neworder.addColumn("no_w_id", Sql::getIntegerTy(false));
}
{
ModuleGen moduleGen("LoadTableModule");
auto & order = tpccDb->createTable("order");
order.addColumn("o_id", Sql::getIntegerTy(false));
order.addColumn("o_d_id", Sql::getIntegerTy(false));
order.addColumn("o_w_id", Sql::getIntegerTy(false));
order.addColumn("o_c_id", Sql::getIntegerTy(false));
order.addColumn("o_entry_d", Sql::getTimestampTy(false));
order.addColumn("o_carrier_id", Sql::getIntegerTy(false));
order.addColumn("o_ol_cnt", Sql::getNumericTy(2, 0, false));
order.addColumn("o_all_local", Sql::getNumericTy(1, 0, false));
}
{
ModuleGen moduleGen("LoadTableModule");
auto & orderline = tpccDb->createTable("orderline");
orderline.addColumn("ol_o_id", Sql::getIntegerTy(false));
orderline.addColumn("ol_d_id", Sql::getIntegerTy(false));
orderline.addColumn("ol_w_id", Sql::getIntegerTy(false));
orderline.addColumn("ol_number", Sql::getIntegerTy(false));
orderline.addColumn("ol_i_id", Sql::getIntegerTy(false));
orderline.addColumn("ol_supply_w_id", Sql::getIntegerTy(false));
orderline.addColumn("ol_delivery_d", Sql::getTimestampTy(false));
orderline.addColumn("ol_quantity", Sql::getNumericTy(2, 0, false));
orderline.addColumn("ol_amount", Sql::getNumericTy(6, 2, false));
orderline.addColumn("ol_dist_info", Sql::getCharTy(24, false));
}
{
ModuleGen moduleGen("LoadTableModule");
auto & item = tpccDb->createTable("item");
item.addColumn("i_id", Sql::getIntegerTy(false));
item.addColumn("i_im_id", Sql::getIntegerTy(false));
item.addColumn("i_name", Sql::getVarcharTy(24, false));
item.addColumn("i_price", Sql::getNumericTy(5, 2, false));
item.addColumn("i_data", Sql::getVarcharTy(50, false));
}
{
ModuleGen moduleGen("LoadTableModule");
auto & stock = tpccDb->createTable("stock");
stock.addColumn("s_i_id", Sql::getIntegerTy(false));
stock.addColumn("s_w_id", Sql::getIntegerTy(false));
stock.addColumn("s_quantity", Sql::getNumericTy(4, 0, false));
stock.addColumn("s_dist_01", Sql::getCharTy(24, false));
stock.addColumn("s_dist_02", Sql::getCharTy(24, false));
stock.addColumn("s_dist_03", Sql::getCharTy(24, false));
stock.addColumn("s_dist_04", Sql::getCharTy(24, false));
stock.addColumn("s_dist_05", Sql::getCharTy(24, false));
stock.addColumn("s_dist_06", Sql::getCharTy(24, false));
stock.addColumn("s_dist_07", Sql::getCharTy(24, false));
stock.addColumn("s_dist_08", Sql::getCharTy(24, false));
stock.addColumn("s_dist_09", Sql::getCharTy(24, false));
stock.addColumn("s_dist_10", Sql::getCharTy(24, false));
stock.addColumn("s_ytd", Sql::getNumericTy(8, 0, false));
stock.addColumn("s_order_cnt", Sql::getNumericTy(4, 0, false));
stock.addColumn("s_remote_cnt", Sql::getNumericTy(4, 0, false));
stock.addColumn("s_data", Sql::getVarcharTy(50, false));
}
std::discrete_distribution<int> distribution = { 1 , 1 };
branch_id_t highestBranchID = 0;
for (int i=1; i<distribution.probabilities().size(); i++) {
std::string branchName = "branch";
branchName += std::to_string(i);
highestBranchID = tpccDb->createBranch(branchName,highestBranchID);
}
{
ModuleGen moduleGen("LoadTableModule");
Table *warehouse = tpccDb->getTable("warehouse");
std::ifstream fs("../tables/tpc-c/tpcc_warehouse.tbl");
if (!fs) { throw std::runtime_error("file not found: tables/warehouse.tbl"); }
loadTable(fs, warehouse, distribution);
}
{
ModuleGen moduleGen("LoadTableModule");
Table *district = tpccDb->getTable("district");
std::ifstream fs("../tables/tpc-c/tpcc_district.tbl");
if (!fs) { throw std::runtime_error("file not found: tables/district.tbl"); }
loadTable(fs, district, distribution);
}
{
ModuleGen moduleGen("LoadTableModule");
Table *customer = tpccDb->getTable("customer");
std::ifstream fs("../tables/tpc-c/tpcc_customer.tbl");
if (!fs) { throw std::runtime_error("file not found: tables/customer.tbl"); }
loadTable(fs, customer, distribution);
}
{
ModuleGen moduleGen("LoadTableModule");
Table *history = tpccDb->getTable("history");
std::ifstream fs("../tables/tpc-c/tpcc_history.tbl");
if (!fs) { throw std::runtime_error("file not found: tables/history.tbl"); }
loadTable(fs, history, distribution);
}
{
ModuleGen moduleGen("LoadTableModule");
Table *neworder = tpccDb->getTable("neworder");
std::ifstream fs("../tables/tpc-c/tpcc_neworder.tbl");
if (!fs) { throw std::runtime_error("file not found: tables/neworder.tbl"); }
loadTable(fs, neworder, distribution);
}
{
ModuleGen moduleGen("LoadTableModule");
Table *order = tpccDb->getTable("order");
std::ifstream fs("../tables/tpc-c/tpcc_order.tbl");
if (!fs) { throw std::runtime_error("file not found: tables/order.tbl"); }
loadTable(fs, order, distribution);
}
{
ModuleGen moduleGen("LoadTableModule");
Table *orderline = tpccDb->getTable("orderline");
std::ifstream fs("../tables/tpc-c/tpcc_orderline.tbl");
if (!fs) { throw std::runtime_error("file not found: tables/orderline.tbl"); }
loadTable(fs, orderline, distribution);
}
{
ModuleGen moduleGen("LoadTableModule");
Table *item = tpccDb->getTable("item");
std::ifstream fs("../tables/tpc-c/tpcc_item.tbl");
if (!fs) { throw std::runtime_error("file not found: tables/item.tbl"); }
loadTable(fs, item, distribution);
}
{
ModuleGen moduleGen("LoadTableModule");
Table *stock = tpccDb->getTable("stock");
std::ifstream fs("../tables/tpc-c/tpcc_stock.tbl");
if (!fs) { throw std::runtime_error("file not found: tables/stock.tbl"); }
loadTable(fs, stock, distribution);
}
std::cout << "Table Sizes:\n";
std::cout << "Warehouse:\t" << tpccDb->getTable("warehouse")->size() << "\n";
std::cout << "District:\t" << tpccDb->getTable("district")->size() << "\n";
std::cout << "Customer:\t" << tpccDb->getTable("customer")->size() << "\n";
std::cout << "History:\t" << tpccDb->getTable("history")->size() << "\n";
std::cout << "NewOrder:\t" << tpccDb->getTable("neworder")->size() << "\n";
std::cout << "Order:\t\t" << tpccDb->getTable("order")->size() << "\n";
std::cout << "Orderline:\t" << tpccDb->getTable("orderline")->size() << "\n";
std::cout << "Item:\t\t" << tpccDb->getTable("item")->size() << "\n";
std::cout << "Stock:\t\t" << tpccDb->getTable("stock")->size() << "\n";
return tpccDb;
}
#if LIBXML_AVAILABLE
class DistributionEngine {
public:
std::discrete_distribution<int> distribution = { 1 , 1 };
std::default_random_engine generator;
DistributionEngine(std::discrete_distribution<int> distribution) : distribution(distribution) {}
int generate() {
distribution(generator);
}
};
std::unique_ptr<Database> generateWikiTBL() {
auto tpccDb = std::make_unique<Database>();
QueryCompiler::compileAndExecute("CREATE TABLE page ( id INTEGER NOT NULL, title VARCHAR ( 30 ) NOT NULL);",*tpccDb);
QueryCompiler::compileAndExecute("CREATE TABLE revision ( id INTEGER NOT NULL, parentId INTEGER NOT NULL, pageId INTEGER NOT NULL, textId INTEGER NOT NULL);",*tpccDb);
QueryCompiler::compileAndExecute("CREATE TABLE content ( id INTEGER NOT NULL, text VARCHAR ( 32 ) NOT NULL);",*tpccDb);
QueryCompiler::compileAndExecute("CREATE BRANCH branch1 FROM master;",*tpccDb);
DistributionEngine distributionEngine = DistributionEngine({ 2 , 1 });
std::function<void(wikiparser::Page,std::vector<wikiparser::Revision>,std::vector<wikiparser::Content>,std::vector<wikiparser::User>)> insertCallback =
[db = tpccDb.get(),distributionEnginePtr = &distributionEngine](wikiparser::Page page, std::vector<wikiparser::Revision> revisions, std::vector<wikiparser::Content> contents, std::vector<wikiparser::User> users) {
if (revisions.size() != contents.size()) return;
std::vector<int> branchMappings(0);
for (int i=0; i<revisions.size();i++) {
branchMappings.push_back(distributionEnginePtr->generate());
}
std::sort(branchMappings.begin(),branchMappings.end());
std::string statement = "";
std::stringstream ss;
ss << "INSERT INTO page ( id , title ) VALUES ( ";
ss << page.id;
ss << " , '";
std::replace( page.title.begin(), page.title.end(), ' ', '~' );
ss << page.title;
ss << "' );";
statement = ss.str();
QueryCompiler::compileAndExecute(statement,*db);
for (int i=0; i<revisions.size(); i++) {
std::string branchID = "";
if (branchMappings[i] <= 0) {
branchID = "master";
} else {
std::stringstream ssBranch;
ssBranch << "branch";
ssBranch << branchMappings[i];
branchID = ssBranch.str();
}
std::stringstream ssContent;
ssContent << "INSERT INTO content VERSION ";
ssContent << branchID;
ssContent << " ( id , text ) VALUES ( ";
ssContent << contents[i].textid;
ssContent << " , '";
std::replace( contents[i].text.begin(), contents[i].text.end(), ' ', '~' );
ssContent << contents[i].text;
ssContent << "' );";
statement = ssContent.str();
QueryCompiler::compileAndExecute(statement,*db);
std::stringstream ssRevision;
ssRevision << "INSERT INTO revision VERSION ";
ssRevision << branchID;
ssRevision << " ( id , parentId , pageId , textId ) VALUES ( ";
ssRevision << revisions[i].id;
ssRevision << " , ";
ssRevision << revisions[i].parent;
ssRevision << " , ";
ssRevision << page.id;
ssRevision << " , ";
ssRevision << contents[i].textid;
ssRevision << " );";
statement = ssRevision.str();
QueryCompiler::compileAndExecute(statement,*db);
}
};
try
{
wikiparser::WikiParser parser(insertCallback);
parser.set_substitute_entities(true);
parser.parse_file("samplePage.xml");
}
catch(const xmlpp::exception& ex)
{
std::cerr << "libxml++ exception: " << ex.what() << std::endl;
}
std::cout << "Table Sizes:\n";
std::cout << "Page:\t" << tpccDb->getTable("page")->size() << "\n";
std::cout << "Revision:\t" << tpccDb->getTable("revision")->size() << "\n";
std::cout << "Content:\t" << tpccDb->getTable("content")->size() << "\n";
return tpccDb;
}
#endif
std::unique_ptr<Database> loadWiki(std::discrete_distribution<int> &distribution) {
auto wikidb = std::make_unique<Database>();
QueryCompiler::compileAndExecute("CREATE TABLE page ( id INTEGER NOT NULL, title VARCHAR ( 30 ) NOT NULL);",*wikidb);
QueryCompiler::compileAndExecute("CREATE TABLE revision ( id INTEGER NOT NULL, parentId INTEGER NOT NULL, pageId INTEGER NOT NULL, textId INTEGER NOT NULL);",*wikidb);
QueryCompiler::compileAndExecute("CREATE TABLE content ( id INTEGER NOT NULL, text VARCHAR ( 32 ) NOT NULL);",*wikidb);
branch_id_t highestBranchID = 0;
for (int i=1; i<distribution.probabilities().size(); i++) {
std::string branchName = "branch";
branchName += std::to_string(i);
highestBranchID = wikidb->createBranch(branchName,highestBranchID);
}
{
ModuleGen moduleGen("LoadTableModule");
Table *item = wikidb->getTable("page");
std::ifstream fs("page_trunc.tbl");
if (!fs) { throw std::runtime_error("file not found: tables/page.tbl"); }
loadWikiTable(fs, false, item, distribution,0);
}
{
ModuleGen moduleGen("LoadTableModule");
Table *item = wikidb->getTable("content");
std::ifstream fs("content_trunc.tbl");
if (!fs) { throw std::runtime_error("file not found: tables/content.tbl"); }
loadWikiTable(fs, true, item, distribution,0);
}
{
ModuleGen moduleGen("LoadTableModule");
Table *item = wikidb->getTable("revision");
std::ifstream fs("revision_trunc.tbl");
if (!fs) { throw std::runtime_error("file not found: tables/revision.tbl"); }
loadWikiTable(fs, true, item, distribution,2);
}
std::cout << "Table Sizes:\n";
std::cout << "Page:\t" << wikidb->getTable("page")->size() << "\n";
std::cout << "Revision:\t" << wikidb->getTable("revision")->size() << "\n";
std::cout << "Content:\t" << wikidb->getTable("content")->size() << "\n";
return wikidb;
}*/
\ No newline at end of file
#!/bin/bash
if [[ $platform == 'linux' ]]; then
Color_Off='\033[0m'
Green='\033[0;32m'
Yellow='\033[0;33m'
Red='\033[0;31m'
else
Color_Off=''
Green=''
Yellow=''
Red=''
fi
COMMIT_ID=$(git rev-parse --verify HEAD)
benchmark_input() {
# Execute benchmark program and write output to file
(./semanticalBench "-d=$5" "-r=$4" "--lowerBound=$6" "--upperBound=$7" < $1) | cat > output.txt
# Declare metric arrays
declare -a parsing_times
declare -a analysing_times
declare -a translation_times
declare -a compile_times
declare -a execution_times
declare -a sums
declare -a time_sec
declare -a cycles
declare -a instructions
declare -a l1_misses
declare -a llc_misses
declare -a branch_misses
declare -a task_clock
declare -a scale
declare -a ipc
declare -a cpus
declare -a ghz
declare -a loadDuration
declare -a pageSize
declare -a userSize
# Retrieve metrics from file
input="output.txt"
#lineCounter=0
#insertLimit=$6
while IFS= read -r line
do
# Skip all insert and update statements which are responsible for loading the data into storage
#((lineCounter=lineCounter+1))
#if [ $lineCounter -le $(($insertLimit)) ]; then
# continue
#fi
IFS=','
read -ra METRICS <<< "$line"
if [ "${#METRICS[@]}" = "1" ]; then
loadDurationCandidate=$(echo ${METRICS[0]} | grep 'LoadDuration' | cut -f2 -d ":")
loadDurationCandidate=$(echo -e "$loadDurationCandidate" | tr -d '[:space:]')
if [[ $loadDurationCandidate != "" ]]; then
loadDuration=$(echo $loadDurationCandidate)
fi
pageSizeCandidate=$(echo ${METRICS[0]} | grep 'Page' | cut -f2 -d ":")
pageSizeCandidate=$(echo -e "$pageSizeCandidate" | tr -d '[:space:]')
if [[ $pageSizeCandidate != "" ]]; then
pageSize=$(echo $pageSizeCandidate)
fi
userSizeCandidate=$(echo ${METRICS[0]} | grep 'User' | cut -f2 -d ":")
userSizeCandidate=$(echo -e "$userSizeCandidate" | tr -d '[:space:]')
if [[ $userSizeCandidate != "" ]]; then
userSize=$(echo $userSizeCandidate)
fi
fi
if [ "${#METRICS[@]}" = "6" ]; then
for i in "${!METRICS[@]}"; do
case "$i" in
0) parsing_times+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
1) analysing_times+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
2) translation_times+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
3) compile_times+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
4) execution_times+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
5) sums+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
esac
done
fi
if [ "${#METRICS[@]}" = "11" ]; then
for i in "${!METRICS[@]}"; do
case "$i" in
0) time_sec+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
1) cycles+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
2) instructions+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
3) l1_misses+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
4) llc_misses+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
5) branch_misses+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
6) task_clock+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
7) scale+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
8) ipc+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
9) cpus+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
10) ghz+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
esac
done
fi
done < "$input"
#Cleanup
rm output.txt
# Sum up all same metrics
parsing_time=0
analysing_time=0
translation_time=0
compile_time=0
execution_time=0
sum=0
counter=0
TIME_SEC=0
CYCLES=0
INSTRUCTIONS=0
L1_MISSES=0
LLC_MISSES=0
BRANCH_MISSES=0
TASK_CLOCK=0
SCALE=0
IPC=0
CPUS=0
GHZ=0
for i in "${!parsing_times[@]}"; do
parsing_time=$(bc -l <<<"${parsing_time}+${parsing_times[i]}")
analysing_time=$(bc -l <<<"${analysing_time}+${analysing_times[i]}")
translation_time=$(bc -l <<<"${translation_time}+${translation_times[i]}")
compile_time=$(bc -l <<<"${compile_time}+${compile_times[i]}")
execution_time=$(bc -l <<<"${execution_time}+${execution_times[i]}")
sum=$(bc -l <<<"${sum}+${sums[i]}")
counter=$(bc -l <<<"${counter}+1")
done
parsing_time=$(bc -l <<<"${parsing_time}/${counter}")
analysing_time=$(bc -l <<<"${analysing_time}/${counter}")
translation_time=$(bc -l <<<"${translation_time}/${counter}")
compile_time=$(bc -l <<<"${compile_time}/${counter}")
execution_time=$(bc -l <<<"${execution_time}/${counter}")
sum=$(bc -l <<<"${sum}/${counter}")
counter=0
for i in "${!time_sec[@]}"; do
TIME_SEC=$(bc -l <<<"${TIME_SEC}+${time_sec[i]}")
CYCLES=$(bc -l <<<"${CYCLES}+${cycles[i]}")
INSTRUCTIONS=$(bc -l <<<"${INSTRUCTIONS}+${instructions[i]}")
L1_MISSES=$(bc -l <<<"${L1_MISSES}+${l1_misses[i]}")
LLC_MISSES=$(bc -l <<<"${LLC_MISSES}+${llc_misses[i]}")
BRANCH_MISSES=$(bc -l <<<"${BRANCH_MISSES}+${branch_misses[i]}")
TASK_CLOCK=$(bc -l <<<"${TASK_CLOCK}+${task_clock[i]}")
SCALE=$(bc -l <<<"${SCALE}+${scale[i]}")
IPC=$(bc -l <<<"${IPC}+${ipc[i]}")
CPUS=$(bc -l <<<"${CPUS}+${cpus[i]}")
GHZ=$(bc -l <<<"${GHZ}+${ghz[i]}")
counter=$(bc -l <<<"${counter}+1")
done
if [ $counter -gt 0 ]; then
TIME_SEC=$(bc -l <<<"${TIME_SEC}/${counter}")
CYCLES=$(bc -l <<<"${CYCLES}/${counter}")
INSTRUCTIONS=$(bc -l <<<"${INSTRUCTIONS}/${counter}")
L1_MISSES=$(bc -l <<<"${L1_MISSES}/${counter}")
LLC_MISSES=$(bc -l <<<"${LLC_MISSES}/${counter}")
BRANCH_MISSES=$(bc -l <<<"${BRANCH_MISSES}/${counter}")
TASK_CLOCK=$(bc -l <<<"${TASK_CLOCK}/${counter}")
SCALE=$(bc -l <<<"${SCALE}/${counter}")
IPC=$(bc -l <<<"${IPC}/${counter}")
CPUS=$(bc -l <<<"${CPUS}/${counter}")
GHZ=$(bc -l <<<"${GHZ}/${counter}")
fi
# Append metrics to csv file
echo "$3;$5;$loadDuration;$pageSize;$userSize;${parsing_time};${analysing_time};${translation_time};${compile_time};${execution_time};${sum};${TIME_SEC};${CYCLES};${INSTRUCTIONS};${L1_MISSES};${LLC_MISSES};${BRANCH_MISSES};${TASK_CLOCK};${SCALE};${IPC};${CPUS};${GHZ}" | cat >> $2
}
benchmark_input_for_distributions() {
# cat insert_statements.txt | cat > buffer_file.txt
# cat $1 | cat >> buffer_file.txt
# IFS=' '
# read -ra LineCountInfo <<< "$(wc -l insert_statements.txt)"
# insertLimit=${LineCountInfo[0]}
# insertLimit=$(bc -l <<<"${insertLimit}*2")
# insertLimit=$(bc -l <<<"${insertLimit}+1")
benchmark_input $(echo "./benchmarkStatements/$1_23910821_23927983.txt") $2 $3 $4 "0.5" 23910821 23927983
# rm buffer_file.txt
}
OUTPUT_FILE=$(echo "../benchmarkResults/results_${COMMIT_ID}.csv")
rm $OUTPUT_FILE
echo "Type;Dist;LoadDuration;PageSize;UserSize;ParsingTime;AnalysingTime;TranslationTime;CompilationTime;ExecutionTime;Time;TimeSec;Cycles;Instructions;L1Misses;LLCMisses;BranchMisses;TaskClock;Scale;IPC;CPUS;GHZ" | cat > $OUTPUT_FILE
echo ""
echo "Benchmark Select Statements..."
benchmark_input_for_distributions ms_statements $OUTPUT_FILE 1 3
echo "Benchmark Select Statements with branching..."
benchmark_input_for_distributions b1s_statements $OUTPUT_FILE 2 3
benchmark_input_for_distributions b2s_statements $OUTPUT_FILE 3 3
echo "Benchmark Merge Statements..."
benchmark_input_for_distributions mm_statements $OUTPUT_FILE 4 1
echo "Benchmark Merge Statements with branching..."
benchmark_input_for_distributions b1m_statements $OUTPUT_FILE 5 1
benchmark_input_for_distributions b2m_statements $OUTPUT_FILE 6 1
echo "Benchmark Update Statements..."
benchmark_input_for_distributions mu_statements $OUTPUT_FILE 7 3
echo "Benchmark Update Statements with branching..."
benchmark_input_for_distributions b1u_statements $OUTPUT_FILE 8 3
benchmark_input_for_distributions b2u_statements $OUTPUT_FILE 9 3
echo "Benchmark Insert Statements..."
benchmark_input "./benchmarkStatements/mi_statements_23910821_23927983.txt" $OUTPUT_FILE 10 1 "0.5" 23910821 23927983
echo "Benchmark Insert Statements with branching..."
benchmark_input "./benchmarkStatements/bi_statements_23910821_23927983.txt" $OUTPUT_FILE 11 1 "0.5" 23910821 23927983
echo "Benchmark Delete Statements..."
benchmark_input_for_distributions md_statements $OUTPUT_FILE 12 1
echo "Benchmark Delete Statements with branching..."
benchmark_input_for_distributions b1d_statements $OUTPUT_FILE 13 1
benchmark_input_for_distributions b2d_statements $OUTPUT_FILE 14 1
#!/bin/bash
if [[ $platform == 'linux' ]]; then
Color_Off='\033[0m'
Green='\033[0;32m'
Yellow='\033[0;33m'
Red='\033[0;31m'
else
Color_Off=''
Green=''
Yellow=''
Red=''
fi
COMMIT_ID=$(git rev-parse --verify HEAD)
benchmark_input() {
# Execute benchmark program and write output to file
(./semanticalBench "-d=$5" "-r=$4" "--lowerBound=$6" "--upperBound=$7" < $1) | cat > output.txt
# Declare metric arrays
declare -a parsing_times
declare -a analysing_times
declare -a translation_times
declare -a compile_times
declare -a execution_times
declare -a sums
declare -a time_sec
declare -a cycles
declare -a instructions
declare -a l1_misses
declare -a llc_misses
declare -a branch_misses
declare -a task_clock
declare -a scale
declare -a ipc
declare -a cpus
declare -a ghz
declare -a loadDuration
declare -a pageSize
declare -a contentSize
declare -a revisionSize
declare -a userSize
# Retrieve metrics from file
input="output.txt"
while IFS= read -r line
do
IFS=','
read -ra METRICS <<< "$line"
if [ "${#METRICS[@]}" = "1" ]; then
loadDurationCandidate=$(echo ${METRICS[0]} | grep 'LoadDuration' | cut -f2 -d ":")
loadDurationCandidate=$(echo -e "$loadDurationCandidate" | tr -d '[:space:]')
if [[ $loadDurationCandidate != "" ]]; then
loadDuration=$(echo $loadDurationCandidate)
fi
pageSizeCandidate=$(echo ${METRICS[0]} | grep 'Page' | cut -f2 -d ":")
pageSizeCandidate=$(echo -e "$pageSizeCandidate" | tr -d '[:space:]')
if [[ $pageSizeCandidate != "" ]]; then
pageSize=$(echo $pageSizeCandidate)
fi
contentSizeCandidate=$(echo ${METRICS[0]} | grep 'Content' | cut -f2 -d ":")
contentSizeCandidate=$(echo -e "$contentSizeCandidate" | tr -d '[:space:]')
if [[ $contentSizeCandidate != "" ]]; then
contentSize=$(echo $contentSizeCandidate)
fi
revisionSizeCandidate=$(echo ${METRICS[0]} | grep 'Revision' | cut -f2 -d ":")
revisionSizeCandidate=$(echo -e "$revisionSizeCandidate" | tr -d '[:space:]')
if [[ $revisionSizeCandidate != "" ]]; then
revisionSize=$(echo $revisionSizeCandidate)
fi
userSizeCandidate=$(echo ${METRICS[0]} | grep 'User' | cut -f2 -d ":")
userSizeCandidate=$(echo -e "$userSizeCandidate" | tr -d '[:space:]')
if [[ $userSizeCandidate != "" ]]; then
userSize=$(echo $userSizeCandidate)
fi
fi
if [ "${#METRICS[@]}" = "6" ]; then
for i in "${!METRICS[@]}"; do
case "$i" in
0) parsing_times+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
1) analysing_times+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
2) translation_times+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
3) compile_times+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
4) execution_times+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
5) sums+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
esac
done
fi
if [ "${#METRICS[@]}" = "11" ]; then
for i in "${!METRICS[@]}"; do
case "$i" in
0) time_sec+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
1) cycles+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
2) instructions+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
3) l1_misses+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
4) llc_misses+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
5) branch_misses+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
6) task_clock+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
7) scale+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
8) ipc+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
9) cpus+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
10) ghz+=("$(echo -e "${METRICS[i]}" | tr -d '[:space:]')") ;;
esac
done
fi
done < "$input"
#Cleanup
rm output.txt
# Sum up all same metrics
parsing_time=0
analysing_time=0
translation_time=0
compile_time=0
execution_time=0
sum=0
counter=0
TIME_SEC=0
CYCLES=0
INSTRUCTIONS=0
L1_MISSES=0
LLC_MISSES=0
BRANCH_MISSES=0
TASK_CLOCK=0
SCALE=0
IPC=0
CPUS=0
GHZ=0
for i in "${!parsing_times[@]}"; do
parsing_time=$(bc -l <<<"${parsing_time}+${parsing_times[i]}")
analysing_time=$(bc -l <<<"${analysing_time}+${analysing_times[i]}")
translation_time=$(bc -l <<<"${translation_time}+${translation_times[i]}")
compile_time=$(bc -l <<<"${compile_time}+${compile_times[i]}")
execution_time=$(bc -l <<<"${execution_time}+${execution_times[i]}")
sum=$(bc -l <<<"${sum}+${sums[i]}")
done
parsing_time=$(bc -l <<<"${parsing_time}/$8")
analysing_time=$(bc -l <<<"${analysing_time}/$8")
translation_time=$(bc -l <<<"${translation_time}/$8")
compile_time=$(bc -l <<<"${compile_time}/$8")
execution_time=$(bc -l <<<"${execution_time}/$8")
sum=$(bc -l <<<"${sum}/$8")
for i in "${!time_sec[@]}"; do
TIME_SEC=$(bc -l <<<"${TIME_SEC}+${time_sec[i]}")
CYCLES=$(bc -l <<<"${CYCLES}+${cycles[i]}")
INSTRUCTIONS=$(bc -l <<<"${INSTRUCTIONS}+${instructions[i]}")
L1_MISSES=$(bc -l <<<"${L1_MISSES}+${l1_misses[i]}")
LLC_MISSES=$(bc -l <<<"${LLC_MISSES}+${llc_misses[i]}")
BRANCH_MISSES=$(bc -l <<<"${BRANCH_MISSES}+${branch_misses[i]}")
TASK_CLOCK=$(bc -l <<<"${TASK_CLOCK}+${task_clock[i]}")
SCALE=$(bc -l <<<"${SCALE}+${scale[i]}")
IPC=$(bc -l <<<"${IPC}+${ipc[i]}")
CPUS=$(bc -l <<<"${CPUS}+${cpus[i]}")
GHZ=$(bc -l <<<"${GHZ}+${ghz[i]}")
done
if [ $counter -gt 0 ]; then
TIME_SEC=$(bc -l <<<"${TIME_SEC}/$8")
CYCLES=$(bc -l <<<"${CYCLES}/$8")
INSTRUCTIONS=$(bc -l <<<"${INSTRUCTIONS}/$8")
L1_MISSES=$(bc -l <<<"${L1_MISSES}/$8")
LLC_MISSES=$(bc -l <<<"${LLC_MISSES}/$8")
BRANCH_MISSES=$(bc -l <<<"${BRANCH_MISSES}/$8")
TASK_CLOCK=$(bc -l <<<"${TASK_CLOCK}/$8")
SCALE=$(bc -l <<<"${SCALE}/$8")
IPC=$(bc -l <<<"${IPC}/$8")
CPUS=$(bc -l <<<"${CPUS}/$8")
GHZ=$(bc -l <<<"${GHZ}/$8")
fi
# Append metrics to csv file
echo "$3;$5;$pageSize;$contentSize;$revisionSize;$userSize;${parsing_time};${analysing_time};${translation_time};${compile_time};${execution_time};${sum};${TIME_SEC};${CYCLES};${INSTRUCTIONS};${L1_MISSES};${LLC_MISSES};${BRANCH_MISSES};${TASK_CLOCK};${SCALE};${IPC};${CPUS};${GHZ}" | cat >> $2
}
benchmark_input_for_distributions() {
# cat insert_statements.txt | cat > buffer_file.txt
# cat $1 | cat >> buffer_file.txt
# IFS=' '
# read -ra LineCountInfo <<< "$(wc -l insert_statements.txt)"
# insertLimit=${LineCountInfo[0]}
# insertLimit=$(bc -l <<<"${insertLimit}*2")
# insertLimit=$(bc -l <<<"${insertLimit}+1")
benchmark_input $(echo "./benchmarkStatements/$1_unv_23910821_23927983.txt") $2 $3 $4 "0.5" 23910821 23927983 100
# rm buffer_file.txt
}
OUTPUT_FILE=$(echo "../benchmarkResults/results_unv_${COMMIT_ID}.csv")
rm $OUTPUT_FILE
echo "Type;Dist;PageSize;ContentSize;RevisionSize;UserSize;ParsingTime;AnalysingTime;TranslationTime;CompilationTime;ExecutionTime;Time;TimeSec;Cycles;Instructions;L1Misses;LLCMisses;BranchMisses;TaskClock;Scale;IPC;CPUS;GHZ" | cat > $OUTPUT_FILE
echo ""
echo "Benchmark Select Statements..."
benchmark_input_for_distributions ms_statements $OUTPUT_FILE 1 3
echo "Benchmark Merge Statements..."
benchmark_input_for_distributions mm_statements $OUTPUT_FILE 4 1
echo "Benchmark Update Statements..."
benchmark_input_for_distributions mu_statements $OUTPUT_FILE 7 3
echo "Benchmark Insert Statements..."
benchmark_input "./benchmarkStatements/mi_statements_unv_23910821_23927983.txt" $OUTPUT_FILE 10 1 "0.5" 23910821 23927983 100
echo "Benchmark Delete Statements..."
benchmark_input_for_distributions md_statements $OUTPUT_FILE 12 1
#pragma once
Small: 3543ms
Big: 73072ms
Type;Dist;ParsingTime;AnalysingTime;TranslationTime;CompilationTime;ExecutionTime;Time;TimeSec;Cycles;Instructions;L1Misses;LLCMisses;BranchMisses;TaskClock;Scale;IPC;CPUS;GHZ
1;0.5;59.80000004000000000000;104.88000000000000000000;214.05333324000000000000;1979.81333336000000000000;790.05333332000000000000;3148.59999996000000000000;.01240000000000000000;10821018.49360000000000000000;10179052.49280000000000000000;79056.81400000000000000000;3701.24000000000000000000;71303.07880000000000000000;3269074.78640000000000000000;3.00000000000000000000;.94920000000000000000;.97080000000000000000;3.31360000000000000000
1;1.0;51.74666656000000000000;89.17333348000000000000;141.57333336000000000000;1310.55999996000000000000;14210.82666656000000000000;15803.87999992000000000000;.05000000000000000000;54934289.57400000000000000000;70469364.62560000000000000000;74918.05240000000000000000;4793.66720000000000000000;95262.93360000000000000000;16260825.89400000000000000000;3.00000000000000000000;1.28800000000000000000;1.00000000000000000000;3.37840000000000000000
2;0.5;71.74666668000000000000;103.29333340000000000000;171.05333332000000000000;1558.06666676000000000000;16616.58666668000000000000;18520.74666660000000000000;.06000000000000000000;64153138.37400000000000000000;57133160.93440000000000000000;205248.77360000000000000000;72593.53320000000000000000;79292.29360000000000000000;19072936.89400000000000000000;3.00000000000000000000;.89200000000000000000;1.00000000000000000000;3.36320000000000000000
2;1.0;70.34666664000000000000;106.49333340000000000000;185.82666660000000000000;1537.41333336000000000000;306652.13333340000000000000;308552.21333336000000000000;.92520000000000000000;1044800002.46640000000000000000;1015692051.90640000000000000000;2757288.06680000000000000000;1955820.82680000000000000000;106619.93400000000000000000;309192339.46640000000000000000;3.00000000000000000000;.97000000000000000000;1.00000000000000000000;3.38000000000000000000
3;0.5;54.48000000000000000000;82.03999992000000000000;130.45333328000000000000;1213.18666660000000000000;812.23999996000000000000;2292.40000000000000000000;.01000000000000000000;8928696.30680000000000000000;10538887.74680000000000000000;56420.77320000000000000000;3482.62640000000000000000;69107.69320000000000000000;2712302.49320000000000000000;3.00000000000000000000;1.18120000000000000000;1.00000000000000000000;3.29000000000000000000
3;1.0;54.64000008000000000000;82.70666668000000000000;130.81333344000000000000;1198.00000004000000000000;17100.98666664000000000000;18567.14666664000000000000;.06000000000000000000;62530767.62640000000000000000;89105244.29240000000000000000;68623.84000000000000000000;5834.64040000000000000000;100876.07960000000000000000;18993273.34680000000000000000;3.00000000000000000000;1.42520000000000000000;1.00000000000000000000;3.29000000000000000000
4;0.5;86.24000000000000000000;140.52000000000000000000;328.92000000000000000000;2012.64000000000000000000;655398.64000000000000000000;657966.96000000000000000000;.65840000000000000000;2170185563.40000000000000000000;3159551003.32000000000000000000;198253.20000000000000000000;61613.16000000000000000000;1193436.80000000000000000000;659167642.24000000000000000000;1.00000000000000000000;1.45880000000000000000;1.00000000000000000000;3.29000000000000000000
4;1.0;93.60000000000000000000;153.16000000000000000000;366.16000000000000000000;2166.76000000000000000000;14837221.84000000000000000000;14840001.52000000000000000000;14.84120000000000000000;50143466303.84000000000000000000;67249736757.52000000000000000000;11670160.00000000000000000000;234206.60000000000000000000;21789278.68000000000000000000;14841590345.40000000000000000000;1.00000000000000000000;1.34240000000000000000;1.00000000000000000000;3.37840000000000000000
5;0.5;93.16000000000000000000;136.16000000000000000000;316.60000000000000000000;1937.60000000000000000000;647144.64000000000000000000;649628.16000000000000000000;.65200000000000000000;2142406366.84000000000000000000;3201814265.20000000000000000000;262368.48000000000000000000;133184.36000000000000000000;996778.68000000000000000000;650725734.44000000000000000000;1.00000000000000000000;1.49520000000000000000;1.00000000000000000000;3.29000000000000000000
5;1.0;94.52000000000000000000;140.24000000000000000000;328.04000000000000000000;1957.08000000000000000000;13882978.20000000000000000000;13885498.08000000000000000000;13.88640000000000000000;45720944247.56000000000000000000;67785879618.64000000000000000000;4639362.64000000000000000000;2053211.04000000000000000000;21877881.28000000000000000000;13887003863.20000000000000000000;1.00000000000000000000;1.48320000000000000000;1.00000000000000000000;3.29000000000000000000
6;0.5;90.84000000000000000000;134.16000000000000000000;317.84000000000000000000;1928.40000000000000000000;643672.72000000000000000000;646143.96000000000000000000;.64720000000000000000;2130971108.24000000000000000000;3160182326.36000000000000000000;190831.00000000000000000000;52374.32000000000000000000;1107109.92000000000000000000;647252533.96000000000000000000;1.00000000000000000000;1.48320000000000000000;1.00000000000000000000;3.29000000000000000000
6;1.0;101.96000000000000000000;152.44000000000000000000;354.84000000000000000000;2173.08000000000000000000;14599591.36000000000000000000;14602373.68000000000000000000;14.60400000000000000000;48080809733.00000000000000000000;66815576702.12000000000000000000;1665698.20000000000000000000;114337.16000000000000000000;20834824.12000000000000000000;14604036302.20000000000000000000;1.00000000000000000000;1.39120000000000000000;1.00000000000000000000;3.29000000000000000000
7;0.5;101.08000000000000000000;135.32000000000000000000;312.64000000000000000000;1912.08000000000000000000;14762.04000000000000000000;17223.16000000000000000000;.02000000000000000000;61718639.32000000000000000000;64017422.96000000000000000000;202302.64000000000000000000;94850.64000000000000000000;103844.20000000000000000000;18300681.88000000000000000000;1.00000000000000000000;1.03760000000000000000;1.00000000000000000000;3.37280000000000000000
7;1.0;100.84000000000000000000;145.00000000000000000000;345.84000000000000000000;2013.88000000000000000000;334337.68000000000000000000;336943.24000000000000000000;.33800000000000000000;1113175688.68000000000000000000;1109185762.88000000000000000000;2793643.60000000000000000000;1988242.12000000000000000000;164532.92000000000000000000;338125255.24000000000000000000;1.00000000000000000000;.99800000000000000000;1.00000000000000000000;3.29000000000000000000
8;0.5;104.36000000000000000000;145.48000000000000000000;339.88000000000000000000;2050.40000000000000000000;749110.08000000000000000000;751750.20000000000000000000;.75200000000000000000;2548269884.04000000000000000000;3363095207.36000000000000000000;646943.44000000000000000000;228604.36000000000000000000;1069622.52000000000000000000;752985218.76000000000000000000;1.00000000000000000000;1.31840000000000000000;1.00000000000000000000;3.38480000000000000000
8;1.0;102.92000000000000000000;142.12000000000000000000;337.00000000000000000000;1989.84000000000000000000;14779523.28000000000000000000;14782095.16000000000000000000;14.78360000000000000000;48670507423.52000000000000000000;71161672656.56000000000000000000;5505189.64000000000000000000;3557883.12000000000000000000;24719664.40000000000000000000;14783547985.56000000000000000000;1.00000000000000000000;1.46320000000000000000;1.00000000000000000000;3.29000000000000000000
9;0.5;47.34666668000000000000;75.17333332000000000000;214.52000004000000000000;1160.46666672000000000000;631.14666664000000000000;2128.65333332000000000000;.01000000000000000000;8258954.22680000000000000000;9647541.57400000000000000000;54120.28040000000000000000;3202.85400000000000000000;65327.46680000000000000000;2509046.18680000000000000000;3.00000000000000000000;1.16800000000000000000;1.00000000000000000000;3.29040000000000000000
9;1.0;48.98666664000000000000;75.56000004000000000000;215.05333336000000000000;1161.37333328000000000000;13393.77333332000000000000;14894.74666664000000000000;.05000000000000000000;50329414.27960000000000000000;70645103.13360000000000000000;62322.30720000000000000000;5288.00040000000000000000;93345.97280000000000000000;15287134.16040000000000000000;3.00000000000000000000;1.40360000000000000000;1.00000000000000000000;3.29000000000000000000
10;0.5;58.13333344000000000000;76.38666660000000000000;220.21333332000000000000;1187.22666668000000000000;12331.18666664000000000000;13873.14666680000000000000;.04280000000000000000;47011983.78640000000000000000;47497128.79960000000000000000;133955.84000000000000000000;61119.70640000000000000000;67032.37320000000000000000;14281960.30680000000000000000;3.00000000000000000000;1.02360000000000000000;1.00000000000000000000;3.28960000000000000000
10;1.0;67.37333336000000000000;92.21333332000000000000;265.25333336000000000000;1422.63999992000000000000;311865.70666672000000000000;313713.18666668000000000000;.94360000000000000000;1034729814.09280000000000000000;1007439839.61320000000000000000;2695426.21400000000000000000;1948995.10720000000000000000;106356.13240000000000000000;314286705.85280000000000000000;3.00000000000000000000;.97640000000000000000;1.00000000000000000000;3.29000000000000000000
11;0.5;55.66666664000000000000;75.37333328000000000000;211.07999992000000000000;1145.17333336000000000000;821.05333336000000000000;2308.34666660000000000000;.01000000000000000000;8865856.70640000000000000000;10531547.09360000000000000000;60219.96040000000000000000;3638.38720000000000000000;65905.47880000000000000000;2693402.82760000000000000000;3.00000000000000000000;1.18960000000000000000;1.00000000000000000000;3.29000000000000000000
11;1.0;59.41333324000000000000;79.86666672000000000000;228.50666664000000000000;1215.75999996000000000000;18342.09333320000000000000;19925.64000008000000000000;.06000000000000000000;68510941.17240000000000000000;89278762.75920000000000000000;78846.68040000000000000000;6067.86640000000000000000;95971.70640000000000000000;20344658.38600000000000000000;3.00000000000000000000;1.30400000000000000000;1.00000000000000000000;3.36760000000000000000
12;0.5;56.84000000000000000000;15.24000000000000000000;14.68000000000000000000;625.44000000000000000000;5.08000000000000000000;717.28000000000000000000;0;2838213.20000000000000000000;3005640.80000000000000000000;33164.64000000000000000000;2048.20000000000000000000;33156.88000000000000000000;862135.20000000000000000000;1.00000000000000000000;1.07360000000000000000;1.01880000000000000000;3.29120000000000000000
13;0.5;67.52000000000000000000;15.40000000000000000000;15.28000000000000000000;631.88000000000000000000;5.12000000000000000000;735.20000000000000000000;0;2901766.84000000000000000000;3059128.52000000000000000000;30487.28000000000000000000;2055.56000000000000000000;32787.16000000000000000000;881662.88000000000000000000;1.00000000000000000000;1.07360000000000000000;1.01640000000000000000;3.29000000000000000000
14;0.5;36.76000000000000000000;72.52000000000000000000;102.00000000000000000000;1039.36000000000000000000;517.20000000000000000000;1767.84000000000000000000;0;7030133.76000000000000000000;7907374.68000000000000000000;52730.40000000000000000000;4984.84000000000000000000;60669.88000000000000000000;2135935.44000000000000000000;1.00000000000000000000;1.13080000000000000000;1.01000000000000000000;3.29000000000000000000
14;1.0;36.96000000000000000000;73.72000000000000000000;102.12000000000000000000;1041.28000000000000000000;12857.32000000000000000000;14111.40000000000000000000;.01040000000000000000;47687980.00000000000000000000;68821596.08000000000000000000;54646.32000000000000000000;7025.68000000000000000000;86431.20000000000000000000;14485196.20000000000000000000;1.00000000000000000000;1.44360000000000000000;1.00000000000000000000;3.29000000000000000000
15;0.5;47.28000000000000000000;75.08000000000000000000;107.28000000000000000000;1094.88000000000000000000;11306.04000000000000000000;12630.56000000000000000000;.01160000000000000000;42887086.08000000000000000000;44225570.76000000000000000000;124584.72000000000000000000;62101.64000000000000000000;62117.04000000000000000000;13028413.28000000000000000000;1.00000000000000000000;1.04280000000000000000;1.00000000000000000000;3.29000000000000000000
15;1.0;53.00000000000000000000;91.04000000000000000000;139.44000000000000000000;1300.92000000000000000000;310194.28000000000000000000;311778.68000000000000000000;.31000000000000000000;1028239288.44000000000000000000;1006833480.12000000000000000000;2689209.60000000000000000000;1949379.20000000000000000000;101324.44000000000000000000;312324013.48000000000000000000;1.00000000000000000000;.97920000000000000000;1.00000000000000000000;3.29000000000000000000
16;0.5;45.92000000000000000000;72.08000000000000000000;101.76000000000000000000;1037.12000000000000000000;690.36000000000000000000;1947.24000000000000000000;0;7634719.88000000000000000000;8777165.24000000000000000000;52698.56000000000000000000;5912.00000000000000000000;60999.84000000000000000000;2319753.56000000000000000000;1.00000000000000000000;1.15320000000000000000;1.01000000000000000000;3.29000000000000000000
16;1.0;45.72000000000000000000;73.80000000000000000000;105.08000000000000000000;1055.88000000000000000000;16922.20000000000000000000;18202.68000000000000000000;.02000000000000000000;61187984.76000000000000000000;87238374.28000000000000000000;58238.08000000000000000000;8389.40000000000000000000;91216.04000000000000000000;18586232.28000000000000000000;1.00000000000000000000;1.42600000000000000000;1.00000000000000000000;3.29000000000000000000
Type;Dist;ParsingTime;AnalysingTime;TranslationTime;CompilationTime;ExecutionTime;Time;TimeSec;Cycles;Instructions;L1Misses;LLCMisses;BranchMisses;TaskClock;Scale;IPC;CPUS;GHZ
1;0.5;61.32000000000000000000;99.16000000000000000000;165.86666672000000000000;1462.13333340000000000000;775.86666668000000000000;2564.34666668000000000000;.01000000000000000000;9921619.50640000000000000000;9632459.14640000000000000000;70721.60000000000000000000;36922.96080000000000000000;69002.09320000000000000000;3087480.38640000000000000000;3.00000000000000000000;.97720000000000000000;1.00000000000000000000;3.21600000000000000000
1;1.0;50.57333328000000000000;88.74666664000000000000;140.90666664000000000000;1290.52000000000000000000;14022.50666660000000000000;15593.25333336000000000000;.05000000000000000000;54055242.65360000000000000000;70473353.11960000000000000000;72175.18680000000000000000;9150.09400000000000000000;98034.25360000000000000000;16051779.68040000000000000000;3.00000000000000000000;1.30320000000000000000;1.00000000000000000000;3.36800000000000000000
2;0.5;60.78666672000000000000;88.69333340000000000000;140.50666668000000000000;1293.73333336000000000000;13880.98666664000000000000;15464.70666664000000000000;.05000000000000000000;52375317.03880000000000000000;54219696.93360000000000000000;152786.92000000000000000000;83917.06640000000000000000;70334.55960000000000000000;15923501.30640000000000000000;3.00000000000000000000;1.03600000000000000000;1.00000000000000000000;3.28760000000000000000
2;1.0;68.06666660000000000000;101.98666676000000000000;177.73333332000000000000;1479.38666664000000000000;311839.11999992000000000000;313666.29333340000000000000;.94200000000000000000;1033721576.54720000000000000000;1015693033.93360000000000000000;2716215.29400000000000000000;1964015.11840000000000000000;108340.26560000000000000000;314281640.59960000000000000000;3.00000000000000000000;.97920000000000000000;1.00000000000000000000;3.29000000000000000000
3;0.5;73.13333332000000000000;105.61333332000000000000;169.53333336000000000000;1553.85333332000000000000;1112.05333340000000000000;3014.18666660000000000000;.01000000000000000000;11923249.18800000000000000000;11077806.98680000000000000000;78455.91960000000000000000;8439.97320000000000000000;72561.18600000000000000000;3564110.85280000000000000000;3.00000000000000000000;.93000000000000000000;1.00000000000000000000;3.34760000000000000000
3;1.0;58.53333328000000000000;85.61333336000000000000;137.20000000000000000000;1240.02666672000000000000;17555.90666672000000000000;19077.28000000000000000000;.06000000000000000000;64183188.38680000000000000000;89102366.43960000000000000000;68705.86680000000000000000;12429.90640000000000000000;104391.73400000000000000000;19523210.53360000000000000000;3.00000000000000000000;1.38840000000000000000;1.00000000000000000000;3.28600000000000000000
4;0.5;106.20000000000000000000;174.72000000000000000000;421.64000000000000000000;2577.24000000000000000000;810418.08000000000000000000;813697.88000000000000000000;.81560000000000000000;2741529528.00000000000000000000;3283952940.16000000000000000000;1865001.36000000000000000000;67396.16000000000000000000;1710673.40000000000000000000;815187452.92000000000000000000;1.00000000000000000000;1.19880000000000000000;1.00000000000000000000;3.36200000000000000000
4;1.0;89.04000000000000000000;142.16000000000000000000;333.36000000000000000000;2002.48000000000000000000;13973099.24000000000000000000;13975666.28000000000000000000;13.97640000000000000000;45970884261.40000000000000000000;66798670043.64000000000000000000;1805521.32000000000000000000;253878.96000000000000000000;21466625.68000000000000000000;13977253745.48000000000000000000;1.00000000000000000000;1.45360000000000000000;1.00000000000000000000;3.29000000000000000000
5;0.5;120.36000000000000000000;176.92000000000000000000;418.96000000000000000000;2454.52000000000000000000;838149.04000000000000000000;841319.80000000000000000000;.84400000000000000000;2834831390.96000000000000000000;3332721358.52000000000000000000;1938391.60000000000000000000;149897.36000000000000000000;1613020.60000000000000000000;842765160.04000000000000000000;1.00000000000000000000;1.17520000000000000000;1.00000000000000000000;3.36160000000000000000
5;1.0;100.64000000000000000000;148.68000000000000000000;356.28000000000000000000;2104.44000000000000000000;14858150.60000000000000000000;14860860.64000000000000000000;14.86280000000000000000;49477479911.32000000000000000000;67994094371.04000000000000000000;10203349.68000000000000000000;2223824.60000000000000000000;22686727.12000000000000000000;14862417367.20000000000000000000;1.00000000000000000000;1.37880000000000000000;1.00000000000000000000;3.32920000000000000000
6;0.5;115.20000000000000000000;172.80000000000000000000;428.52000000000000000000;2440.36000000000000000000;800684.20000000000000000000;803841.08000000000000000000;.80560000000000000000;2707259284.68000000000000000000;3283918304.80000000000000000000;1879613.60000000000000000000;66793.24000000000000000000;1542391.36000000000000000000;805295634.80000000000000000000;1.00000000000000000000;1.21160000000000000000;1.00000000000000000000;3.36000000000000000000
6;1.0;111.80000000000000000000;163.76000000000000000000;389.92000000000000000000;2318.28000000000000000000;15729970.40000000000000000000;15732954.16000000000000000000;15.73480000000000000000;52995692546.96000000000000000000;68056505802.24000000000000000000;20628040.32000000000000000000;290191.96000000000000000000;25307063.36000000000000000000;15734470149.44000000000000000000;1.00000000000000000000;1.29120000000000000000;1.00000000000000000000;3.36720000000000000000
7;0.5;98.04000000000000000000;129.32000000000000000000;298.96000000000000000000;1842.92000000000000000000;15297.00000000000000000000;17666.24000000000000000000;.02000000000000000000;61435800.32000000000000000000;64024126.84000000000000000000;190798.04000000000000000000;98818.76000000000000000000;106799.48000000000000000000;18708135.68000000000000000000;1.00000000000000000000;1.04640000000000000000;1.00000000000000000000;3.28240000000000000000
7;1.0;119.36000000000000000000;150.08000000000000000000;355.04000000000000000000;2121.56000000000000000000;331774.04000000000000000000;334520.08000000000000000000;.33440000000000000000;1133636986.20000000000000000000;1109409325.52000000000000000000;2831028.76000000000000000000;1971473.96000000000000000000;159615.44000000000000000000;335785760.08000000000000000000;1.00000000000000000000;.97680000000000000000;1.00000000000000000000;3.37640000000000000000
8;0.5;131.60000000000000000000;182.08000000000000000000;415.88000000000000000000;2526.24000000000000000000;923042.32000000000000000000;926298.12000000000000000000;.92680000000000000000;3117894938.44000000000000000000;3506760294.40000000000000000000;2449006.76000000000000000000;219928.24000000000000000000;1736118.48000000000000000000;927692993.84000000000000000000;1.00000000000000000000;1.12520000000000000000;1.00000000000000000000;3.35920000000000000000
8;1.0;111.40000000000000000000;147.64000000000000000000;354.20000000000000000000;2060.20000000000000000000;15685999.12000000000000000000;15688672.56000000000000000000;15.68960000000000000000;52493676734.84000000000000000000;71167945248.60000000000000000000;10131157.84000000000000000000;3759064.76000000000000000000;23261167.24000000000000000000;15690540395.92000000000000000000;1.00000000000000000000;1.35800000000000000000;1.00000000000000000000;3.34480000000000000000
9;0.5;48.86666652000000000000;77.38666668000000000000;213.29333340000000000000;1149.57333324000000000000;643.18666668000000000000;2132.30666664000000000000;.01000000000000000000;8279137.68000000000000000000;9639159.00040000000000000000;57565.86640000000000000000;4164.34720000000000000000;65110.30680000000000000000;2516890.07920000000000000000;3.00000000000000000000;1.16560000000000000000;1.00000000000000000000;3.28800000000000000000
9;1.0;49.46666668000000000000;77.91999996000000000000;218.66666668000000000000;1175.18666672000000000000;13533.08000004000000000000;15054.32000004000000000000;.05000000000000000000;50840566.86720000000000000000;70692322.40000000000000000000;62835.42720000000000000000;8513.09480000000000000000;93518.98680000000000000000;15454944.86600000000000000000;3.00000000000000000000;1.39200000000000000000;1.00000000000000000000;3.28760000000000000000
10;0.5;62.56000004000000000000;83.02666660000000000000;233.40000000000000000000;1253.86666672000000000000;10963.25333340000000000000;12596.10666664000000000000;.03840000000000000000;42875175.34600000000000000000;44834277.10720000000000000000;130675.70640000000000000000;73419.75880000000000000000;68268.30600000000000000000;13036734.42600000000000000000;3.00000000000000000000;1.04880000000000000000;1.00000000000000000000;3.28720000000000000000
10;1.0;70.30666672000000000000;94.37333336000000000000;271.18666668000000000000;1428.92000000000000000000;312052.26666676000000000000;313917.05333336000000000000;.94480000000000000000;1034386877.10680000000000000000;1005216101.88040000000000000000;2690888.11920000000000000000;1952655.12000000000000000000;109566.65360000000000000000;314502287.22640000000000000000;3.00000000000000000000;.97360000000000000000;1.00000000000000000000;3.29000000000000000000
11;0.5;56.04000012000000000000;76.54666664000000000000;213.26666672000000000000;1142.97333340000000000000;820.26666664000000000000;2309.09333328000000000000;.01000000000000000000;8876669.50720000000000000000;10519216.17160000000000000000;54365.09360000000000000000;4221.13360000000000000000;65788.29320000000000000000;2696489.58640000000000000000;3.00000000000000000000;1.18560000000000000000;1.00000000000000000000;3.29040000000000000000
11;1.0;59.42666664000000000000;80.55999996000000000000;225.22666668000000000000;1213.03999996000000000000;17608.44000000000000000000;19186.69333332000000000000;.06000000000000000000;64492920.24000000000000000000;89275793.33360000000000000000;66565.93360000000000000000;17390.10640000000000000000;100114.54680000000000000000;19614143.82720000000000000000;3.00000000000000000000;1.38600000000000000000;1.00000000000000000000;3.28600000000000000000
12;0.5;58.32000000000000000000;15.72000000000000000000;15.96000000000000000000;636.12000000000000000000;5.12000000000000000000;731.24000000000000000000;0;2892499.08000000000000000000;3000662.60000000000000000000;33403.68000000000000000000;2296.76000000000000000000;32778.20000000000000000000;878885.12000000000000000000;1.00000000000000000000;1.05280000000000000000;1.01840000000000000000;3.29000000000000000000
13;0.5;83.68000000000000000000;21.00000000000000000000;17.92000000000000000000;773.28000000000000000000;6.52000000000000000000;902.40000000000000000000;0;3642771.24000000000000000000;3223920.00000000000000000000;39260.56000000000000000000;1954.76000000000000000000;33195.44000000000000000000;1080040.68000000000000000000;1.00000000000000000000;.89720000000000000000;1.01360000000000000000;3.37640000000000000000
14;0.5;37.68000000000000000000;77.80000000000000000000;103.88000000000000000000;1056.04000000000000000000;582.64000000000000000000;1858.04000000000000000000;0;7347063.04000000000000000000;8121294.48000000000000000000;52443.28000000000000000000;6916.72000000000000000000;61562.80000000000000000000;2232529.28000000000000000000;1.00000000000000000000;1.10920000000000000000;1.00920000000000000000;3.29000000000000000000
14;1.0;38.84000000000000000000;79.84000000000000000000;110.92000000000000000000;1125.96000000000000000000;13947.00000000000000000000;15302.56000000000000000000;.02000000000000000000;52748269.92000000000000000000;68867747.68000000000000000000;62957.48000000000000000000;11060.56000000000000000000;90619.24000000000000000000;15714736.12000000000000000000;1.00000000000000000000;1.30800000000000000000;1.00000000000000000000;3.35600000000000000000
15;0.5;50.48000000000000000000;79.32000000000000000000;113.84000000000000000000;1152.72000000000000000000;11820.64000000000000000000;13217.00000000000000000000;.01280000000000000000;45966229.84000000000000000000;46536653.08000000000000000000;135443.00000000000000000000;68291.92000000000000000000;61503.68000000000000000000;13635311.32000000000000000000;1.00000000000000000000;1.01480000000000000000;1.00000000000000000000;3.37160000000000000000
15;1.0;60.68000000000000000000;95.16000000000000000000;148.84000000000000000000;1384.32000000000000000000;317469.60000000000000000000;319158.60000000000000000000;.31960000000000000000;1077631524.92000000000000000000;1010741687.48000000000000000000;2735048.00000000000000000000;1955045.36000000000000000000;104366.32000000000000000000;319738049.56000000000000000000;1.00000000000000000000;.93920000000000000000;1.00000000000000000000;3.37120000000000000000
16;0.5;46.32000000000000000000;74.24000000000000000000;103.56000000000000000000;1054.20000000000000000000;737.44000000000000000000;2015.76000000000000000000;0;7863091.52000000000000000000;8784333.36000000000000000000;47965.04000000000000000000;5411.84000000000000000000;61866.04000000000000000000;2389123.44000000000000000000;1.00000000000000000000;1.12320000000000000000;1.00960000000000000000;3.29000000000000000000
16;1.0;47.84000000000000000000;78.60000000000000000000;110.68000000000000000000;1096.32000000000000000000;17464.48000000000000000000;18797.92000000000000000000;.02000000000000000000;63162885.64000000000000000000;87226085.32000000000000000000;56888.80000000000000000000;15994.40000000000000000000;94368.84000000000000000000;19198853.96000000000000000000;1.00000000000000000000;1.38160000000000000000;1.00000000000000000000;3.28800000000000000000
Type;Dist;LoadDuration;PageSize;UserSize;ParsingTime;AnalysingTime;TranslationTime;CompilationTime;ExecutionTime;Time;TimeSec;Cycles;Instructions;L1Misses;LLCMisses;BranchMisses;TaskClock;Scale;IPC;CPUS;GHZ
1;0.5;2220937;13387;20922;52.57333338000000000000;109.77000002000000000000;203.71000001000000000000;1295.72333337000000000000;145736.80333333000000000000;147398.57999998000000000000;.44560000000000000000;486732968.53650000000000000000;701225629.82960000000000000000;82128.94000000000000000000;14233.52010000000000000000;506199.19300000000000000000;147474160.04020000000000000000;3.00000000000000000000;1.44300000000000000000;.99870000000000000000;3.29960000000000000000
2;0.5;2076566;13387;20922;68.62666666000000000000;124.45333335000000000000;237.02666670000000000000;1455.03333332000000000000;216600.16666671000000000000;218485.30666671000000000000;.65430000000000000000;721267566.24720000000000000000;943305576.23350000000000000000;455750.75960000000000000000;351304.93330000000000000000;594160.17690000000000000000;218610366.19300000000000000000;3.00000000000000000000;1.30660000000000000000;.99880000000000000000;3.29930000000000000000
3;0.5;1771348;13387;20922;61.57333338000000000000;108.81333332000000000000;175.16000003000000000000;1249.43333330000000000000;176535.47666669000000000000;178130.45666667000000000000;.53350000000000000000;588001414.00360000000000000000;831717643.59000000000000000000;124021.21360000000000000000;51697.05280000000000000000;573232.80330000000000000000;178270566.59680000000000000000;3.00000000000000000000;1.41410000000000000000;.99900000000000000000;3.29840000000000000000
4;0.5;1867344;13387;20922;87.46000000000000000000;158.62000000000000000000;374.06000000000000000000;2149.98000000000000000000;308724.64000000000000000000;311494.76000000000000000000;.31160000000000000000;1033208215.53000000000000000000;1409988918.51000000000000000000;278543.28000000000000000000;28752.85000000000000000000;794829.17000000000000000000;311639391.52000000000000000000;1.00000000000000000000;1.39170000000000000000;.99830000000000000000;3.31040000000000000000
5;0.5;1935564;13387;20922;98.65000000000000000000;157.30000000000000000000;380.19000000000000000000;2197.36000000000000000000;365650.34000000000000000000;368483.84000000000000000000;.37060000000000000000;1217239630.37000000000000000000;1651201141.02000000000000000000;519069.20000000000000000000;360987.55000000000000000000;882501.92000000000000000000;368732438.09000000000000000000;1.00000000000000000000;1.35690000000000000000;.99880000000000000000;3.30120000000000000000
6;0.5;1798270;13387;20922;95.53000000000000000000;158.81000000000000000000;364.98000000000000000000;2164.43000000000000000000;335606.39000000000000000000;338390.14000000000000000000;.33700000000000000000;1121930318.42000000000000000000;1538912098.85000000000000000000;256310.81000000000000000000;67764.36000000000000000000;867144.21000000000000000000;338585835.05000000000000000000;1.00000000000000000000;1.38860000000000000000;.99880000000000000000;3.31050000000000000000
7;0.5;1746338;13387;20922;59.37666667000000000000;103.16666670000000000000;336.44666668000000000000;1527.87333334000000000000;145133.19999999000000000000;147160.06333333000000000000;.44370000000000000000;486340666.39370000000000000000;701951183.41630000000000000000;94767.73690000000000000000;17130.71320000000000000000;543501.39700000000000000000;147326470.46360000000000000000;3.00000000000000000000;1.44490000000000000000;.99890000000000000000;3.30050000000000000000
8;0.5;1906981;13387;20922;76.09333332000000000000;114.84999999000000000000;369.95000003000000000000;1718.63666666000000000000;222031.76000000000000000000;224311.29000002000000000000;.67540000000000000000;743552135.86680000000000000000;942449805.10000000000000000000;517721.73300000000000000000;352391.21000000000000000000;607015.88650000000000000000;224557979.14670000000000000000;3.00000000000000000000;1.27810000000000000000;.99920000000000000000;3.30860000000000000000
9;0.5;1878487;13387;20922;73.18000002000000000000;109.27333331000000000000;382.22666667000000000000;1616.21333329000000000000;177567.71666671000000000000;179748.61000001000000000000;.54030000000000000000;606802812.89670000000000000000;831057743.77700000000000000000;206994.12350000000000000000;58847.81010000000000000000;594157.65680000000000000000;179848722.90300000000000000000;3.00000000000000000000;1.38670000000000000000;.99860000000000000000;3.37440000000000000000
10;0.5;1808376;13387;20922;62.81000000000000000000;15.82000000000000000000;45.78000000000000000000;1100.85000000000000000000;5.48000000000000000000;1230.74000000000000000000;.00060000000000000000;3153797.15000000000000000000;2929893.54000000000000000000;37925.71000000000000000000;1950.24000000000000000000;30590.25000000000000000000;943178.77000000000000000000;1.00000000000000000000;.97450000000000000000;1.00860000000000000000;3.33360000000000000000
11;0.5;1855961;13387;20922;75.77000000000000000000;15.46000000000000000000;41.13000000000000000000;1120.85000000000000000000;5.42000000000000000000;1258.63000000000000000000;.00060000000000000000;3253281.59000000000000000000;2988435.35000000000000000000;36381.86000000000000000000;1295.11000000000000000000;30917.52000000000000000000;969600.06000000000000000000;1.00000000000000000000;.96600000000000000000;1.00840000000000000000;3.34430000000000000000
12;0.5;1778773;13387;20922;42.50000000000000000000;102.57000000000000000000;155.41000000000000000000;1557.23000000000000000000;142763.51000000000000000000;144621.22000000000000000000;.14270000000000000000;476944241.93000000000000000000;693266959.47000000000000000000;81834.06000000000000000000;29488.25000000000000000000;527677.75000000000000000000;144566866.43000000000000000000;1.00000000000000000000;1.45410000000000000000;.99730000000000000000;3.29840000000000000000
13;0.5;1931303;13387;20922;55.54000000000000000000;103.23000000000000000000;164.78000000000000000000;1678.44000000000000000000;213820.56000000000000000000;215822.55000000000000000000;.21520000000000000000;712256610.56000000000000000000;930834122.66000000000000000000;442908.74000000000000000000;343551.72000000000000000000;592867.70000000000000000000;215821108.54000000000000000000;1.00000000000000000000;1.30750000000000000000;.99810000000000000000;3.29920000000000000000
14;0.5;1795497;13387;20922;56.32000000000000000000;110.34000000000000000000;166.33000000000000000000;1714.36000000000000000000;176769.55000000000000000000;178816.90000000000000000000;.18180000000000000000;589935382.15000000000000000000;821700977.20000000000000000000;151428.72000000000000000000;85208.06000000000000000000;582512.31000000000000000000;178711413.92000000000000000000;1.00000000000000000000;1.39730000000000000000;.99770000000000000000;3.29910000000000000000
Type;Dist;LoadDuration;PageSize;UserSize;ParsingTime;AnalysingTime;TranslationTime;CompilationTime;ExecutionTime;Time;TimeSec;Cycles;Instructions;L1Misses;LLCMisses;BranchMisses;TaskClock;Scale;IPC;CPUS;GHZ
1;0.5;2137901;13387;20922;36.49333324000000000000;52.65666670000000000000;190.83333332000000000000;1044.62333333000000000000;92.38666670000000000000;1416.99333335000000000000;.00100000000000000000;4970351.08330000000000000000;4839942.81030000000000000000;58296.61320000000000000000;5565.36290000000000000000;48405.16340000000000000000;1514779.65320000000000000000;3.00000000000000000000;.98710000000000000000;.99140000000000000000;3.28300000000000000000
2;0.5;2047828;13387;20922;48.61666667000000000000;65.49333334000000000000;225.82000001000000000000;1369.77000001000000000000;63393.92666666000000000000;65103.62666665000000000000;.19740000000000000000;215132140.48940000000000000000;193808689.14620000000000000000;405714.58990000000000000000;331029.21670000000000000000;88222.45960000000000000000;65392133.87310000000000000000;3.00000000000000000000;.90190000000000000000;.99780000000000000000;3.28940000000000000000
3;0.5;2105422;13387;20922;47.31000006000000000000;60.81666665000000000000;222.71999999000000000000;1268.94999999000000000000;17582.97333332000000000000;19182.76999996000000000000;.06060000000000000000;63913832.66010000000000000000;81986126.92350000000000000000;110871.05360000000000000000;67540.19010000000000000000;73855.82020000000000000000;19439166.08950000000000000000;3.00000000000000000000;1.28410000000000000000;.99550000000000000000;3.28610000000000000000
4;0.5;2276578;13387;20922;65.12000000000000000000;98.68000000000000000000;413.37000000000000000000;1945.03000000000000000000;658.24000000000000000000;3180.44000000000000000000;.00070000000000000000;11546739.25000000000000000000;10611049.43000000000000000000;111736.80000000000000000000;12403.61000000000000000000;79631.43000000000000000000;3423068.97000000000000000000;1.00000000000000000000;.92290000000000000000;.99320000000000000000;3.37320000000000000000
5;0.5;2421798;13387;20922;77.12000000000000000000;112.25000000000000000000;503.93000000000000000000;2382.52000000000000000000;75833.14000000000000000000;78908.96000000000000000000;.08060000000000000000;267043016.07000000000000000000;210184236.80000000000000000000;637423.31000000000000000000;352225.80000000000000000000;155814.34000000000000000000;79451615.80000000000000000000;1.00000000000000000000;.78650000000000000000;.99570000000000000000;3.36120000000000000000
6;0.5;1882321;13387;20922;55.36000000000000000000;81.98000000000000000000;367.61000000000000000000;1809.24000000000000000000;17697.64000000000000000000;20011.83000000000000000000;.02060000000000000000;66565159.66000000000000000000;87393176.89000000000000000000;146235.53000000000000000000;52086.33000000000000000000;106713.53000000000000000000;20228999.21000000000000000000;1.00000000000000000000;1.31320000000000000000;.99250000000000000000;3.28890000000000000000
7;0.5;1907810;13387;20922;46.20333337000000000000;65.95333337000000000000;387.24333332000000000000;1560.22999998000000000000;141.47333333000000000000;2201.10333334000000000000;.01060000000000000000;8193207.03360000000000000000;7222507.26960000000000000000;89297.06340000000000000000;8194.19010000000000000000;60126.55350000000000000000;2430481.76660000000000000000;3.00000000000000000000;.88390000000000000000;.99200000000000000000;3.37160000000000000000
8;0.5;2046813;13387;20922;67.11333331000000000000;82.93000001000000000000;533.45333336000000000000;1972.26666664000000000000;76101.27333331000000000000;78757.03666666000000000000;.23960000000000000000;266602860.17680000000000000000;208389529.79320000000000000000;642233.68310000000000000000;352532.58350000000000000000;136316.56310000000000000000;79259247.79320000000000000000;3.00000000000000000000;.78210000000000000000;.99810000000000000000;3.36430000000000000000
9;0.5;2098761;13387;20922;62.90000000000000000000;78.40666665000000000000;527.78000001000000000000;1929.86333333000000000000;21821.74666665000000000000;24420.69666667000000000000;.07220000000000000000;83872520.67960000000000000000;88483402.18980000000000000000;200919.82010000000000000000;81166.49350000000000000000;98210.96280000000000000000;24883192.47680000000000000000;3.00000000000000000000;1.05790000000000000000;.99560000000000000000;3.37160000000000000000
10;0.5;1897552;13387;20922;33.88000000000000000000;12.68000000000000000000;38.27000000000000000000;1032.73000000000000000000;5.18000000000000000000;1122.74000000000000000000;.00050000000000000000;2742280.42000000000000000000;2816499.68000000000000000000;35832.81000000000000000000;1633.71000000000000000000;31206.79000000000000000000;834927.24000000000000000000;1.00000000000000000000;1.02890000000000000000;1.00890000000000000000;3.28810000000000000000
11;0.5;1953009;13387;20922;35.50000000000000000000;13.74000000000000000000;44.46000000000000000000;1056.12000000000000000000;5.92000000000000000000;1155.74000000000000000000;.00060000000000000000;2770264.13000000000000000000;2813372.51000000000000000000;35504.95000000000000000000;2103.87000000000000000000;30988.56000000000000000000;843131.19000000000000000000;1.00000000000000000000;1.01790000000000000000;1.00930000000000000000;3.28890000000000000000
12;0.5;2482662;13387;20922;32.74000000000000000000;58.85000000000000000000;148.85000000000000000000;1452.57000000000000000000;133.14000000000000000000;1826.15000000000000000000;.00060000000000000000;5950446.14000000000000000000;4828379.28000000000000000000;59521.82000000000000000000;4247.49000000000000000000;48748.69000000000000000000;1764806.76000000000000000000;1.00000000000000000000;.81350000000000000000;1.00100000000000000000;3.37510000000000000000
13;0.5;2251390;13387;20922;37.75000000000000000000;57.06000000000000000000;175.26000000000000000000;1614.40000000000000000000;63300.12000000000000000000;65184.59000000000000000000;.06600000000000000000;214167752.35000000000000000000;193350334.76000000000000000000;391497.90000000000000000000;320352.45000000000000000000;86718.71000000000000000000;65133113.68000000000000000000;1.00000000000000000000;.90450000000000000000;.99540000000000000000;3.28860000000000000000
14;0.5;1871489;13387;20922;40.74000000000000000000;68.16000000000000000000;209.66000000000000000000;1580.90000000000000000000;18093.46000000000000000000;19992.92000000000000000000;.02100000000000000000;66353338.57000000000000000000;81681007.40000000000000000000;99174.68000000000000000000;29306.99000000000000000000;74085.22000000000000000000;19722009.20000000000000000000;1.00000000000000000000;1.23620000000000000000;.99230000000000000000;3.36470000000000000000
Type;Dist;ParsingTime;AnalysingTime;TranslationTime;CompilationTime;ExecutionTime;Time;TimeSec;Cycles;Instructions;L1Misses;LLCMisses;BranchMisses;TaskClock;Scale;IPC;CPUS;GHZ
1;0.5;50.17333340000000000000;84.73333340000000000000;128.70666660000000000000;1003.79999996000000000000;640.54666660000000000000;1907.96000016000000000000;.01000000000000000000;7398978.06680000000000000000;8417324.22640000000000000000;47095.61320000000000000000;3925.62640000000000000000;59220.25280000000000000000;2248003.98680000000000000000;3.00000000000000000000;1.14000000000000000000;1.00000000000000000000;3.28960000000000000000
1;1.0;48.65333332000000000000;87.51999996000000000000;132.61333336000000000000;1032.83999988000000000000;14104.98666660000000000000;15406.61333332000000000000;.05000000000000000000;53178820.73360000000000000000;69248370.80000000000000000000;61798.56080000000000000000;2944.82600000000000000000;87782.29280000000000000000;15762596.56000000000000000000;3.00000000000000000000;1.30120000000000000000;1.00000000000000000000;3.37360000000000000000
2;0.5;62.76000000000000000000;92.15999996000000000000;146.89333340000000000000;1115.43999996000000000000;14073.96000000000000000000;15491.21333324000000000000;.05000000000000000000;53065939.54640000000000000000;52972158.46680000000000000000;146739.94640000000000000000;78417.88080000000000000000;58844.14760000000000000000;15890334.98680000000000000000;3.00000000000000000000;.99840000000000000000;1.00000000000000000000;3.33920000000000000000
2;1.0;70.23999996000000000000;104.21333328000000000000;170.26666672000000000000;1257.64000000000000000000;325958.20000000000000000000;327560.56000004000000000000;.98240000000000000000;1080124279.17360000000000000000;1014502766.16040000000000000000;2709542.80080000000000000000;1963815.37360000000000000000;99087.80040000000000000000;328075821.00040000000000000000;3.00000000000000000000;.93920000000000000000;1.00000000000000000000;3.29000000000000000000
3;0.5;55.69333332000000000000;82.44000000000000000000;125.26666668000000000000;988.92000000000000000000;822.02666668000000000000;2074.34666668000000000000;.01000000000000000000;7945140.09320000000000000000;9334132.26720000000000000000;47913.97360000000000000000;2356.21320000000000000000;58539.82640000000000000000;2413694.53520000000000000000;3.00000000000000000000;1.17560000000000000000;1.00000000000000000000;3.29000000000000000000
3;1.0;83.41333332000000000000;118.53333324000000000000;182.30666668000000000000;1448.51999996000000000000;24549.19999988000000000000;26381.97333340000000000000;.08240000000000000000;90424999.81280000000000000000;92063780.32040000000000000000;120043.89400000000000000000;6509.13320000000000000000;104933.21320000000000000000;26886107.93400000000000000000;3.00000000000000000000;1.02920000000000000000;1.00000000000000000000;3.36480000000000000000
4;0.5;87.36000000000000000000;140.32000000000000000000;326.80000000000000000000;1824.92000000000000000000;661796.00000000000000000000;664175.40000000000000000000;.66560000000000000000;2190084083.88000000000000000000;3156311363.56000000000000000000;167702.20000000000000000000;54111.72000000000000000000;1133360.96000000000000000000;665205145.16000000000000000000;1.00000000000000000000;1.44200000000000000000;1.00000000000000000000;3.29000000000000000000
4;1.0;84.40000000000000000000;141.76000000000000000000;326.20000000000000000000;1820.60000000000000000000;13983390.96000000000000000000;13985763.92000000000000000000;13.98720000000000000000;46050447381.52000000000000000000;66838411290.32000000000000000000;2006022.04000000000000000000;142661.80000000000000000000;22861739.08000000000000000000;13987143213.44000000000000000000;1.00000000000000000000;1.45000000000000000000;1.00000000000000000000;3.29000000000000000000
5;0.5;101.16000000000000000000;148.80000000000000000000;357.84000000000000000000;1957.96000000000000000000;709066.24000000000000000000;711632.00000000000000000000;.71360000000000000000;2404004404.08000000000000000000;3200810806.16000000000000000000;556400.56000000000000000000;151885.84000000000000000000;1259070.56000000000000000000;712727750.12000000000000000000;1.00000000000000000000;1.33200000000000000000;1.00000000000000000000;3.37360000000000000000
5;1.0;99.64000000000000000000;152.68000000000000000000;356.52000000000000000000;1965.60000000000000000000;14797798.88000000000000000000;14800373.32000000000000000000;14.80160000000000000000;50157303181.80000000000000000000;67733729278.60000000000000000000;9674762.28000000000000000000;2166043.28000000000000000000;20536916.28000000000000000000;14801621069.96000000000000000000;1.00000000000000000000;1.35200000000000000000;1.00000000000000000000;3.38920000000000000000
6;0.5;94.68000000000000000000;141.68000000000000000000;318.44000000000000000000;1788.76000000000000000000;659749.84000000000000000000;662093.40000000000000000000;.66240000000000000000;2183217118.08000000000000000000;3157058229.32000000000000000000;169390.76000000000000000000;47800.24000000000000000000;1101921.96000000000000000000;663119926.24000000000000000000;1.00000000000000000000;1.44600000000000000000;1.00000000000000000000;3.29000000000000000000
6;1.0;92.68000000000000000000;143.88000000000000000000;320.60000000000000000000;1787.68000000000000000000;14055832.60000000000000000000;14058177.44000000000000000000;14.05880000000000000000;46288300749.56000000000000000000;66818230219.76000000000000000000;1630448.32000000000000000000;113226.20000000000000000000;22798655.52000000000000000000;14059719383.40000000000000000000;1.00000000000000000000;1.44280000000000000000;1.00000000000000000000;3.29000000000000000000
7;0.5;98.40000000000000000000;127.76000000000000000000;291.00000000000000000000;1656.12000000000000000000;15606.64000000000000000000;17779.92000000000000000000;.02000000000000000000;61542808.40000000000000000000;62858198.24000000000000000000;180797.08000000000000000000;87680.56000000000000000000;94623.60000000000000000000;18695637.84000000000000000000;1.00000000000000000000;1.02720000000000000000;1.00000000000000000000;3.29000000000000000000
7;1.0;103.24000000000000000000;144.96000000000000000000;335.68000000000000000000;1837.92000000000000000000;339549.32000000000000000000;341971.12000000000000000000;.34080000000000000000;1129465853.16000000000000000000;1105905776.96000000000000000000;2790414.76000000000000000000;1981730.72000000000000000000;151360.40000000000000000000;343063443.56000000000000000000;1.00000000000000000000;.97920000000000000000;1.00000000000000000000;3.29000000000000000000
8;0.5;101.88000000000000000000;142.84000000000000000000;324.20000000000000000000;1817.64000000000000000000;717139.40000000000000000000;719525.96000000000000000000;.72000000000000000000;2372418846.84000000000000000000;3364251888.80000000000000000000;373242.52000000000000000000;225558.12000000000000000000;1218903.28000000000000000000;720589514.36000000000000000000;1.00000000000000000000;1.41840000000000000000;1.00000000000000000000;3.29000000000000000000
8;1.0;113.72000000000000000000;159.00000000000000000000;380.68000000000000000000;2059.40000000000000000000;16576732.96000000000000000000;16579445.76000000000000000000;16.58080000000000000000;56115397701.80000000000000000000;72042030363.08000000000000000000;21429701.44000000000000000000;3699250.48000000000000000000;25862618.04000000000000000000;16581039219.96000000000000000000;1.00000000000000000000;1.28880000000000000000;1.00000000000000000000;3.38520000000000000000
9;0.5;47.78666672000000000000;76.18666672000000000000;212.77333344000000000000;1143.78666668000000000000;652.82666664000000000000;2133.36000000000000000000;.01000000000000000000;8269265.47960000000000000000;9645433.93320000000000000000;58424.45240000000000000000;2833.94640000000000000000;65238.49280000000000000000;2512077.45320000000000000000;3.00000000000000000000;1.16840000000000000000;1.00000000000000000000;3.29000000000000000000
9;1.0;50.18666660000000000000;80.40000004000000000000;225.69333332000000000000;1209.29333332000000000000;13867.10666652000000000000;15432.67999992000000000000;.05000000000000000000;53405587.49400000000000000000;70634462.01320000000000000000;71460.78600000000000000000;3819.53400000000000000000;93532.29240000000000000000;15842146.58720000000000000000;3.00000000000000000000;1.32280000000000000000;1.00000000000000000000;3.37120000000000000000
10;0.5;62.06666672000000000000;79.74666664000000000000;228.24000000000000000000;1229.83999992000000000000;12803.59999992000000000000;14403.49333328000000000000;.04280000000000000000;48792565.56000000000000000000;50037696.09320000000000000000;142322.27960000000000000000;70657.52000000000000000000;67819.55880000000000000000;14822647.27920000000000000000;3.00000000000000000000;1.02480000000000000000;1.00000000000000000000;3.29000000000000000000
10;1.0;69.53333324000000000000;95.00000004000000000000;272.01333332000000000000;1453.30666672000000000000;321952.40000012000000000000;323842.25333336000000000000;.97200000000000000000;1068109969.61280000000000000000;1015040086.23920000000000000000;2720663.90640000000000000000;1964484.28000000000000000000;106607.18680000000000000000;324424194.72040000000000000000;3.00000000000000000000;.95000000000000000000;1.00000000000000000000;3.29000000000000000000
11;0.5;71.36000008000000000000;96.93333332000000000000;271.65333324000000000000;1448.47999996000000000000;1014.08000000000000000000;2902.50666668000000000000;.01000000000000000000;11399511.62600000000000000000;11068394.53320000000000000000;75842.74600000000000000000;3462.98640000000000000000;68323.58840000000000000000;3391829.46600000000000000000;3.00000000000000000000;.97280000000000000000;1.00000000000000000000;3.36200000000000000000
11;1.0;58.35999996000000000000;78.65333328000000000000;220.41333332000000000000;1166.14666672000000000000;17519.93333328000000000000;19043.50666664000000000000;.06000000000000000000;64020481.57280000000000000000;89275091.00000000000000000000;66378.38680000000000000000;7353.04000000000000000000;98997.93440000000000000000;19445903.06640000000000000000;3.00000000000000000000;1.39480000000000000000;1.00000000000000000000;3.29000000000000000000
12;0.5;61.60000000000000000000;16.56000000000000000000;15.76000000000000000000;659.12000000000000000000;5.80000000000000000000;758.84000000000000000000;0;3006936.12000000000000000000;3000617.40000000000000000000;34771.20000000000000000000;1925.72000000000000000000;32395.88000000000000000000;914160.96000000000000000000;1.00000000000000000000;1.01160000000000000000;1.01440000000000000000;3.28920000000000000000
13;0.5;68.12000000000000000000;15.56000000000000000000;14.72000000000000000000;622.16000000000000000000;5.32000000000000000000;725.88000000000000000000;0;2860421.92000000000000000000;3068128.40000000000000000000;30623.64000000000000000000;1755.88000000000000000000;32359.08000000000000000000;869156.96000000000000000000;1.00000000000000000000;1.08880000000000000000;1.01840000000000000000;3.29000000000000000000
14;0.5;36.92000000000000000000;73.92000000000000000000;101.96000000000000000000;1020.56000000000000000000;553.72000000000000000000;1787.08000000000000000000;0;7083478.16000000000000000000;8033301.12000000000000000000;52122.32000000000000000000;4284.52000000000000000000;60449.92000000000000000000;2153096.56000000000000000000;1.00000000000000000000;1.13800000000000000000;1.00960000000000000000;3.28920000000000000000
14;1.0;38.20000000000000000000;75.44000000000000000000;103.52000000000000000000;1067.08000000000000000000;13258.48000000000000000000;14542.72000000000000000000;.01120000000000000000;49129915.44000000000000000000;68805752.12000000000000000000;55272.24000000000000000000;7341.12000000000000000000;92418.92000000000000000000;14923652.00000000000000000000;1.00000000000000000000;1.40200000000000000000;1.00000000000000000000;3.29000000000000000000
15;0.5;52.16000000000000000000;80.32000000000000000000;117.84000000000000000000;1143.08000000000000000000;14333.60000000000000000000;15727.00000000000000000000;.01560000000000000000;53167784.88000000000000000000;51185340.40000000000000000000;137390.64000000000000000000;83775.96000000000000000000;62648.92000000000000000000;16151921.96000000000000000000;1.00000000000000000000;.97400000000000000000;1.00000000000000000000;3.29000000000000000000
15;1.0;65.52000000000000000000;116.76000000000000000000;189.00000000000000000000;1676.72000000000000000000;425267.04000000000000000000;427315.04000000000000000000;.42640000000000000000;1438004766.52000000000000000000;1077860546.08000000000000000000;3720787.72000000000000000000;2314945.92000000000000000000;314790.12000000000000000000;428002779.72000000000000000000;1.00000000000000000000;.74920000000000000000;1.00000000000000000000;3.35960000000000000000
16;0.5;46.84000000000000000000;74.00000000000000000000;102.40000000000000000000;1049.64000000000000000000;707.76000000000000000000;1980.64000000000000000000;0;7741957.20000000000000000000;8780158.88000000000000000000;47887.44000000000000000000;4521.60000000000000000000;61448.68000000000000000000;2352748.76000000000000000000;1.00000000000000000000;1.14000000000000000000;1.00960000000000000000;3.29000000000000000000
16;1.0;46.52000000000000000000;75.28000000000000000000;103.92000000000000000000;1057.28000000000000000000;17697.64000000000000000000;18980.64000000000000000000;.02000000000000000000;63739449.48000000000000000000;87447980.56000000000000000000;57530.64000000000000000000;8149.12000000000000000000;94084.44000000000000000000;19360888.24000000000000000000;1.00000000000000000000;1.37200000000000000000;1.00000000000000000000;3.29000000000000000000
Type;Dist;ParsingTime;AnalysingTime;TranslationTime;CompilationTime;ExecutionTime;Time;TimeSec;Cycles;Instructions;L1Misses;LLCMisses;BranchMisses;TaskClock;Scale;IPC;CPUS;GHZ
1;0.99;65.00000000000000000000;123.46666660000000000000;178.93333320000000000000;1249.46666660000000000000;8921195.80000000000000000000;26768438.00000000000000000000;26.77000000000000000000;29376364439.20200000000000000000;43641638535.06600000000000000000;1430147.66600000000000000000;121023.66600000000000000000;21889336.13600000000000000000;8923624239.86800000000000000000;3.00000000000000000000;1.48600000000000000000;1.00000000000000000000;3.29000000000000000000
1;0.9;60.00000020000000000000;117.26666680000000000000;168.13333340000000000000;1212.46666660000000000000;8162391.93333340000000000000;24491849.40000000000000000000;24.49200000000000000000;26881131986.33200000000000000000;39668991018.73400000000000000000;909043.06600000000000000000;106840.46800000000000000000;19145735.20000000000000000000;8164718822.13400000000000000000;3.00000000000000000000;1.47800000000000000000;1.00000000000000000000;3.29000000000000000000
1;0.5;60.80000000000000000000;120.73333340000000000000;171.53333340000000000000;1239.46666680000000000000;4542058.53333340000000000000;13630953.20000000000000000000;13.63200000000000000000;14953238878.00000000000000000000;22031386602.93200000000000000000;704885.80200000000000000000;103223.13200000000000000000;10848727.53200000000000000000;4542490354.66600000000000000000;3.00000000000000000000;1.47200000000000000000;1.00000000000000000000;3.29000000000000000000
1;0.1;60.53333320000000000000;117.73333340000000000000;168.80000000000000000000;1213.46666660000000000000;907883.33333300000000000000;2728331.60000000000000000000;2.73000000000000000000;2995824155.46600000000000000000;4411873774.73400000000000000000;187012.93400000000000000000;66749.00000000000000000000;2170017.53400000000000000000;909958215.20000000000000000000;3.00000000000000000000;1.47200000000000000000;1.00000000000000000000;3.29000000000000000000
1;0.01;59.06666660000000000000;113.80000020000000000000;158.73333340000000000000;1171.06666660000000000000;95648.33333340000000000000;291453.00000000000000000000;.29000000000000000000;321327355.26600000000000000000;466527479.80000000000000000000;88249.93400000000000000000;42865.06800000000000000000;287225.13400000000000000000;97606196.53400000000000000000;3.00000000000000000000;1.45200000000000000000;1.00000000000000000000;3.29000000000000000000
2;0.99;68.06666680000000000000;115.06666660000000000000;164.20000000000000000000;1192.33333320000000000000;100065.20000000000000000000;304814.60000000000000000000;.31000000000000000000;336074504.93400000000000000000;484210065.20000000000000000000;94134.39800000000000000000;54273.59800000000000000000;284001.60000000000000000000;102082339.60000000000000000000;3.00000000000000000000;1.44000000000000000000;1.00000000000000000000;3.29000000000000000000
2;0.9;86.13333340000000000000;149.33333340000000000000;219.60000000000000000000;1607.66666660000000000000;1203831.33333340000000000000;3617682.20000000000000000000;3.62200000000000000000;4044654657.20000000000000000000;4808330844.46400000000000000000;2731328.80000000000000000000;86520.93200000000000000000;3185221.26800000000000000000;1206580584.26600000000000000000;3.00000000000000000000;1.18800000000000000000;1.00000000000000000000;3.35000000000000000000
2;0.5;69.33333340000000000000;119.53333340000000000000;178.46666680000000000000;1288.13333320000000000000;4781832.73333340000000000000;14350464.60000000000000000000;14.35400000000000000000;15748592760.40000000000000000000;22987791917.60000000000000000000;1424646.80000000000000000000;232259.33400000000000000000;11425390.13400000000000000000;4783927004.66800000000000000000;3.00000000000000000000;1.46000000000000000000;1.00000000000000000000;3.29000000000000000000
2;0.1;69.86666680000000000000;118.86666680000000000000;172.26666660000000000000;1265.46666660000000000000;8618763.93333320000000000000;25861171.20000000000000000000;25.86400000000000000000;28358320996.06800000000000000000;41352307084.06600000000000000000;2612588.80200000000000000000;377110.20000000000000000000;19771340.73400000000000000000;8614458793.80000000000000000000;3.00000000000000000000;1.45800000000000000000;1.00000000000000000000;3.29000000000000000000
2;0.01;79.93333320000000000000;135.53333340000000000000;202.33333340000000000000;1483.93333340000000000000;10674699.00000020000000000000;32029802.20000000000000000000;32.03200000000000000000;35840224471.40000000000000000000;46239983986.13200000000000000000;15180378.26800000000000000000;382539.19800000000000000000;23983563.13200000000000000000;10677174146.86600000000000000000;3.00000000000000000000;1.29400000000000000000;1.00000000000000000000;3.35600000000000000000
3;0.99;125.66666680000000000000;198.00000000000000000000;360.60000000000000000000;1843.66666680000000000000;9132000.26666660000000000000;27403584.60000000000000000000;27.40600000000000000000;30200711112.06600000000000000000;43723332250.73400000000000000000;1691770.93200000000000000000;164362.13200000000000000000;21170474.00000000000000000000;9135448447.80000000000000000000;3.00000000000000000000;1.45200000000000000000;1.00000000000000000000;3.30400000000000000000
3;0.9;131.60000000000000000000;207.86666680000000000000;384.66666660000000000000;1948.00000020000000000000;8592701.26666640000000000000;25786120.20000000000000000000;25.78800000000000000000;28902403019.33200000000000000000;39751356974.26600000000000000000;3558303.33600000000000000000;173243.00000000000000000000;18848735.53200000000000000000;8596344058.93200000000000000000;3.00000000000000000000;1.37800000000000000000;1.00000000000000000000;3.36000000000000000000
3;0.5;139.73333340000000000000;230.46666680000000000000;415.66666660000000000000;2144.93333340000000000000;5173015.46666660000000000000;15527838.80000000000000000000;15.53200000000000000000;17372891075.19800000000000000000;22492207247.79800000000000000000;6014020.60000000000000000000;120640.80000000000000000000;11648178.20000000000000000000;5177324598.60000000000000000000;3.00000000000000000000;1.30000000000000000000;1.00000000000000000000;3.35600000000000000000
3;0.1;127.73333320000000000000;197.06666660000000000000;350.00000000000000000000;1805.60000000000000000000;915725.33333320000000000000;2754617.20000000000000000000;2.76000000000000000000;3026927184.13400000000000000000;4443715259.73400000000000000000;235192.13400000000000000000;74450.60200000000000000000;2227962.73400000000000000000;919397725.60000000000000000000;3.00000000000000000000;1.46600000000000000000;1.00000000000000000000;3.29000000000000000000
3;0.01;125.46666660000000000000;200.06666660000000000000;363.13333320000000000000;1859.66666660000000000000;104719.06666640000000000000;321802.20000000000000000000;.32400000000000000000;363807976.46600000000000000000;493656710.66400000000000000000;175095.13200000000000000000;51326.66800000000000000000;315840.13400000000000000000;108431840.73400000000000000000;3.00000000000000000000;1.35600000000000000000;1.00000000000000000000;3.35600000000000000000
4;0.99;146.40000000000000000000;198.20000000000000000000;525.66666660000000000000;2368.46666680000000000000;186996.60000000000000000000;570706.00000000000000000000;.57800000000000000000;631044386.26600000000000000000;890514413.06600000000000000000;248505.33200000000000000000;119360.93400000000000000000;478517.00000000000000000000;191709904.79800000000000000000;3.00000000000000000000;1.41000000000000000000;1.00000000000000000000;3.29000000000000000000
4;0.9;142.06666660000000000000;198.46666680000000000000;523.20000000000000000000;2367.59999980000000000000;1738070.33333340000000000000;5223905.00000000000000000000;5.23000000000000000000;5738371065.13200000000000000000;8263588816.80000000000000000000;820182.73400000000000000000;350784.53600000000000000000;3485958.46400000000000000000;1742966673.66600000000000000000;3.00000000000000000000;1.44000000000000000000;1.00000000000000000000;3.29000000000000000000
4;0.5;151.06666660000000000000;203.53333340000000000000;535.60000000000000000000;2390.86666680000000000000;8573981.66666660000000000000;25731788.20000000000000000000;25.73400000000000000000;28244646518.66600000000000000000;41002513601.67000000000000000000;2985064.33400000000000000000;732888.20000000000000000000;17191665.06600000000000000000;8579204654.80000000000000000000;3.00000000000000000000;1.45000000000000000000;1.00000000000000000000;3.29000000000000000000
4;0.1;144.13333320000000000000;213.26666660000000000000;559.80000000000000000000;2484.46666680000000000000;16582282.33333360000000000000;49757052.00000000000000000000;49.76200000000000000000;55799759223.26600000000000000000;73720280818.93600000000000000000;10338055.46600000000000000000;845924.19800000000000000000;31376574.19800000000000000000;16587536375.73400000000000000000;3.00000000000000000000;1.32000000000000000000;1.00000000000000000000;3.36400000000000000000
4;0.01;146.13333340000000000000;199.33333360000000000000;526.13333340000000000000;2401.46666660000000000000;16896153.13333320000000000000;50698278.60000000000000000000;50.70200000000000000000;55643229307.00000000000000000000;81029979162.86600000000000000000;5390475.06600000000000000000;688664.06800000000000000000;32386126.00000000000000000000;16901631283.26800000000000000000;3.00000000000000000000;1.46000000000000000000;1.00000000000000000000;3.29000000000000000000
5;0.99;63.66666680000000000000;111.46666660000000000000;328.26666660000000000000;1409.53333340000000000000;9075827.86666660000000000000;27233222.40000000000000000000;27.23600000000000000000;29877860466.73400000000000000000;43872657240.86600000000000000000;1303192.60000000000000000000;150011.53400000000000000000;21111961.20000000000000000000;9075745524.06800000000000000000;3.00000000000000000000;1.47000000000000000000;1.00000000000000000000;3.29000000000000000000
5;0.9;68.26666660000000000000;118.40000000000000000000;347.33333320000000000000;1514.66666660000000000000;8670238.79999980000000000000;26016862.40000000000000000000;26.02000000000000000000;28865642636.26800000000000000000;40122553690.66600000000000000000;4919021.46600000000000000000;134591.80000000000000000000;20393767.00200000000000000000;8672737504.46600000000000000000;3.00000000000000000000;1.39200000000000000000;1.00000000000000000000;3.32600000000000000000
5;0.5;68.20000000000000000000;116.59999980000000000000;346.39999980000000000000;1497.00000000000000000000;4900021.60000020000000000000;14706149.40000000000000000000;14.70800000000000000000;16491141799.26800000000000000000;22148206793.73400000000000000000;1884619.53400000000000000000;116897.80000000000000000000;10608980.93200000000000000000;4902613815.73200000000000000000;3.00000000000000000000;1.34200000000000000000;1.00000000000000000000;3.36400000000000000000
5;0.1;63.13333340000000000000;111.86666680000000000000;327.33333340000000000000;1366.39999980000000000000;924032.73333340000000000000;2777704.40000000000000000000;2.77800000000000000000;3049922936.46800000000000000000;4435709074.73400000000000000000;176739.13400000000000000000;63771.13400000000000000000;2195634.00000000000000000000;926444187.86600000000000000000;3.00000000000000000000;1.45600000000000000000;1.00000000000000000000;3.29000000000000000000
5;0.01;59.40000000000000000000;103.80000020000000000000;304.60000020000000000000;1268.73333340000000000000;96250.66666680000000000000;293961.60000000000000000000;.29600000000000000000;324101406.20000000000000000000;470315035.86600000000000000000;89259.60000000000000000000;35344.60200000000000000000;311404.33200000000000000000;98442031.80000000000000000000;3.00000000000000000000;1.45200000000000000000;1.00000000000000000000;3.29000000000000000000
6;0.99;69.13333320000000000000;105.26666640000000000000;313.66666660000000000000;1317.86666680000000000000;100823.13333320000000000000;307887.20000000000000000000;.31000000000000000000;339434698.60000000000000000000;488158383.66600000000000000000;106159.86800000000000000000;42040.26800000000000000000;292523.06800000000000000000;103099528.00000000000000000000;3.00000000000000000000;1.43800000000000000000;1.00000000000000000000;3.29000000000000000000
6;0.9;70.20000020000000000000;109.53333340000000000000;323.53333340000000000000;1383.26666680000000000000;963370.66666660000000000000;2895771.60000000000000000000;2.89600000000000000000;3179798607.46800000000000000000;4646552684.06600000000000000000;334476.06600000000000000000;95574.40000000000000000000;2248098.86800000000000000000;965818990.53400000000000000000;3.00000000000000000000;1.46000000000000000000;1.00000000000000000000;3.29000000000000000000
6;0.5;79.86666660000000000000;123.80000000000000000000;356.66666660000000000000;1558.80000000000000000000;5217878.39999980000000000000;15659992.60000000000000000000;15.66400000000000000000;17566332860.93200000000000000000;23310968167.33600000000000000000;4856790.40000000000000000000;231606.59800000000000000000;11497375.86600000000000000000;5220726225.86600000000000000000;3.00000000000000000000;1.33000000000000000000;1.00000000000000000000;3.36800000000000000000
6;0.1;71.73333340000000000000;111.73333320000000000000;326.60000000000000000000;1437.60000000000000000000;8677722.60000020000000000000;26039010.80000000000000000000;26.04000000000000000000;28603866920.93400000000000000000;41553159031.80000000000000000000;2986774.46800000000000000000;385152.73200000000000000000;19661633.40000000000000000000;8678535047.20000000000000000000;3.00000000000000000000;1.45400000000000000000;1.00000000000000000000;3.29400000000000000000
6;0.01;75.13333340000000000000;111.33333340000000000000;325.06666680000000000000;1405.60000000000000000000;9507386.73333340000000000000;28527911.60000000000000000000;28.53000000000000000000;31309598682.73600000000000000000;45682151548.93400000000000000000;2770987.40000000000000000000;375135.86800000000000000000;21811921.80000000000000000000;9510149707.60000000000000000000;3.00000000000000000000;1.46000000000000000000;1.00000000000000000000;3.29000000000000000000
7;0.5;62.00000000000000000000;19.80000000000000000000;17.40000000000000000000;717.40000000000000000000;6.60000000000000000000;823.20000000000000000000;0;3322766.40000000000000000000;2974693.60000000000000000000;35308.00000000000000000000;8591.20000000000000000000;33391.60000000000000000000;1001621.00000000000000000000;1.00000000000000000000;.91600000000000000000;1.01800000000000000000;3.32400000000000000000
8;0.5;73.80000000000000000000;21.00000000000000000000;20.00000000000000000000;711.40000000000000000000;7.60000000000000000000;833.80000000000000000000;0;3341386.20000000000000000000;3025510.60000000000000000000;35072.20000000000000000000;9809.60000000000000000000;33231.20000000000000000000;1015652.20000000000000000000;1.00000000000000000000;.92800000000000000000;1.01800000000000000000;3.29000000000000000000
9;0.99;46.80000000000000000000;106.40000000000000000000;153.00000000000000000000;1265.60000000000000000000;8879479.40000000000000000000;8881051.20000000000000000000;8.88400000000000000000;29241767564.40000000000000000000;43490469630.00000000000000000000;1764648.20000000000000000000;124514.40000000000000000000;20949640.40000000000000000000;8881878664.00000000000000000000;1.00000000000000000000;1.48800000000000000000;1.00000000000000000000;3.29000000000000000000
9;0.9;54.80000000000000000000;110.80000000000000000000;162.80000000000000000000;1356.20000000000000000000;8518559.40000000000000000000;8520244.00000000000000000000;8.52200000000000000000;28687193979.20000000000000000000;39537490108.20000000000000000000;3295755.20000000000000000000;133405.60000000000000000000;19004123.20000000000000000000;8521076074.40000000000000000000;1.00000000000000000000;1.38000000000000000000;1.00000000000000000000;3.36800000000000000000
9;0.5;47.00000000000000000000;106.80000000000000000000;154.20000000000000000000;1278.00000000000000000000;4525956.60000000000000000000;4527542.60000000000000000000;4.52600000000000000000;14907136101.40000000000000000000;21955097603.60000000000000000000;731529.00000000000000000000;108609.40000000000000000000;11450429.40000000000000000000;4528228160.80000000000000000000;1.00000000000000000000;1.47200000000000000000;1.00000000000000000000;3.29000000000000000000
9;0.1;47.40000000000000000000;105.20000000000000000000;151.20000000000000000000;1261.60000000000000000000;908003.00000000000000000000;909568.40000000000000000000;.91000000000000000000;2996220643.80000000000000000000;4397622399.60000000000000000000;191210.80000000000000000000;74931.60000000000000000000;2273579.00000000000000000000;910146424.80000000000000000000;1.00000000000000000000;1.47000000000000000000;1.00000000000000000000;3.29000000000000000000
9;0.01;74.20000000000000000000;134.80000000000000000000;206.00000000000000000000;1586.80000000000000000000;117542.60000000000000000000;119544.40000000000000000000;.12000000000000000000;403316339.60000000000000000000;485073830.80000000000000000000;319612.40000000000000000000;46444.80000000000000000000;329348.80000000000000000000;120284503.00000000000000000000;1.00000000000000000000;1.20400000000000000000;1.00000000000000000000;3.35400000000000000000
10;0.99;56.40000000000000000000;100.80000000000000000000;142.40000000000000000000;1211.80000000000000000000;100375.80000000000000000000;101887.20000000000000000000;.10000000000000000000;337093283.80000000000000000000;485144185.80000000000000000000;98689.60000000000000000000;47509.80000000000000000000;286602.20000000000000000000;102387444.60000000000000000000;1.00000000000000000000;1.43800000000000000000;1.00000000000000000000;3.29000000000000000000
10;0.9;57.60000000000000000000;108.60000000000000000000;156.40000000000000000000;1303.40000000000000000000;961303.00000000000000000000;962929.00000000000000000000;.96000000000000000000;3172182694.60000000000000000000;4614583939.20000000000000000000;315112.40000000000000000000;99644.00000000000000000000;2252253.60000000000000000000;963506231.40000000000000000000;1.00000000000000000000;1.45200000000000000000;1.00000000000000000000;3.29000000000000000000
10;0.5;57.60000000000000000000;115.40000000000000000000;167.40000000000000000000;1366.40000000000000000000;4759836.40000000000000000000;4761543.20000000000000000000;4.76200000000000000000;15664205815.20000000000000000000;22949861524.20000000000000000000;1866399.80000000000000000000;256816.20000000000000000000;10814187.80000000000000000000;4758472971.80000000000000000000;1.00000000000000000000;1.46600000000000000000;1.00000000000000000000;3.29000000000000000000
10;0.1;73.40000000000000000000;114.80000000000000000000;171.20000000000000000000;1416.80000000000000000000;9017392.20000000000000000000;9019168.40000000000000000000;9.02000000000000000000;30322958576.80000000000000000000;41311319130.00000000000000000000;5924825.40000000000000000000;453130.00000000000000000000;19828992.40000000000000000000;9019537027.00000000000000000000;1.00000000000000000000;1.36400000000000000000;1.00000000000000000000;3.36000000000000000000
10;0.01;68.80000000000000000000;132.20000000000000000000;195.60000000000000000000;1624.80000000000000000000;11629422.60000000000000000000;11631444.00000000000000000000;11.63000000000000000000;38992383479.20000000000000000000;47170735638.20000000000000000000;22356801.80000000000000000000;329215.80000000000000000000;26752806.60000000000000000000;11632468177.60000000000000000000;1.00000000000000000000;1.20800000000000000000;1.00000000000000000000;3.35200000000000000000
Type;Dist;LoadDuration;PageSize;UserSize;ParsingTime;AnalysingTime;TranslationTime;CompilationTime;ExecutionTime;Time;TimeSec;Cycles;Instructions;L1Misses;LLCMisses;BranchMisses;TaskClock;Scale;IPC;CPUS;GHZ
1;0.5;2094965;13387;20922;49.25666663000000000000;106.78666666000000000000;159.33333334000000000000;1022.89999998000000000000;96.48999992000000000000;1434.76666666000000000000;.00080000000000000000;5100247.95630000000000000000;5153967.37970000000000000000;54366.47030000000000000000;4791.86380000000000000000;47658.37990000000000000000;1548764.35650000000000000000;3.00000000000000000000;1.01900000000000000000;.99190000000000000000;3.29120000000000000000
2;0.5;2088704;13387;20922;66.02999997000000000000;118.48333329000000000000;223.46333331000000000000;1326.69333335000000000000;60523.45000003000000000000;62258.12000000000000000000;.19060000000000000000;205847956.86960000000000000000;193912393.07060000000000000000;413769.49350000000000000000;335172.72690000000000000000;86565.81020000000000000000;62525621.17310000000000000000;3.00000000000000000000;.94200000000000000000;.99790000000000000000;3.29010000000000000000
3;0.5;2175069;13387;20922;60.06333332000000000000;108.80999999000000000000;200.74333333000000000000;1184.42999995000000000000;17248.76333336000000000000;18802.80999994000000000000;.06060000000000000000;62588321.20030000000000000000;82350263.29320000000000000000;110693.65980000000000000000;40582.14650000000000000000;73872.22320000000000000000;19013485.07350000000000000000;3.00000000000000000000;1.31620000000000000000;.99530000000000000000;3.28970000000000000000
4;0.5;1926425;13387;20922;96.32000000000000000000;184.44000000000000000000;399.84000000000000000000;1940.00000000000000000000;664.60000000000000000000;3285.20000000000000000000;.00070000000000000000;11962787.30000000000000000000;11160725.17000000000000000000;112134.12000000000000000000;13609.68000000000000000000;80832.68000000000000000000;3559806.96000000000000000000;1.00000000000000000000;.93440000000000000000;.99490000000000000000;3.36250000000000000000
5;0.5;1885468;13387;20922;110.34000000000000000000;196.24000000000000000000;480.32000000000000000000;2311.09000000000000000000;73304.45000000000000000000;76402.44000000000000000000;.07870000000000000000;259227036.44000000000000000000;211076393.27000000000000000000;646109.74000000000000000000;344937.20000000000000000000;154375.13000000000000000000;76877413.85000000000000000000;1.00000000000000000000;.81540000000000000000;.99590000000000000000;3.37160000000000000000
6;0.5;2277196;13387;20922;109.15000000000000000000;186.70000000000000000000;460.96000000000000000000;2219.77000000000000000000;22028.73000000000000000000;25005.31000000000000000000;.02790000000000000000;85612272.88000000000000000000;91877656.53000000000000000000;206822.71000000000000000000;65083.86000000000000000000;120195.59000000000000000000;25439198.29000000000000000000;1.00000000000000000000;1.07340000000000000000;.99360000000000000000;3.36660000000000000000
7;0.5;2512985;13387;20922;69.27999999000000000000;125.48999998000000000000;384.22333333000000000000;1540.22333330000000000000;139.43333335000000000000;2258.65000005000000000000;.01060000000000000000;8386876.80010000000000000000;7551097.94270000000000000000;88995.59020000000000000000;7378.65000000000000000000;60210.11350000000000000000;2485529.94990000000000000000;3.00000000000000000000;.90260000000000000000;.99220000000000000000;3.37440000000000000000
8;0.5;2003462;13387;20922;72.10666666000000000000;111.90999998000000000000;408.86000001000000000000;1582.25999995000000000000;61149.45666664000000000000;63324.59333335000000000000;.19070000000000000000;209676091.00660000000000000000;196633587.60640000000000000000;434877.09300000000000000000;345169.38640000000000000000;99241.35940000000000000000;63692234.88680000000000000000;3.00000000000000000000;.93820000000000000000;.99780000000000000000;3.29000000000000000000
9;0.5;2259897;13387;20922;81.04000006000000000000;127.66666663000000000000;486.47666665000000000000;1767.25333331000000000000;21522.43333336000000000000;23984.87000002000000000000;.07080000000000000000;82100925.83710000000000000000;89083426.79980000000000000000;197613.88690000000000000000;51021.16020000000000000000;98380.13340000000000000000;24376548.01960000000000000000;3.00000000000000000000;1.08580000000000000000;.99600000000000000000;3.36910000000000000000
10;0.5;2265746;13387;20922;68.72000000000000000000;16.78000000000000000000;40.06000000000000000000;1225.33000000000000000000;7.11000000000000000000;1358.00000000000000000000;.00060000000000000000;3684109.86000000000000000000;3071080.23000000000000000000;41657.90000000000000000000;2065.55000000000000000000;31053.35000000000000000000;1090364.39000000000000000000;1.00000000000000000000;.84620000000000000000;1.00370000000000000000;3.38430000000000000000
11;0.5;1890827;13387;20922;67.47000000000000000000;14.94000000000000000000;48.56000000000000000000;1062.78000000000000000000;5.52000000000000000000;1199.27000000000000000000;.00060000000000000000;3001498.81000000000000000000;2990888.05000000000000000000;35951.81000000000000000000;1398.01000000000000000000;30826.11000000000000000000;911049.39000000000000000000;1.00000000000000000000;1.03350000000000000000;1.00880000000000000000;3.29550000000000000000
12;0.5;2520362;13387;20922;39.89000000000000000000;100.21000000000000000000;130.23000000000000000000;1321.43000000000000000000;111.30000000000000000000;1703.06000000000000000000;.00060000000000000000;5210377.05000000000000000000;4834162.01000000000000000000;52031.65000000000000000000;4690.48000000000000000000;48971.40000000000000000000;1578494.74000000000000000000;1.00000000000000000000;.95380000000000000000;1.00090000000000000000;3.29790000000000000000
13;0.5;2172706;13387;20922;51.88000000000000000000;103.55000000000000000000;171.73000000000000000000;1541.68000000000000000000;60166.83000000000000000000;62035.67000000000000000000;.06080000000000000000;204240896.58000000000000000000;193186704.37000000000000000000;394683.13000000000000000000;324065.26000000000000000000;85093.61000000000000000000;62046065.40000000000000000000;1.00000000000000000000;.94620000000000000000;.99550000000000000000;3.28980000000000000000
14;0.5;1934471;13387;20922;47.52000000000000000000;97.88000000000000000000;156.62000000000000000000;1417.67000000000000000000;16692.38000000000000000000;18412.07000000000000000000;.02060000000000000000;60298544.65000000000000000000;81854751.61000000000000000000;94330.62000000000000000000;31092.69000000000000000000;73203.27000000000000000000;18318012.14000000000000000000;1.00000000000000000000;1.35860000000000000000;.99290000000000000000;3.28980000000000000000
Type;Dist;ParsingTime;AnalysingTime;TranslationTime;CompilationTime;ExecutionTime;Time;TimeSec;Cycles;Instructions;L1Misses;LLCMisses;BranchMisses;TaskClock;Scale;IPC;CPUS;GHZ
1;0.5;59.09333332000000000000;97.22666660000000000000;158.80000000000000000000;1195.07999992000000000000;243246.27999996000000000000;244756.47999996000000000000;.73520000000000000000;809604197.27960000000000000000;1177620408.66600000000000000000;110976.54680000000000000000;68221.52000000000000000000;602653.36040000000000000000;245226289.19880000000000000000;3.00000000000000000000;1.45600000000000000000;1.00000000000000000000;3.30000000000000000000
2;0.5;68.61333332000000000000;97.70666668000000000000;155.58666660000000000000;1193.10666664000000000000;303337.01333328000000000000;304852.02666672000000000000;.91560000000000000000;1030718506.72080000000000000000;1494483661.22560000000000000000;164819.58640000000000000000;112792.40080000000000000000;678248.13440000000000000000;305337135.96000000000000000000;3.00000000000000000000;1.45080000000000000000;1.00000000000000000000;3.37680000000000000000
3;0.5;96.81333332000000000000;143.33333328000000000000;319.69333348000000000000;1789.89333328000000000000;425059.70666664000000000000;427409.44000004000000000000;1.28640000000000000000;1414031199.64080000000000000000;2068028269.52000000000000000000;204233.33400000000000000000;89537.93320000000000000000;957250.36080000000000000000;428449967.94640000000000000000;3.00000000000000000000;1.46240000000000000000;1.00000000000000000000;3.29960000000000000000
4;0.5;110.11999996000000000000;141.08000008000000000000;312.93333336000000000000;1767.53333328000000000000;702025.34666672000000000000;704357.01333336000000000000;2.11680000000000000000;2329364764.12040000000000000000;3380858579.65240000000000000000;327353.57360000000000000000;182008.98680000000000000000;1380359.57360000000000000000;705390455.80120000000000000000;3.00000000000000000000;1.45120000000000000000;1.00000000000000000000;3.30040000000000000000
5;0.5;60.86666660000000000000;87.90666672000000000000;250.85333336000000000000;1347.91999996000000000000;244978.53333324000000000000;246726.08000000000000000000;.74160000000000000000;831102832.60040000000000000000;1181276334.26640000000000000000;113103.25320000000000000000;71029.45360000000000000000;607346.57280000000000000000;247257846.82680000000000000000;3.00000000000000000000;1.42080000000000000000;1.00000000000000000000;3.36160000000000000000
6;0.5;72.79999992000000000000;95.09333336000000000000;271.82666660000000000000;1530.60000004000000000000;323424.14666660000000000000;325394.46666668000000000000;.97800000000000000000;1072373984.68040000000000000000;1499146230.81320000000000000000;433168.86640000000000000000;207423.37320000000000000000;777765.58680000000000000000;325998115.78640000000000000000;3.00000000000000000000;1.40000000000000000000;1.00000000000000000000;3.28840000000000000000
7;0.5;58.00000000000000000000;15.60000000000000000000;15.40000000000000000000;611.56000000000000000000;5.08000000000000000000;705.64000000000000000000;0;2834750.04000000000000000000;2998772.24000000000000000000;33098.64000000000000000000;2110.04000000000000000000;32814.48000000000000000000;846569.80000000000000000000;1.00000000000000000000;1.07080000000000000000;1.01600000000000000000;3.35200000000000000000
8;0.5;68.44000000000000000000;15.64000000000000000000;15.04000000000000000000;626.60000000000000000000;5.12000000000000000000;730.84000000000000000000;0;2884898.48000000000000000000;3059978.44000000000000000000;33483.36000000000000000000;2530.52000000000000000000;32900.24000000000000000000;876668.56000000000000000000;1.00000000000000000000;1.07600000000000000000;1.01440000000000000000;3.29000000000000000000
9;0.5;44.64000000000000000000;83.40000000000000000000;125.20000000000000000000;1189.80000000000000000000;241181.08000000000000000000;242624.12000000000000000000;.24040000000000000000;802891800.44000000000000000000;1174447069.64000000000000000000;114231.96000000000000000000;57770.04000000000000000000;578533.96000000000000000000;243097797.80000000000000000000;1.00000000000000000000;1.46280000000000000000;1.00000000000000000000;3.30000000000000000000
10;0.5;54.52000000000000000000;81.44000000000000000000;122.08000000000000000000;1213.52000000000000000000;306635.20000000000000000000;308106.76000000000000000000;.31000000000000000000;1018323218.76000000000000000000;1491965961.76000000000000000000;141879.68000000000000000000;92944.08000000000000000000;704416.68000000000000000000;308539800.76000000000000000000;1.00000000000000000000;1.46520000000000000000;1.00000000000000000000;3.30000000000000000000