https://svn.lrde.epita.fr/svn/ranch/trunk
Index: ChangeLog
from Nicolas Despr�s <nicolas.despres(a)gmail.com>
Add a Time Stamp Counter measure.
* lib/cxx/demo/basic.cc: Rename to ...
* lib/cxx/demo/utime.cc: ... that and remove dead code.
* lib/cxx/demo/Makefile.am: Add the tsc demo.
* lib/cxx/demo/tsc.cc: New. A demo for the TSC measure.
* lib/cxx/src/ranch-cxx/output/Makefile.am: Add the tsc files.
* lib/cxx/src/ranch-cxx/output/all.hh: Include the TSC header.
* lib/cxx/src/ranch-cxx/output/tsc.hxx,
* lib/cxx/src/ranch-cxx/output/tsc.hh,
* lib/cxx/src/ranch-cxx/output/tsc.cc: New. Implements the TSC measure.
* lib/cxx/src/ranch-cxx/bencher.hh: Typo.
demo/Makefile.am | 16 +++++++++++-----
demo/tsc.cc | 30 ++++++++++++++++++++++++++++++
demo/utime.cc | 6 ------
src/ranch-cxx/bencher.hh | 2 +-
src/ranch-cxx/output/Makefile.am | 9 +++++++--
src/ranch-cxx/output/all.hh | 1 +
src/ranch-cxx/output/tsc.cc | 28 ++++++++++++++++++++++++++++
src/ranch-cxx/output/tsc.hh | 32 ++++++++++++++++++++++++++++++++
src/ranch-cxx/output/tsc.hxx | 20 ++++++++++++++++++++
9 files changed, 130 insertions(+), 14 deletions(-)
Index: lib/cxx/demo/utime.cc
--- lib/cxx/demo/utime.cc (revision 70)
+++ lib/cxx/demo/utime.cc (working copy)
@@ -12,12 +12,6 @@
return i;
}
-void basic(const double foo, const double bar, double& toto, double& tata)
-{
- toto = foo + bar;
- tata = foo * bar;
-}
-
int main()
{
Ranch::Input::Input foo("foo", "unit_foo");
Index: lib/cxx/demo/Makefile.am
--- lib/cxx/demo/Makefile.am (revision 70)
+++ lib/cxx/demo/Makefile.am (working copy)
@@ -1,7 +1,13 @@
include $(top_srcdir)/src/ranch.mk
-check_PROGRAMS = basic
-basic_SOURCES = basic.cc
-basic_CXXFLAGS = -W -Wall -pedantic -O3
-basic_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir)/src
-basic_LDADD = $(top_builddir)/src/ranch-cxx/libranch-cxx.la
+check_PROGRAMS = utime tsc
+
+utime_SOURCES = utime.cc
+utime_CXXFLAGS = -W -Wall -pedantic -O3
+utime_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir)/src
+utime_LDADD = $(top_builddir)/src/ranch-cxx/libranch-cxx.la
+
+tsc_SOURCES = tsc.cc
+tsc_CXXFLAGS = -W -Wall -pedantic -O3
+tsc_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir)/src
+tsc_LDADD = $(top_builddir)/src/ranch-cxx/libranch-cxx.la
Index: lib/cxx/demo/tsc.cc
--- lib/cxx/demo/tsc.cc (revision 0)
+++ lib/cxx/demo/tsc.cc (revision 0)
@@ -0,0 +1,30 @@
+
+#include <ranch-cxx/ranch.hh>
+
+int do_something(int i)
+{
+ for (int j = 0; j < i; ++j)
+ ;
+ for (int j = 0; j < i; ++j)
+ ;
+ for (int j = 0; j < i; ++j)
+ ;
+ return i;
+}
+
+int main()
+{
+ Ranch::Input::Input dummy("dummy");
+ Ranch::Inputs inputs;
+ inputs.add(dummy);
+
+ Ranch::Output::TSC tsc;
+ Ranch::Outputs outputs;
+ outputs.add(tsc);
+
+ Ranch::Bencher b("TSC", inputs, outputs, "a comment");
+ b.start(0.0f);
+ do_something(1000000000);
+ b.stop(tsc());
+ return 0;
+}
Index: lib/cxx/src/ranch-cxx/output/tsc.hxx
--- lib/cxx/src/ranch-cxx/output/tsc.hxx (revision 0)
+++ lib/cxx/src/ranch-cxx/output/tsc.hxx (revision 0)
@@ -0,0 +1,20 @@
+
+#ifndef RANCH_OUTPUT_TSC_HXX
+# define RANCH_OUTPUT_TSC_HXX
+
+# include <ranch-cxx/output/u-time.hh>
+
+namespace Ranch
+{
+ namespace Output
+ {
+
+ inline TSC::TSC() :
+ Output("TSC", "proc tick")
+ {
+ }
+
+ } // namespace Output
+} // namespace Ranch
+
+#endif // !RANCH_OUTPUT_TSC_HXX
Index: lib/cxx/src/ranch-cxx/output/all.hh
--- lib/cxx/src/ranch-cxx/output/all.hh (revision 70)
+++ lib/cxx/src/ranch-cxx/output/all.hh (working copy)
@@ -3,6 +3,7 @@
# include <ranch-cxx/output/output.hh>
# include <ranch-cxx/output/u-time.hh>
+# include <ranch-cxx/output/tsc.hh>
#endif // !RANCH_OUTPUT_ALL_HH
Index: lib/cxx/src/ranch-cxx/output/tsc.hh
--- lib/cxx/src/ranch-cxx/output/tsc.hh (revision 0)
+++ lib/cxx/src/ranch-cxx/output/tsc.hh (revision 0)
@@ -0,0 +1,32 @@
+
+
+#ifndef RANCH_OUTPUT_TSC_HH
+# define RANCH_OUTPUT_TSC_HH
+
+# include <ranch-cxx/output/output.hh>
+# include <stdint.h>
+
+namespace Ranch
+{
+ namespace Output
+ {
+
+ class TSC : public Output
+ {
+ public:
+ TSC();
+
+ protected:
+ virtual void start_();
+ virtual void stop_();
+
+ uint64_t start_tsc_;
+ }; // class Tsc
+
+ } // namespace Output
+} // namespace Ranch
+
+# include <ranch-cxx/output/tsc.hxx>
+
+#endif // !RANCH_OUTPUT_TSC_HH
+
Index: lib/cxx/src/ranch-cxx/output/Makefile.am
--- lib/cxx/src/ranch-cxx/output/Makefile.am (revision 70)
+++ lib/cxx/src/ranch-cxx/output/Makefile.am (working copy)
@@ -8,11 +8,16 @@
output.cc \
u-time.hh \
u-time.hxx \
- u-time.cc
+ u-time.cc \
+ tsc.hh \
+ tsc.hxx \
+ tsc.cc
pkgincludedir = $(includedir)/ranch-cxx/output
pkginclude_HEADERS = \
all.hh \
output.hh \
output.hxx \
u-time.hh \
- u-time.hxx
+ u-time.hxx \
+ tsc.hh \
+ tsc.hxx
Index: lib/cxx/src/ranch-cxx/output/tsc.cc
--- lib/cxx/src/ranch-cxx/output/tsc.cc (revision 0)
+++ lib/cxx/src/ranch-cxx/output/tsc.cc (revision 0)
@@ -0,0 +1,28 @@
+#include <ranch-cxx/output/tsc.hh>
+
+namespace Ranch
+{
+ namespace Output
+ {
+
+ extern "C" __inline__ uint64_t read_tsc(void)
+ {
+ uint64_t x;
+ __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
+ return x;
+ }
+
+ void TSC::start_()
+ {
+ start_tsc_ = read_tsc();
+ }
+
+ void TSC::stop_()
+ {
+ value_ = (double)(read_tsc() - start_tsc_);
+ }
+
+ } // namespace Output
+} // namespace Ranch
+
+
Index: lib/cxx/src/ranch-cxx/bencher.hh
--- lib/cxx/src/ranch-cxx/bencher.hh (revision 70)
+++ lib/cxx/src/ranch-cxx/bencher.hh (working copy)
@@ -66,7 +66,7 @@
std::string comment_;
// Necessary since we may use add_input/add_output.
bool first_start_call_;
- // Necessary to dump the score once every excepted score are registered.
+ // Necessary to dump the scores once every excepted scores are registered.
unsigned score_set_num_;
// Necessary to manage add_score(double).
Outputs::iterator cur_output_;