Measure micro-benchmark timing.

This commit is contained in:
Peter D. Barnes, Jr.
2012-11-13 23:56:26 -08:00
parent b26e2d5fb2
commit 8a5e56e414

View File

@@ -20,6 +20,7 @@
#include "ns3/packet.h"
#include "ns3/packet-tag-list.h"
#include "ns3/test.h"
#include <limits> // std:numeric_limits
#include <string>
#include <cstdarg>
#include <iostream>
@@ -459,9 +460,9 @@ private:
void CheckRef (PacketTagList & ref, ATestTagBase & t,
const char * msg, bool miss = false);
void CheckRefList (PacketTagList & ref, const char * msg, int miss = 0);
void RemoveTime (const PacketTagList & ref, ATestTagBase & t,
int RemoveTime (const PacketTagList & ref, ATestTagBase & t,
const char * msg);
void AddRemoveTime ();
int AddRemoveTime ();
};
PacketTagListTest::PacketTagListTest ()
@@ -514,7 +515,7 @@ PacketTagListTest::CheckRefList (PacketTagList & ref,
CheckRef (ref, t7, msg, miss == 7);
}
void
int
PacketTagListTest::RemoveTime (const PacketTagList & ref, ATestTagBase & t,
const char * msg)
{
@@ -525,12 +526,14 @@ PacketTagListTest::RemoveTime (const PacketTagList & ref, ATestTagBase & t,
ptv[i].Remove (t);
}
int stop = clock ();
int delta = stop - start;
std::cout << GetName () << "remove time: " << msg << ": "
<< stop - start << " ticks"
<< delta << " ticks"
<< std::endl;
return delta;
}
void
int
PacketTagListTest::AddRemoveTime ()
{
/* old free list priming
@@ -561,9 +564,11 @@ PacketTagListTest::AddRemoveTime ()
ptl.Remove (t);
}
int stop = clock ();
int delta = stop - start;
std::cout << GetName () << "freelist time: "
<< stop - start << " ticks"
<< delta << " ticks"
<< std::endl;
return delta;
}
void
@@ -630,19 +635,37 @@ PacketTagListTest::DoRun (void)
ReplaceCheck (7);
std::cout << GetName () << "freelist timing" << std::endl;
int flm = std::numeric_limits<int>::max ();
for (int i = 0; i < 100; ++i) {
AddRemoveTime ();
int now = AddRemoveTime ();
if (now < flm) flm = now;
}
std::cout << GetName () << "min freelist time: "
<< flm << " ticks" << std::endl;
std::cout << GetName () << "remove timing" << std::endl;
RemoveTime (ref, t7, "t7");
RemoveTime (ref, t6, "t6");
RemoveTime (ref, t5, "t5");
RemoveTime (ref, t4, "t4");
RemoveTime (ref, t3, "t3");
RemoveTime (ref, t2, "t2");
RemoveTime (ref, t1, "t1");
RemoveTime (ref, t7, "t7");
std::vector <int> rmn (7, std::numeric_limits<int>::max ());
for (int i = 0; i < 100; ++i) {
for (int j = 1; j < 8; ++j) {
int now = 0;
switch (j) {
case 7: now = RemoveTime (ref, t7, "t7"); break;
case 6: now = RemoveTime (ref, t6, "t6"); break;
case 5: now = RemoveTime (ref, t5, "t5"); break;
case 4: now = RemoveTime (ref, t4, "t4"); break;
case 3: now = RemoveTime (ref, t3, "t3"); break;
case 2: now = RemoveTime (ref, t2, "t2"); break;
case 1: now = RemoveTime (ref, t1, "t1"); break;
} // switch
if (now < rmn[j]) rmn[j] = now;
} // for tag j
} // for iteration i
for (int j = 7; j > 0; --j) {
std::cout << GetName () << "min remove time: t"
<< j << ": " << rmn[j] << std::endl;
}
}
//-----------------------------------------------------------------------------