aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/stream_executor/timer.h
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/stream_executor/timer.h')
-rw-r--r--tensorflow/stream_executor/timer.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/tensorflow/stream_executor/timer.h b/tensorflow/stream_executor/timer.h
new file mode 100644
index 0000000000..ff54c06180
--- /dev/null
+++ b/tensorflow/stream_executor/timer.h
@@ -0,0 +1,60 @@
+#ifndef TENSORFLOW_STREAM_EXECUTOR_TIMER_H_
+#define TENSORFLOW_STREAM_EXECUTOR_TIMER_H_
+
+#include <memory>
+
+#include "tensorflow/stream_executor/platform/port.h"
+
+namespace perftools {
+namespace gputools {
+
+namespace internal {
+class TimerInterface;
+} // namespace internal
+
+class StreamExecutor;
+
+// An interval timer, suitable for use in timing the operations which occur in
+// streams.
+//
+// Thread-hostile: CUDA associates a CUDA-context with a particular thread in
+// the system. Any operation that a user attempts to perform by using a Timer
+// on a thread not-associated with the CUDA-context has unknown behavior at the
+// current time; see b/13176597
+class Timer {
+ public:
+ // Instantiate a timer tied to parent as a platform executor.
+ explicit Timer(StreamExecutor *parent);
+
+ // Deallocates any timer resources that the parent StreamExecutor has bestowed
+ // upon this object.
+ ~Timer();
+
+ // Returns the elapsed number of microseconds for a completed timer.
+ // Completed means has been through a start/stop lifecycle.
+ uint64 Microseconds() const;
+
+ // Returns the elapsed number of nanoseconds for a completed timer.
+ // Completed means has been through a start/stop lifecycle.
+ uint64 Nanoseconds() const;
+
+ // Returns the (opaque) backing platform ITimer instance. Ownership is
+ // not transferred to the caller.
+ internal::TimerInterface *implementation() { return implementation_.get(); }
+
+ private:
+ // Platform-dependent implementation of the timer internals for the underlying
+ // platform. This class just delegates to this opaque instance.
+ std::unique_ptr<internal::TimerInterface> implementation_;
+
+ // The StreamExecutor that manages the platform-specific internals for this
+ // timer.
+ StreamExecutor *parent_;
+
+ SE_DISALLOW_COPY_AND_ASSIGN(Timer);
+};
+
+} // namespace gputools
+} // namespace perftools
+
+#endif // TENSORFLOW_STREAM_EXECUTOR_TIMER_H_