#include "nfa/shufti.h" #include "nfa/shufticompile.h" #include "benchmarks.hpp" #include #include #include #include #include /* #define RST "\x1B[0m" #define KRED "\x1B[31m" #define KGRN "\x1B[32m" #define KYEL "\x1B[33m" #define KBLU "\x1B[34m" #define KMAG "\x1B[35m" #define KCYN "\x1B[36m" #define KWHT "\x1B[37m" */ void shufti_benchmarks(int size, int loops, int M, bool has_match) { size_t real_size = size; m128 lo, hi; ue2::CharReach chars; chars.set('a'); int ret = shuftiBuildMasks(chars, (u8 *)&lo, (u8 *)&hi); u8 *kt1 = new u8[size]; memset(kt1,'b',size); long double total_sec = 0; long double trans_size = 0; long double bw = 0; if (has_match){ int pos = 0; for(int j=0; j(end - start).count(); total_sec += dt; /*calculate transferred size*/ trans_size += act_size * loops; /*calculate bandwidth*/ bw += trans_size / total_sec; /*convert to MB/s*/ bw += bw / 1048576; /*calculte average time*/ total_sec /= loops; } total_sec /= M; bw /= M; /*covert average time to μs*/ long double ms = total_sec * 1000000; std::cout << "\x1B[35m Case with match in random pos and size: " << real_size << " for " << loops<<" loops (" << M << " random possisions checked): \x1B[36m shuftiExec elapsetime: \x1B[0m" << (ms/M) <<" (μs) \x1B[36m bandwidth: \x1B[0m" << bw <<" (MB/s)"<(end - start).count(); /*calculate transferred size*/ trans_size = size * loops ; /*calculate bandwidth*/ bw = trans_size / total_sec; /*convert to MB/s*/ bw /=1048576; /*covert average time to μs*/ long double ms = total_sec * 1000000; std::cout<<"\x1B[35m Case with no match in random pos and size: "<(end - start).count(); total_sec += dt; /*calculate transferred size*/ trans_size += act_size * loops; /*calculate bandwidth*/ bw += trans_size / total_sec; /*convert to MB/s*/ bw += bw / 1048576; /*calculte average time*/ total_sec /= loops; } total_sec /= M; bw /= M; /*covert average time to μs*/ long double ms = total_sec * 1000000; std::cout << "\x1B[35m Case with match in random pos and size: " << real_size << " for " << loops<<" loops (" << M << " random possisions checked): \x1B[36m rshuftiExec elapsetime: \x1B[0m" << (ms/M) <<" (μs) \x1B[36m bandwidth: \x1B[0m" << bw <<" (MB/s)"<(end - start).count(); /*calculate transferred size*/ trans_size = size * loops ; /*calculate bandwidth*/ bw = trans_size / total_sec; /*convert to MB/s*/ bw /=1048576; /*covert average time to μs*/ long double ms = total_sec * 1000000; std::cout<<"\x1B[35m Case with no match in random pos and size: "<