From: eb Date: Thu, 19 Jun 2008 15:04:26 +0000 (+0000) Subject: Moved mb_time to omni_time and left mb_time.h with typedef to maintain X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=8b04fb2beeae36bbbb8d66ce95dea7df8edb65be;p=debian%2Fgnuradio Moved mb_time to omni_time and left mb_time.h with typedef to maintain backwards compatibility. Removed gcell's dependency on mblocks. Now gcell only depends on omnithread. Merged eb/wip -r8621:8623 to trunk. git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@8624 221aa14e-8319-0410-a670-987f0aec2ac5 --- diff --git a/config/grc_gcell.m4 b/config/grc_gcell.m4 index 188437f0..38854b95 100644 --- a/config/grc_gcell.m4 +++ b/config/grc_gcell.m4 @@ -21,10 +21,8 @@ AC_DEFUN([GRC_GCELL],[ GRC_ENABLE(gcell) dnl GRC_WITH(gcell) - dnl Don't do gcell if omnithread or mblock skipped - dnl (The mblock dependency should be refactored, we're just using some timing utilities) + dnl Don't do gcell if omnithread skipped GRC_CHECK_DEPENDENCY(gcell, omnithread) - GRC_CHECK_DEPENDENCY(gcell, mblock) dnl If execution gets to here, $passed will be: dnl with : if the --with code didn't error out diff --git a/configure.ac b/configure.ac index e3cd1870..9160b4ca 100644 --- a/configure.ac +++ b/configure.ac @@ -240,10 +240,10 @@ AC_ARG_ENABLE( build_dirs="config" GRC_OMNITHREAD dnl must come before gnuradio-core and mblock -GRC_PMT -GRC_MBLOCK dnl this must come after GRC_PMT GRC_GCELL GRC_GNURADIO_CORE +GRC_PMT +GRC_MBLOCK dnl this must come after GRC_PMT GRC_USRP GRC_GR_USRP dnl this must come after GRC_USRP GRC_GR_GCELL dnl this must come after GRC_GCELL and GRC_GNURADIO_CORE diff --git a/gcell/src/apps/Makefile.am b/gcell/src/apps/Makefile.am index e8cbf3cf..7dd69565 100644 --- a/gcell/src/apps/Makefile.am +++ b/gcell/src/apps/Makefile.am @@ -22,7 +22,7 @@ include $(top_srcdir)/Makefile.common SUBDIRS = spu . -AM_CPPFLAGS = $(DEFINES) $(OMNITHREAD_INCLUDES) $(MBLOCK_INCLUDES) \ +AM_CPPFLAGS = $(DEFINES) $(OMNITHREAD_INCLUDES) \ $(GCELL_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) @@ -41,7 +41,7 @@ test_all_SOURCES = test_all.cc test_all_LDADD = $(GCELL_QA_LA) $(GCELL_LA) benchmark_dma_SOURCES = benchmark_dma.cc -benchmark_dma_LDADD = spu/benchmark_procs $(GCELL_LA) $(MBLOCK_LA) +benchmark_dma_LDADD = spu/benchmark_procs $(GCELL_LA) benchmark_nop_SOURCES = benchmark_nop.cc -benchmark_nop_LDADD = spu/benchmark_procs $(GCELL_LA) $(MBLOCK_LA) +benchmark_nop_LDADD = spu/benchmark_procs $(GCELL_LA) diff --git a/gcell/src/apps/benchmark_dma.cc b/gcell/src/apps/benchmark_dma.cc index 961876ad..7dfaa4c2 100644 --- a/gcell/src/apps/benchmark_dma.cc +++ b/gcell/src/apps/benchmark_dma.cc @@ -23,7 +23,7 @@ #include #endif #include "gc_job_manager.h" -#include "mb_time.h" +#include #include #include #include @@ -148,7 +148,7 @@ run_test(unsigned int nspes, unsigned int usecs, unsigned int dma_size, int getp for (int iter = 0; iter < 1; iter++){ - mb_time t_start = mb_time::time(); + omni_time t_start = omni_time::time(); nsubmitted = 0; ncompleted = 0; @@ -203,7 +203,7 @@ run_test(unsigned int nspes, unsigned int usecs, unsigned int dma_size, int getp } // stop timing - mb_time t_stop = mb_time::time(); + omni_time t_stop = omni_time::time(); double delta = (t_stop - t_start).double_time(); printf("nspes: %2d udelay: %4d elapsed_time: %7.3f dma_size: %5d dma_throughput: %7.3e\n", diff --git a/gcell/src/apps/benchmark_nop.cc b/gcell/src/apps/benchmark_nop.cc index b87137d5..f427c85d 100644 --- a/gcell/src/apps/benchmark_nop.cc +++ b/gcell/src/apps/benchmark_nop.cc @@ -23,7 +23,7 @@ #include #endif #include "gc_job_manager.h" -#include "mb_time.h" +#include #include #include #include @@ -73,7 +73,7 @@ run_test(unsigned int nspes, unsigned int usecs, int njobs) init_jd(all_jds[i], usecs); } - mb_time t_start = mb_time::time(); + omni_time t_start = omni_time::time(); ci = 0; njds[0] = 0; @@ -122,7 +122,7 @@ run_test(unsigned int nspes, unsigned int usecs, int njobs) } // stop timing - mb_time t_stop = mb_time::time(); + omni_time t_stop = omni_time::time(); double delta = (t_stop - t_start).double_time(); printf("nspes: %2d udelay: %4d elapsed_time: %7.3f njobs: %g speedup: %6.3f\n", mgr->nspes(), usecs, delta, (double) njobs, diff --git a/mblock/src/lib/Makefile.am b/mblock/src/lib/Makefile.am index 4bdd9b1a..a005f830 100644 --- a/mblock/src/lib/Makefile.am +++ b/mblock/src/lib/Makefile.am @@ -61,7 +61,6 @@ libmblock_la_SOURCES = \ mb_runtime_base.cc \ mb_runtime_nop.cc \ mb_runtime_thread_per_block.cc \ - mb_time.cc \ mb_timer_queue.cc \ mb_util.cc \ mb_worker.cc diff --git a/mblock/src/lib/mb_time.cc b/mblock/src/lib/mb_time.cc deleted file mode 100644 index 48b2c666..00000000 --- a/mblock/src/lib/mb_time.cc +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2007 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include - - -mb_time::mb_time(double real_secs) -{ - double floor_secs = floor(real_secs); - d_secs = (long) floor_secs; - d_nsecs = (long) ((real_secs - floor_secs) * 1e9); // always positive -} - -mb_time -mb_time::time(const mb_time &delta_t) -{ - unsigned long abs_sec, abs_nsec; - unsigned long rel_sec = delta_t.d_secs; - unsigned long rel_nsec = delta_t.d_nsecs; - - omni_thread::get_time(&abs_sec, &abs_nsec, rel_sec, rel_nsec); - return mb_time(abs_sec, abs_nsec); -} - - -mb_time -operator+(const mb_time &x, const mb_time &y) -{ - mb_time r(x.d_secs + y.d_secs, x.d_nsecs + y.d_nsecs); - while (r.d_nsecs >= 1000000000){ - r.d_nsecs -= 1000000000; - r.d_secs++; - } - return r; -} - -mb_time -operator-(const mb_time &x, const mb_time &y) -{ - // assert(!(x < y)); - - mb_time r(x.d_secs - y.d_secs, x.d_nsecs - y.d_nsecs); - while (r.d_nsecs < 0){ - r.d_nsecs += 1000000000; - r.d_secs--; - } - return r; -} - -mb_time -operator+(const mb_time &x, double y) -{ - return x + mb_time(y); -} - -mb_time -operator-(const mb_time &x, double y) -{ - return x - mb_time(y); -} diff --git a/mblock/src/lib/mb_time.h b/mblock/src/lib/mb_time.h index b9c655b6..cba6be78 100644 --- a/mblock/src/lib/mb_time.h +++ b/mblock/src/lib/mb_time.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2007 Free Software Foundation, Inc. + * Copyright 2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -21,69 +21,7 @@ #ifndef INCLUDED_MB_TIME_H #define INCLUDED_MB_TIME_H -struct mb_time { - long int d_secs; // seconds. - long int d_nsecs; // nanoseconds. Always in [0, 1e9-1] - - mb_time() : d_secs(0), d_nsecs(0) {} - mb_time(long secs, long nanosecs=0) : d_secs(secs), d_nsecs(nanosecs) {} - - // N.B., this only makes sense for differences between times. - // Double doesn't have enough bits to precisely represent an absolute time. - mb_time(double secs); - - // N.B. This only makes sense for differences between times. - // Double doesn't have enough bits to precisely represent an absolute time. - double double_time() const { return (double)d_secs + d_nsecs * 1e-9; } - - /*! - * \brief Return an absolute time suitable for use with - * schedule_one_shot_timeout & schedule_periodic_timeout - * - * The return value is the current time plus the given relative offset. - */ - static mb_time time(const mb_time &relative_offset = mb_time()); -}; - - -inline static bool -operator<(const mb_time &x, const mb_time &y) -{ - return ((x.d_secs < y.d_secs) - || (x.d_secs == y.d_secs && x.d_nsecs < y.d_nsecs)); -} - -inline static bool -operator>(const mb_time &x, const mb_time &y) -{ - return ((x.d_secs > y.d_secs) - || (x.d_secs == y.d_secs && x.d_nsecs > y.d_nsecs)); -} - -inline static bool -operator>=(const mb_time &x, const mb_time &y) -{ - return ((x.d_secs > y.d_secs) - || (x.d_secs == y.d_secs && x.d_nsecs >= y.d_nsecs)); -} - -inline static bool -operator<=(const mb_time &x, const mb_time &y) -{ - return ((x.d_secs < y.d_secs) - || (x.d_secs == y.d_secs && x.d_nsecs <= y.d_nsecs)); -} - -inline static bool -operator==(const mb_time &x, const mb_time &y) -{ - return (x.d_secs == y.d_secs && x.d_nsecs == y.d_nsecs); -} - - -mb_time operator+(const mb_time &x, const mb_time &y); -mb_time operator+(const mb_time &x, double y); -mb_time operator-(const mb_time &x, const mb_time &y); -mb_time operator-(const mb_time &x, double y); +#include +typedef omni_time mb_time; #endif /* INCLUDED_MB_TIME_H */ diff --git a/omnithread/Makefile.am b/omnithread/Makefile.am index 0985f4ed..d0dde72b 100644 --- a/omnithread/Makefile.am +++ b/omnithread/Makefile.am @@ -37,11 +37,13 @@ lib_LTLIBRARIES = libgromnithread.la if OMNITHREAD_POSIX libgromnithread_la_SOURCES = \ + omni_time.cc \ posix.cc endif if OMNITHREAD_NT libgromnithread_la_SOURCES = \ + omni_time.cc \ nt.cc endif @@ -67,6 +69,7 @@ EXTRA_DIST = \ grinclude_HEADERS = \ omnithread.h \ + omni_time.h \ ot_mach.h \ ot_nt.h \ ot_posix.h \ diff --git a/omnithread/omni_time.cc b/omnithread/omni_time.cc new file mode 100644 index 00000000..8703245b --- /dev/null +++ b/omnithread/omni_time.cc @@ -0,0 +1,84 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include + + +omni_time::omni_time(double real_secs) +{ + double floor_secs = floor(real_secs); + d_secs = (long) floor_secs; + d_nsecs = (long) ((real_secs - floor_secs) * 1e9); // always positive +} + +omni_time +omni_time::time(const omni_time &delta_t) +{ + unsigned long abs_sec, abs_nsec; + unsigned long rel_sec = delta_t.d_secs; + unsigned long rel_nsec = delta_t.d_nsecs; + + omni_thread::get_time(&abs_sec, &abs_nsec, rel_sec, rel_nsec); + return omni_time(abs_sec, abs_nsec); +} + + +omni_time +operator+(const omni_time &x, const omni_time &y) +{ + omni_time r(x.d_secs + y.d_secs, x.d_nsecs + y.d_nsecs); + while (r.d_nsecs >= 1000000000){ + r.d_nsecs -= 1000000000; + r.d_secs++; + } + return r; +} + +omni_time +operator-(const omni_time &x, const omni_time &y) +{ + // assert(!(x < y)); + + omni_time r(x.d_secs - y.d_secs, x.d_nsecs - y.d_nsecs); + while (r.d_nsecs < 0){ + r.d_nsecs += 1000000000; + r.d_secs--; + } + return r; +} + +omni_time +operator+(const omni_time &x, double y) +{ + return x + omni_time(y); +} + +omni_time +operator-(const omni_time &x, double y) +{ + return x - omni_time(y); +} diff --git a/omnithread/omni_time.h b/omnithread/omni_time.h new file mode 100644 index 00000000..bfb15161 --- /dev/null +++ b/omnithread/omni_time.h @@ -0,0 +1,89 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +#ifndef INCLUDED_OMNI_TIME_H +#define INCLUDED_OMNI_TIME_H + +struct omni_time { + long int d_secs; // seconds. + long int d_nsecs; // nanoseconds. Always in [0, 1e9-1] + + omni_time() : d_secs(0), d_nsecs(0) {} + omni_time(long secs, long nanosecs=0) : d_secs(secs), d_nsecs(nanosecs) {} + + // N.B., this only makes sense for differences between times. + // Double doesn't have enough bits to precisely represent an absolute time. + omni_time(double secs); + + // N.B. This only makes sense for differences between times. + // Double doesn't have enough bits to precisely represent an absolute time. + double double_time() const { return (double)d_secs + d_nsecs * 1e-9; } + + /*! + * \brief Return an absolute time suitable for use with + * schedule_one_shot_timeout & schedule_periodic_timeout + * + * The return value is the current time plus the given relative offset. + */ + static omni_time time(const omni_time &relative_offset = omni_time()); +}; + + +inline static bool +operator<(const omni_time &x, const omni_time &y) +{ + return ((x.d_secs < y.d_secs) + || (x.d_secs == y.d_secs && x.d_nsecs < y.d_nsecs)); +} + +inline static bool +operator>(const omni_time &x, const omni_time &y) +{ + return ((x.d_secs > y.d_secs) + || (x.d_secs == y.d_secs && x.d_nsecs > y.d_nsecs)); +} + +inline static bool +operator>=(const omni_time &x, const omni_time &y) +{ + return ((x.d_secs > y.d_secs) + || (x.d_secs == y.d_secs && x.d_nsecs >= y.d_nsecs)); +} + +inline static bool +operator<=(const omni_time &x, const omni_time &y) +{ + return ((x.d_secs < y.d_secs) + || (x.d_secs == y.d_secs && x.d_nsecs <= y.d_nsecs)); +} + +inline static bool +operator==(const omni_time &x, const omni_time &y) +{ + return (x.d_secs == y.d_secs && x.d_nsecs == y.d_nsecs); +} + + +omni_time operator+(const omni_time &x, const omni_time &y); +omni_time operator+(const omni_time &x, double y); +omni_time operator-(const omni_time &x, const omni_time &y); +omni_time operator-(const omni_time &x, double y); + +#endif /* INCLUDED_OMNI_TIME_H */