From 8da96e9b52cb0a1acdf84088149afbccd3962954 Mon Sep 17 00:00:00 2001
From: Derek Murray <mrry@google.com>
Date: Tue, 3 Mar 2020 10:36:55 -0800
Subject: [PATCH] [Slice] Reduce variance in benchmark.

This change switches the various Slice benchmarks to run using tf.data's
single-threaded executor. This eliminates noise from thread scheduling, which
is often larger than the actual execution time for some of the benchmarks.

PiperOrigin-RevId: 298638978
Change-Id: Id9472df0eea4a2ec56a3b88154b8069e92bc11dc
---
 tensorflow/core/kernels/BUILD            | 1 +
 tensorflow/core/kernels/slice_op_test.cc | 7 ++++++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/tensorflow/core/kernels/BUILD b/tensorflow/core/kernels/BUILD
index b3aa9278c92..6783d948052 100644
--- a/tensorflow/core/kernels/BUILD
+++ b/tensorflow/core/kernels/BUILD
@@ -2280,6 +2280,7 @@ tf_cc_test(
         "//tensorflow/core:test",
         "//tensorflow/core:test_main",
         "//tensorflow/core:testlib",
+        "//tensorflow/core/kernels/data:single_threaded_executor",
     ],
 )
 
diff --git a/tensorflow/core/kernels/slice_op_test.cc b/tensorflow/core/kernels/slice_op_test.cc
index 2ddc3e9220f..f589a09c4fc 100644
--- a/tensorflow/core/kernels/slice_op_test.cc
+++ b/tensorflow/core/kernels/slice_op_test.cc
@@ -22,6 +22,7 @@ limitations under the License.
 #include "tensorflow/core/framework/tensor.h"
 #include "tensorflow/core/framework/types.h"
 #include "tensorflow/core/framework/types.pb.h"
+#include "tensorflow/core/graph/algorithm.h"
 #include "tensorflow/core/graph/node_builder.h"
 #include "tensorflow/core/graph/testlib.h"
 #include "tensorflow/core/kernels/ops_testutil.h"
@@ -62,10 +63,14 @@ static void SliceHelper(int iters, int size) {
                   .Input(test::graph::Constant(g, sizes))
                   .Attr("T", dt)
                   .Finalize(g, &node));
+  FixupSourceAndSinkEdges(g);
 
   testing::BytesProcessed(static_cast<int64>(iters) * kDim * size * sizeof(T));
   testing::StartTiming();
-  test::Benchmark("cpu", g).Run(iters);
+  test::Benchmark("cpu", g, nullptr, nullptr, nullptr,
+                  "SINGLE_THREADED_EXECUTOR")
+      .Run(iters);
+
   testing::UseRealTime();
 }