Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
31 changed files
with
247 additions
and
86 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
sourceSets { | ||
jmh { | ||
compileClasspath += sourceSets.test.runtimeClasspath | ||
runtimeClasspath += sourceSets.test.runtimeClasspath | ||
} | ||
} | ||
|
||
dependencies { | ||
jmhCompile project | ||
jmhCompile 'org.openjdk.jmh:jmh-core:1.18' | ||
jmhCompile 'org.openjdk.jmh:jmh-generator-annprocess:1.18' | ||
} | ||
|
||
eclipse { | ||
classpath { | ||
plusConfigurations.add(configurations.jmhCompile) | ||
defaultOutputDir = file('build/classes-jmh-ide') | ||
} | ||
} | ||
|
||
task ('jmhHelp', description:'Print help for the jmh task') { | ||
doLast { | ||
println "" | ||
println "Usage of jmh tasks:" | ||
println "" | ||
|
||
println "Only execute specific benchmark(s):" | ||
println "\t./gradlew jmh -Pinclude=\".*MyBenchmark.*\"" | ||
|
||
println "" | ||
println "Specify extra profilers:" | ||
println "\t./gradlew jmh -Pprofilers=\"gc,stack\"" | ||
|
||
println "" | ||
println "Prominent profilers (for full list call jmhProfilers task):" | ||
println "\tcomp - JitCompilations, tune your iterations" | ||
println "\tstack - which methods used most time" | ||
println "\tgc - print garbage collection stats" | ||
println "\ths_thr - thread usage" | ||
|
||
println "" | ||
println "Change report format from JSON to one of [CSV, JSON, NONE, SCSV, TEXT]:" | ||
println "\t./gradlew jmh -Pformat=csv" | ||
|
||
println "" | ||
println "Specify JVM arguments:" | ||
println "\t./gradlew jmh -PjvmArgs=\"-Dtest.cluster=local\"" | ||
|
||
println "" | ||
println "Run in verification mode (execute benchmarks with minimum of fork/warmup-/benchmark-iterations):" | ||
println "\tgw jmh -Pverify" | ||
|
||
println "" | ||
println "Resources:" | ||
println "\thttp://tutorials.jenkov.com/java-performance/jmh.html (Introduction)" | ||
println "\thttp://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/ (Samples)" | ||
} | ||
} | ||
|
||
task jmhProfilers(type: JavaExec, description:'Lists the available profilers for the jmh task', group: 'Development') { | ||
classpath = sourceSets.jmh.runtimeClasspath | ||
main = 'org.openjdk.jmh.Main' | ||
args '-lprof' | ||
} | ||
|
||
task jmh(type: JavaExec, description: 'Executing JMH benchmarks') { | ||
classpath = sourceSets.jmh.runtimeClasspath | ||
main = 'org.openjdk.jmh.Main' | ||
|
||
def include = project.properties.get('include', ''); | ||
def exclude = project.properties.get('exclude'); | ||
def format = project.properties.get('format', 'json'); | ||
def profilers = project.properties.get('profilers'); | ||
def jvmArgs = project.properties.get('jvmArgs') | ||
def verify = project.properties.get('verify'); | ||
|
||
def resultFile = file("build/reports/jmh/result.${format}") | ||
|
||
args include | ||
if(exclude) { | ||
args '-e', exclude | ||
} | ||
if(verify != null) { // execute benchmarks with the minimum amount of execution (only to check if they are working) | ||
println "≥≥ Running in verify mode" | ||
args '-f' , 1 | ||
args '-wi' , 1 | ||
args '-i' , 1 | ||
} | ||
args '-foe', 'true' //fail-on-error | ||
args '-v', 'NORMAL' //verbosity [SILENT, NORMAL, EXTRA] | ||
if(profilers) { | ||
profilers.split(',').each { | ||
args '-prof', it | ||
} | ||
} | ||
args '-jvmArgsPrepend', '-Xmx3072m' | ||
args '-jvmArgsPrepend', '-Xms3072m' | ||
if(jvmArgs) { | ||
for(jvmArg in jvmArgs.split(' ')) { | ||
args '-jvmArgsPrepend', jvmArg | ||
} | ||
} | ||
args '-rf', format | ||
args '-rff', resultFile | ||
|
||
doFirst { | ||
println "\nExecuting JMH with: $args \n" | ||
resultFile.parentFile.mkdirs() | ||
} | ||
} |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.5-all.zip | ||
distributionBase=GRADLE_USER_HOME | ||
distributionPath=wrapper/dists | ||
zipStorePath=wrapper/dists | ||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1-bin.zip | ||
zipStoreBase=GRADLE_USER_HOME | ||
zipStorePath=wrapper/dists |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
package de.kintel.ki; | ||
|
||
import ch.qos.logback.classic.Level; | ||
import ch.qos.logback.classic.Logger; | ||
import com.google.common.collect.Lists; | ||
import de.kintel.ki.algorithm.MoveClassifier; | ||
import de.kintel.ki.algorithm.Weighting; | ||
import de.kintel.ki.algorithm.WeightingDummyImpl; | ||
import de.kintel.ki.algorithm.WeightingHeightAndRank; | ||
import de.kintel.ki.model.Board; | ||
import de.kintel.ki.model.GridFactory; | ||
import de.kintel.ki.model.Player; | ||
import de.kintel.ki.ruleset.RulesChecker; | ||
import de.kintel.ki.ruleset.rules.RuleDestinationIsEmpty; | ||
import de.kintel.ki.ruleset.rules.RuleDirection; | ||
import de.kintel.ki.ruleset.rules.RuleDistanceAndOpponent; | ||
import org.openjdk.jmh.annotations.*; | ||
import org.openjdk.jmh.infra.Blackhole; | ||
import org.slf4j.LoggerFactory; | ||
|
||
import static java.util.concurrent.TimeUnit.MILLISECONDS; | ||
import static java.util.concurrent.TimeUnit.NANOSECONDS; | ||
|
||
@BenchmarkMode({Mode.AverageTime}) | ||
@OutputTimeUnit(NANOSECONDS) | ||
@State(Scope.Thread) | ||
@Warmup(iterations = 3, time = 500, timeUnit = MILLISECONDS) | ||
@Measurement(iterations = 5, time = 200, timeUnit = MILLISECONDS) | ||
public class WeightingBenchmarks { | ||
|
||
private Weighting weightingDummy; | ||
private Weighting weightingHeightAndRank; | ||
private Board board; | ||
|
||
@Setup | ||
public void prepare() { | ||
weightingDummy = new WeightingDummyImpl(); | ||
weightingHeightAndRank = new WeightingHeightAndRank(new MoveClassifier(new RulesChecker(Lists.newArrayList(new RuleDirection(), new RuleDestinationIsEmpty(), new RuleDistanceAndOpponent())))); | ||
board = new Board(7, 9, GridFactory.getLaskaInitGrid()); | ||
Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); | ||
root.setLevel(Level.ERROR); | ||
} | ||
|
||
@Benchmark | ||
public void weightingHeightAndRank(Blackhole fox) { | ||
fox.consume(weightingHeightAndRank.evaluate(board, Player.SCHWARZ)); | ||
} | ||
|
||
@Benchmark | ||
public void dummyWeighting(Blackhole fox) { | ||
fox.consume(weightingDummy.evaluate(board, Player.SCHWARZ)); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.