From d1ac9460c2fbb41620aab27a58e90c3ded8c00f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Mon, 8 Apr 2019 16:51:25 +1000 Subject: [PATCH] Adding microbench for PR1977 --- microbench/PR1977_bench.cpp | 131 ++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 microbench/PR1977_bench.cpp diff --git a/microbench/PR1977_bench.cpp b/microbench/PR1977_bench.cpp new file mode 100644 index 000000000..6efae4507 --- /dev/null +++ b/microbench/PR1977_bench.cpp @@ -0,0 +1,131 @@ +#include +#include +#include + +__thread unsigned int g_seed; + +inline int fastrand() { + g_seed = (214013*g_seed+2531011); + return (g_seed>>16)&0x7FFF; +} + +inline unsigned long long monotonic_time() { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (((unsigned long long) ts.tv_sec) * 1000000) + (ts.tv_nsec / 1000); +} + + +#define NSRV 24 +#define NLOOP 10000000 + +struct cpu_timer +{ + cpu_timer() { + begin = monotonic_time(); + } + ~cpu_timer() + { + unsigned long long end = monotonic_time(); + std::cerr << double( end - begin ) / 1000000 << " secs.\n" ; + begin=end-begin; // here only to make compiler happy + }; + unsigned long long begin; +}; + + +int main(int argc, char** argv) { + unsigned int * usedConns = NULL; + unsigned int * weights = NULL; + unsigned int sum = 0; + unsigned int TotalUsedConn = 0; + + srand(monotonic_time()); + usedConns = (unsigned int *)malloc(NSRV*sizeof(unsigned int)); + weights = (unsigned int *)malloc(NSRV*sizeof(unsigned int)); + for (int i=0 ; i < NSRV ; i++ ) { + usedConns[i] = 20+rand()%1000; + weights[i] = 20+rand()%10000; + } + for (int N=4; N<=NSRV; N+=4) { + std::cerr << "Test with " << N << " servers:" << std::endl; + { + cpu_timer c; + for (int i=0; i 32768) { + k = rand() % New_sum; + } else { + k = fastrand() % New_sum; + } + New_sum = 0; + for (int j=0; j 32768) { + k = drand48() * New_sum; + } else { + k = fastrand() % (unsigned int)New_sum; + } + New_sum = 0; + for (int j=0; j