Don't do anything in benchmarks if iters == 0.

Change: 122740998
This commit is contained in:
A. Unique TensorFlower 2016-05-19 08:48:09 -08:00 committed by TensorFlower Gardener
parent e55e45aef7
commit 7584aa60a4

View File

@ -115,50 +115,51 @@ string GetRendezvousKey(const Node* node) {
void Benchmark::RunWithArgs(
const std::vector<std::pair<const Node*, Tensor>>& inputs,
const std::vector<const Node*>& outputs, int iters) {
if (device_) {
// Gets inputs' and outputs' rendezvous keys.
std::vector<std::pair<string, Tensor>> in;
for (const auto& p : inputs) {
in.push_back({GetRendezvousKey(p.first), p.second});
}
std::vector<string> out;
for (const auto& n : outputs) {
out.push_back(GetRendezvousKey(n));
}
Tensor unused; // In benchmark, we don't care the return value.
bool is_dead;
// Warm up
Executor::Args args;
args.rendezvous = rendez_;
args.runner = [this](std::function<void()> closure) {
pool_->Schedule(closure);
};
for (int i = 0; i < 3; ++i) {
for (const auto& p : in) {
rendez_->Send(p.first, Rendezvous::Args(), p.second, false);
}
TF_CHECK_OK(exec_->Run(args));
for (const string& key : out) {
rendez_->Recv(key, Rendezvous::Args(), &unused, &is_dead);
}
}
TF_CHECK_OK(device_->Sync());
testing::StartTiming();
while (iters-- > 0) {
for (const auto& p : in) {
rendez_->Send(p.first, Rendezvous::Args(), p.second, false);
}
TF_CHECK_OK(exec_->Run(args));
for (const string& key : out) {
rendez_->Recv(key, Rendezvous::Args(), &unused, &is_dead);
}
}
TF_CHECK_OK(device_->Sync());
testing::StopTiming();
if (!device_ || iters == 0) {
return;
}
// Gets inputs' and outputs' rendezvous keys.
std::vector<std::pair<string, Tensor>> in;
for (const auto& p : inputs) {
in.push_back({GetRendezvousKey(p.first), p.second});
}
std::vector<string> out;
for (const auto& n : outputs) {
out.push_back(GetRendezvousKey(n));
}
Tensor unused; // In benchmark, we don't care the return value.
bool is_dead;
// Warm up
Executor::Args args;
args.rendezvous = rendez_;
args.runner = [this](std::function<void()> closure) {
pool_->Schedule(closure);
};
for (int i = 0; i < 3; ++i) {
for (const auto& p : in) {
rendez_->Send(p.first, Rendezvous::Args(), p.second, false);
}
TF_CHECK_OK(exec_->Run(args));
for (const string& key : out) {
rendez_->Recv(key, Rendezvous::Args(), &unused, &is_dead);
}
}
TF_CHECK_OK(device_->Sync());
testing::StartTiming();
while (iters-- > 0) {
for (const auto& p : in) {
rendez_->Send(p.first, Rendezvous::Args(), p.second, false);
}
TF_CHECK_OK(exec_->Run(args));
for (const string& key : out) {
rendez_->Recv(key, Rendezvous::Args(), &unused, &is_dead);
}
}
TF_CHECK_OK(device_->Sync());
testing::StopTiming();
}
} // end namespace test