Benchmark for tf.scan in graph and eager modes. As of this writing, a simple tf.scan...
authorA. Unique TensorFlower <gardener@tensorflow.org>
Wed, 9 May 2018 18:22:24 +0000 (11:22 -0700)
committerTensorFlower Gardener <gardener@tensorflow.org>
Wed, 9 May 2018 18:32:16 +0000 (11:32 -0700)
PiperOrigin-RevId: 196000512

tensorflow/contrib/eager/python/examples/scan/BUILD [new file with mode: 0644]
tensorflow/contrib/eager/python/examples/scan/scan_graph_test.py [new file with mode: 0644]
tensorflow/contrib/eager/python/examples/scan/scan_test.py [new file with mode: 0644]

diff --git a/tensorflow/contrib/eager/python/examples/scan/BUILD b/tensorflow/contrib/eager/python/examples/scan/BUILD
new file mode 100644 (file)
index 0000000..638c57d
--- /dev/null
@@ -0,0 +1,25 @@
+licenses(["notice"])  # Apache 2.0
+
+package(default_visibility = ["//tensorflow:internal"])
+
+load("//tensorflow:tensorflow.bzl", "cuda_py_test")
+
+cuda_py_test(
+    name = "scan_test",
+    size = "small",
+    srcs = ["scan_test.py"],
+    additional_deps = [
+        "//third_party/py/numpy",
+        "//tensorflow:tensorflow_py",
+    ],
+)
+
+cuda_py_test(
+    name = "scan_graph_test",
+    size = "small",
+    srcs = ["scan_graph_test.py"],
+    additional_deps = [
+        "//third_party/py/numpy",
+        "//tensorflow:tensorflow_py",
+    ],
+)
diff --git a/tensorflow/contrib/eager/python/examples/scan/scan_graph_test.py b/tensorflow/contrib/eager/python/examples/scan/scan_graph_test.py
new file mode 100644 (file)
index 0000000..4661daf
--- /dev/null
@@ -0,0 +1,57 @@
+# Copyright 2018 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+"""Unit test for tf.scan under graph mode execution."""
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
+import time
+
+import numpy as np
+import tensorflow as tf
+
+
+class ScanBenchmark(tf.test.Benchmark):
+
+  def runScan(self, n):
+    elems = np.arange(n)
+    start_time = time.time()
+    sum_op = tf.scan(lambda a, x: a + x, elems, parallel_iterations=1)
+    with tf.Session() as sess:
+      sess.run(sum_op)
+    wall_time = time.time() - start_time
+
+    self.report_benchmark(
+        name='scan',
+        iters=n,
+        wall_time=wall_time)
+
+  def benchmarkScan32000(self):
+    self.runScan(32000)
+
+  def benchmarkScan1M(self):
+    self.runScan(1000000)
+
+  def benchmarkScan2M(self):
+    self.runScan(2000000)
+
+  def benchmarkScan4M(self):
+    self.runScan(4000000)
+
+  def benchmarkScan8M(self):
+    self.runScan(8000000)
+
+if __name__ == '__main__':
+  tf.test.main()
diff --git a/tensorflow/contrib/eager/python/examples/scan/scan_test.py b/tensorflow/contrib/eager/python/examples/scan/scan_test.py
new file mode 100644 (file)
index 0000000..b8c7cf1
--- /dev/null
@@ -0,0 +1,56 @@
+# Copyright 2018 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+"""Unit test for tf.scan under eager execution."""
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
+import time
+
+import numpy as np
+import tensorflow as tf
+
+
+class ScanBenchmark(tf.test.Benchmark):
+
+  def runScan(self, n):
+    elems = np.arange(n)
+    start_time = time.time()
+    _ = tf.scan(lambda a, x: a + x, elems, parallel_iterations=1)
+    wall_time = time.time() - start_time
+
+    self.report_benchmark(
+        name='scan',
+        iters=n,
+        wall_time=wall_time)
+
+  def benchmarkScan2000(self):
+    self.runScan(2000)
+
+  def benchmarkScan4000(self):
+    self.runScan(4000)
+
+  def benchmarkScan8000(self):
+    self.runScan(8000)
+
+  def benchmarkScan16000(self):
+    self.runScan(16000)
+
+  def benchmarkScan32000(self):
+    self.runScan(32000)
+
+if __name__ == '__main__':
+  tf.enable_eager_execution()
+  tf.test.main()