///----------------------------------------------------------------------------|
/// Стенд для замера пииисек.
///------------------------------------------------------------------------arr[]
/// const int ROW = 10;
/// const int COL = 10;
/// int arr[ROW*COL];
///START_PERFOMANCE;//=============================//
/// for (int i = 0; i < ROW; i++)
/// { for(int j = 0; j < COL; j++)
/// { arr [i*j+j] = i + j;
/// }
/// }
///
///-----------------------------------------------------------------------vector
/// const int ROW = 10;
/// const int COL = 10;
/// std::vector<std::vector<int>> arr(ROW, std::vector<int>(COL));
///START_PERFOMANCE;//=================================================//
/// for (int i = 0; i < ROW; i++)
/// { for(int j = 0; j < COL; j++)
/// { arr [i][j] = i + j;
/// }
/// }
///
///----------------------------------------------------------------------------|
#include <stdio.h>
#include <vector>
///----------------------------------------------------------------------------|
/// Мерилка тактов проца.
///----------------------------------------------------------------------------:
typedef unsigned long long ull;
inline ull rdtsc()
{
#ifdef __BORLANDC__
#endif
#ifdef _MSC_VER
unsigned clock = 0;
__asm rdtsc;
__asm mov[clock], eax;
return clock;
#endif
#ifdef __GNUC__
unsigned int lo, hi;
asm volatile ("rdtsc\n" : "=a" (lo), "=d" (hi));
return ((ull)hi << 32) | lo;
#endif
}
///----------------------------------------------------------------------------|
/// Для удобства.
///----------------------------------------------------------------------------:
#define START_PERFOMANCE ull t1 = rdtsc(); static ull ss_ = 0xffffffff;\
bool b = false
#define END_PERFOMANCE ull v = rdtsc(); v -= t1;\
if(ss_ > v){ b = true; ss_ = v;}
///----------------------------------------------------------------------------|
/// Хулиган.
///----------------------------------------------------------------------------:
ull CoderHuligan(char* s)
{ int nw = 0;
char *p=s;
const int ROW = 10;
const int COL = 10;
int arr[ROW*COL];
START_PERFOMANCE;//=============================//
for (int i = 0; i < ROW; i++)
{ for(int j = 0; j < COL; j++)
{ arr [i*j+j] = i + j;
}
}
END_PERFOMANCE;//===============================//
if(b)
{ printf ("arr[] : ");
printf ("%10u \n", (unsigned)ss_);
b = false;
}
return ss_;
}
///----------------------------------------------------------------------------|
/// my.
///----------------------------------------------------------------------------:
ull my(char* s)
{ int nw = 0;
char *p = s;
const int ROW = 10;
const int COL = 10;
std::vector<std::vector<int>> arr(ROW, std::vector<int>(COL));
START_PERFOMANCE;//=================================================//
for (int i = 0; i < ROW; i++)
{ for(int j = 0; j < COL; j++)
{ arr [i][j] = i + j;
}
}
END_PERFOMANCE;//===================================================//
if(b)
{
printf ("vector: ");
printf ("%10u \n", (unsigned)ss_);
b = false;
}
return ss_;
}
///----------------------------------------------------------------------------|
/// Наш кролик.
///----------------------------------------------------------------------------:
char s[]="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed";
///----------------------------------------------------------------------------|
/// Start.
///----------------------------------------------------------------------------:
int main()
{ ull m,c;
//-------------------------------|
// Quiet, testing! |
//-------------------------------:
for(int i = 0; i < 10000000; ++i)
{ c = CoderHuligan(s);
m = my (s);
}
//-------------------------------|
// Banners is redy... |
//-------------------------------:
const char* str[] = {"WIN <<<--!!!", "looser...", "friendship won!"};
int i1, i2;
(m > c) ? (i1 = 0, i2 = 1) :
((m == c)?(i1 = 2, i2 = 2) : (i1 = 1, i2 = 0));
//-------------------------------|
// Finish result. |
//-------------------------------:
printf ("\nFinish the race-------------------:\n");
printf ("arr[] : %u - ", (unsigned)c);
printf ("%s\n", str[i1]);
printf ("vector: %u - ", (unsigned)m);
printf ("%s\n", str[i2]);
//-------------------------------|
// Show efficiency. |
//-------------------------------:
double ef = 100.0/double(c) * double(m) - 100.0;
printf ("\nProfitable arr[]: %2.2f%%\n\n", ef);
//_getch();
return 0;
}