blob: 46210a2346c558a1fb5b3312b5a03d105874d712 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include "tensorflow/stream_executor/timer.h"
#include "tensorflow/stream_executor/platform/port.h"
#include "tensorflow/stream_executor/platform.h"
#include "tensorflow/stream_executor/platform/logging.h"
#include "tensorflow/stream_executor/stream_executor.h"
#include "tensorflow/stream_executor/stream_executor_internal.h"
namespace perftools {
namespace gputools {
static internal::TimerInterface *CreateTimerImplementation(
StreamExecutor *parent) {
PlatformKind platform_kind = parent->platform_kind();
if (platform_kind == PlatformKind::kCuda) {
return (*internal::MakeCUDATimerImplementation())(parent);
} else if (platform_kind == PlatformKind::kOpenCL ||
platform_kind == PlatformKind::kOpenCLAltera) {
return (*internal::MakeOpenCLTimerImplementation())(parent);
} else if (platform_kind == PlatformKind::kHost) {
return internal::MakeHostTimerImplementation(parent);
} else if (platform_kind == PlatformKind::kMock) {
return nullptr;
} else {
LOG(FATAL) << "cannot create timer implementation for platform kind: "
<< PlatformKindString(platform_kind);
}
}
Timer::Timer(StreamExecutor *parent)
: implementation_(CreateTimerImplementation(parent)), parent_(parent) {}
Timer::~Timer() { parent_->DeallocateTimer(this); }
uint64 Timer::Microseconds() const { return implementation_->Microseconds(); }
uint64 Timer::Nanoseconds() const { return implementation_->Nanoseconds(); }
} // namespace gputools
} // namespace perftools
|