aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/core/util/util.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/core/util/util.cc')
-rw-r--r--tensorflow/core/util/util.cc81
1 files changed, 81 insertions, 0 deletions
diff --git a/tensorflow/core/util/util.cc b/tensorflow/core/util/util.cc
new file mode 100644
index 0000000000..14ac513074
--- /dev/null
+++ b/tensorflow/core/util/util.cc
@@ -0,0 +1,81 @@
+#include "tensorflow/core/util/util.h"
+
+#include "tensorflow/core/platform/logging.h"
+namespace tensorflow {
+
+StringPiece NodeNamePrefix(const StringPiece& op_name) {
+ StringPiece sp(op_name);
+ auto p = sp.find('/');
+ if (p == StringPiece::npos || p == 0) {
+ return "";
+ } else {
+ return StringPiece(sp.data(), p);
+ }
+}
+
+StringPiece NodeNameFullPrefix(const StringPiece& op_name) {
+ StringPiece sp(op_name);
+ auto p = sp.rfind('/');
+ if (p == StringPiece::npos || p == 0) {
+ return "";
+ } else {
+ return StringPiece(sp.data(), p);
+ }
+}
+
+MovingAverage::MovingAverage(int window)
+ : window_(window),
+ sum_(0.0),
+ data_(new double[window_]),
+ head_(0),
+ count_(0) {
+ CHECK_GE(window, 1);
+}
+
+MovingAverage::~MovingAverage() { delete[] data_; }
+
+void MovingAverage::Clear() {
+ count_ = 0;
+ head_ = 0;
+ sum_ = 0;
+}
+
+double MovingAverage::GetAverage() const {
+ if (count_ == 0) {
+ return 0;
+ } else {
+ return static_cast<double>(sum_) / count_;
+ }
+}
+
+void MovingAverage::AddValue(double v) {
+ if (count_ < window_) {
+ // This is the warmup phase. We don't have a full window's worth of data.
+ head_ = count_;
+ data_[count_++] = v;
+ } else {
+ if (window_ == ++head_) {
+ head_ = 0;
+ }
+ // Toss the oldest element
+ sum_ -= data_[head_];
+ // Add the newest element
+ data_[head_] = v;
+ }
+ sum_ += v;
+}
+
+static char hex_char[] = "0123456789abcdef";
+
+string PrintMemory(const char* ptr, int n) {
+ string ret;
+ ret.resize(n * 3);
+ for (int i = 0; i < n; ++i) {
+ ret[i * 3] = ' ';
+ ret[i * 3 + 1] = hex_char[ptr[i] >> 4];
+ ret[i * 3 + 2] = hex_char[ptr[i] & 0xf];
+ }
+ return ret;
+}
+
+} // namespace tensorflow