You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by fh...@apache.org on 2015/10/26 22:50:51 UTC

[8/8] flink git commit: [FLINK-2919] Port FieldAccessMinibenchmark to JMH.

[FLINK-2919] Port FieldAccessMinibenchmark to JMH.

This closes #1300


Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/7265d81f
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/7265d81f
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/7265d81f

Branch: refs/heads/master
Commit: 7265d81ff95aff4ddfbcbd4ef25869ea8f159769
Parents: e5ee55b
Author: gallenvara <ga...@126.com>
Authored: Mon Oct 26 15:15:14 2015 +0800
Committer: Fabian Hueske <fh...@apache.org>
Committed: Mon Oct 26 20:05:03 2015 +0100

----------------------------------------------------------------------
 .../runtime/FieldAccessMinibenchmark.java       | 170 +++++++++++++++++++
 .../runtime/FieldAccessMinibenchmark.java       | 150 ----------------
 2 files changed, 170 insertions(+), 150 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flink/blob/7265d81f/flink-benchmark/src/test/java/org/apache/flink/benchmark/api/java/typeutils/runtime/FieldAccessMinibenchmark.java
----------------------------------------------------------------------
diff --git a/flink-benchmark/src/test/java/org/apache/flink/benchmark/api/java/typeutils/runtime/FieldAccessMinibenchmark.java b/flink-benchmark/src/test/java/org/apache/flink/benchmark/api/java/typeutils/runtime/FieldAccessMinibenchmark.java
new file mode 100644
index 0000000..0a434e9
--- /dev/null
+++ b/flink-benchmark/src/test/java/org/apache/flink/benchmark/api/java/typeutils/runtime/FieldAccessMinibenchmark.java
@@ -0,0 +1,170 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.flink.benchmark.api.java.typeutils.runtime;
+
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.results.RunResult;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+import java.lang.management.ManagementFactory;
+import java.lang.management.RuntimeMXBean;
+import java.lang.reflect.Field;
+import java.util.Collection;
+import java.util.concurrent.TimeUnit;
+
+@State(Scope.Thread)
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+public class FieldAccessMinibenchmark {
+
+	private final long RUNS = 1000000000L;
+	static Field wordDescField;
+	static Field wordField;
+	static {
+		try {
+			wordDescField = WC.class.getField("wordDesc");
+			wordField = ComplexWordDescriptor.class.getField("word");
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	@Setup
+	public void warmUp() throws NoSuchFieldException,IllegalAccessException{
+		WC word0 = new WC(14, "Hallo");
+		WC word1 = new WC(3, "Hola");
+		for (long i = 0; i < 100000000; i++) {
+			compareCodeGenPublicFields(word0, word1);
+			compareCodeGenMethods(word0, word1);
+			compareReflective(word0, word1);
+		}
+	}
+
+	public static class ComplexWordDescriptor {
+		public String word;
+
+		public String getWord() {
+			return word;
+		}
+	}
+
+	public static class WC {
+		public int count;
+		public ComplexWordDescriptor wordDesc;
+
+		public WC(int c, String s) throws NoSuchFieldException,
+				SecurityException {
+			this.count = c;
+			this.wordDesc = new ComplexWordDescriptor();
+			this.wordDesc.word = s;
+		}
+
+		public ComplexWordDescriptor getWordDesc() {
+			return wordDesc;
+		}
+
+	}
+
+	public static int compareCodeGenPublicFields(WC w1, WC w2) {
+		return w1.wordDesc.word.compareTo(w2.wordDesc.word);
+	}
+
+	public static int compareCodeGenMethods(WC w1, WC w2) {
+		return w1.getWordDesc().getWord().compareTo(w2.getWordDesc().getWord());
+	}
+
+	public static int compareReflective(WC w1, WC w2)
+			throws IllegalArgumentException, IllegalAccessException {
+		// get String of w1
+		Object wordDesc1 = wordDescField.get(w1);
+		String word2cmp1 = (String) wordField.get(wordDesc1);
+
+		// get String of w2
+		Object wordDesc2 = wordDescField.get(w2);
+		String word2cmp2 = (String) wordField.get(wordDesc2);
+
+		return word2cmp1.compareTo(word2cmp2);
+	}
+
+	@Benchmark
+	public void codeGenPublicFields() throws NoSuchFieldException {
+		WC word0 = new WC(14, "Hallo");
+		WC word1 = new WC(3, "Hola");
+		for (long i = 0; i < RUNS; i++) {
+			int a = compareCodeGenPublicFields(word0, word1);
+			if (a == 0) {
+				System.err.println("hah");
+			}
+		}
+	}
+
+	@Benchmark
+	public void codeGenMethods() throws NoSuchFieldException{
+		WC word0 = new WC(14, "Hallo");
+		WC word1 = new WC(3, "Hola");
+		for (long i = 0; i < RUNS; i++) {
+			int a = compareCodeGenPublicFields(word0, word1);
+			if (a == 0) {
+				System.err.println("hah");
+			}
+		}
+	}
+
+	@Benchmark
+	public void reflection() throws NoSuchFieldException,IllegalAccessException {
+		WC word0 = new WC(14, "Hallo");
+		WC word1 = new WC(3, "Hola");
+		for (long i = 0; i < RUNS; i++) {
+			int a = compareReflective(word0, word1);
+			if (a == 0) {
+				System.err.println("hah");
+			}
+		}
+	}
+
+	/**
+	 * results on Core i7 2600k
+	 *
+	 *
+	 * warming up Code gen 5019 Reflection 20364 Factor = 4.057382
+	 */
+	public static void main(String[] args) throws RunnerException {
+
+		Options opt = new OptionsBuilder()
+				.include(FieldAccessMinibenchmark.class.getSimpleName())
+				.warmupIterations(2)
+				.measurementIterations(2)
+				.forks(1)
+				.build();
+		Collection<RunResult> results = new Runner(opt).run();
+		double[] score = new double[3];
+		int count = 0;
+		final RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
+		String jvm = bean.getVmName() + " - " + bean.getVmVendor() + " - "
+				+ bean.getSpecVersion() + '/' + bean.getVmVersion();
+		System.err.println("Jvm info : " + jvm);
+		for (RunResult r : results) {
+			score[count++] = r.getPrimaryResult().getScore();
+		}
+		System.err.println("Factor vs public = " + score[2] / score[1]);
+		System.err.println("Factor vs methods = " + score[2] / score[0]);
+	}
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/7265d81f/flink-java/src/test/java/org/apache/flink/api/java/typeutils/runtime/FieldAccessMinibenchmark.java
----------------------------------------------------------------------
diff --git a/flink-java/src/test/java/org/apache/flink/api/java/typeutils/runtime/FieldAccessMinibenchmark.java b/flink-java/src/test/java/org/apache/flink/api/java/typeutils/runtime/FieldAccessMinibenchmark.java
deleted file mode 100644
index 8a0ec82..0000000
--- a/flink-java/src/test/java/org/apache/flink/api/java/typeutils/runtime/FieldAccessMinibenchmark.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-package org.apache.flink.api.java.typeutils.runtime;
-
-import java.lang.management.ManagementFactory;
-import java.lang.management.RuntimeMXBean;
-import java.lang.reflect.Field;
-
-public class FieldAccessMinibenchmark {
-
-	static Field wordDescField;
-	static Field wordField;
-	static {
-		try {
-			wordDescField = WC.class.getField("wordDesc");
-			wordField = ComplexWordDescriptor.class.getField("word");
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-
-	public static class ComplexWordDescriptor {
-		public String word;
-
-		public String getWord() {
-			return word;
-		}
-	}
-
-	public static class WC {
-		public int count;
-		public ComplexWordDescriptor wordDesc;
-
-		public WC(int c, String s) throws NoSuchFieldException,
-				SecurityException {
-			this.count = c;
-			this.wordDesc = new ComplexWordDescriptor();
-			this.wordDesc.word = s;
-		}
-
-		public ComplexWordDescriptor getWordDesc() {
-			return wordDesc;
-		}
-
-	}
-
-	public static int compareCodeGenPublicFields(WC w1, WC w2) {
-		return w1.wordDesc.word.compareTo(w2.wordDesc.word);
-	}
-
-	public static int compareCodeGenMethods(WC w1, WC w2) {
-		return w1.getWordDesc().getWord().compareTo(w2.getWordDesc().getWord());
-	}
-
-	public static int compareReflective(WC w1, WC w2)
-			throws IllegalArgumentException, IllegalAccessException {
-		// get String of w1
-		Object wordDesc1 = wordDescField.get(w1);
-		String word2cmp1 = (String) wordField.get(wordDesc1);
-
-		// get String of w2
-		Object wordDesc2 = wordDescField.get(w2);
-		String word2cmp2 = (String) wordField.get(wordDesc2);
-
-		return word2cmp1.compareTo(word2cmp2);
-	}
-
-	/**
-	 * results on Core i7 2600k
-	 * 
-	 * 
-	 * warming up Code gen 5019 Reflection 20364 Factor = 4.057382
-	 */
-	public static void main(String[] args) throws NoSuchFieldException,
-			SecurityException, IllegalArgumentException, IllegalAccessException {
-		final long RUNS = 1000000000L;
-
-		final RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
-		String jvm = bean.getVmName() + " - " + bean.getVmVendor() + " - "
-				+ bean.getSpecVersion() + '/' + bean.getVmVersion();
-		System.err.println("Jvm info : " + jvm);
-
-		WC word0 = new WC(14, "Hallo");
-		WC word1 = new WC(3, "Hola");
-
-		System.err.println("warming up");
-		for (long i = 0; i < 100000000; i++) {
-			compareCodeGenPublicFields(word0, word1);
-			compareCodeGenMethods(word0, word1);
-			compareReflective(word0, word1);
-		}
-
-		System.err.println("Code gen public fields");
-		long startTime = System.currentTimeMillis();
-		for (long i = 0; i < RUNS; i++) {
-			int a = compareCodeGenPublicFields(word0, word1);
-			if (a == 0) {
-				System.err.println("hah");
-			}
-		}
-		long stopTime = System.currentTimeMillis();
-		long elapsedTimeGen = stopTime - startTime;
-		System.err.println(elapsedTimeGen);
-
-		System.err.println("Code gen methods");
-		startTime = System.currentTimeMillis();
-		for (long i = 0; i < RUNS; i++) {
-			int a = compareCodeGenPublicFields(word0, word1);
-			if (a == 0) {
-				System.err.println("hah");
-			}
-		}
-		stopTime = System.currentTimeMillis();
-		long elapsedTimeGenMethods = stopTime - startTime;
-		System.err.println(elapsedTimeGenMethods);
-
-		System.err.println("Reflection");
-
-		startTime = System.currentTimeMillis();
-		for (long i = 0; i < RUNS; i++) {
-			int a = compareReflective(word0, word1);
-			if (a == 0) {
-				System.err.println("hah");
-			}
-		}
-		stopTime = System.currentTimeMillis();
-		long elapsedTimeRef = stopTime - startTime;
-		System.err.println(elapsedTimeRef);
-
-		System.err.println("Factor vs public = "
-				+ (elapsedTimeRef / (float) elapsedTimeGen));
-		System.err.println("Factor vs methods = "
-				+ (elapsedTimeRef / (float) elapsedTimeGenMethods));
-	}
-}