문제

와 함께 , 지만,지금까지 관리하지 않은 제대로 설정하도록.밀라노 기반 벤치마크 작동합니다.

으로 조합 sbt+.java 기반의 벤치마킹 동을 시작하기 위해 노력하고에서는 기초입니다.내가 사용하 sbt0.13.1.


.java 기반의 벤치마크를 사용하여 sbt

니다.sbt

import AssemblyKeys._

name := "scala-benchmark"

version := "1.0"

scalaVersion := "2.10.3"

scalacOptions += "-deprecation"

libraryDependencies += "org.openjdk.jmh" % "jmh-core" % "0.5.5"

libraryDependencies += "org.openjdk.jmh" % "jmh-java-benchmark-archetype" % "0.5.5"

libraryDependencies += "org.openjdk.jmh" % "jmh-generator-annprocess" % "0.5.5"

libraryDependencies += "org.openjdk.jmh" % "jmh-generator-bytecode" % "0.5.5"

assemblySettings

jarName in assembly := "microbenchmarks.jar"

test in assembly := {}

mainClass in assembly := Some("org.openjdk.jmh.Main")

단일"지방"항아리 끝에, sbt-어셈블리 플러그인이 필요합니다:

프로젝트/어셈블리입니다.sbt

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")

간단한 벤치마크:

src/main/java/app/benchmark/java/benchmark2/Benchmark2.java

package app.benchmark.java.benchmark2;

import org.openjdk.jmh.annotations.GenerateMicroBenchmark;
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;

public class Benchmark2 {
    @GenerateMicroBenchmark
    public int run() {
        int result = 0;
        for (int i = 0; i < 10; i++) {
            result += i * i;
        }
        return result;
    }
}

실행 sbt assembly 이 출력:

$sbt 어셈블리
[...]
[정보]컴파일하는 2 스칼라 원본 및 2Java 원본다.
[경고]경고:지원되는 원본 버전은'RELEASE_6'에서 프로세서 주석'org.openjdk.jmh.발전기.GenerateMicroBenchmarkProcessor'보 소스'1.8'
[경고]1 경고
[정보]을 포함하여:jmh-java-benchmark-archetype-0.5.5.jar
[정보]을 포함하여:jmh-generator-bytecode-0.5.5.jar
[정보]을 포함하여:jopt-simple-4.6.jar
[정보]을 포함하여:jmh-generator-reflection-0.5.5.jar
[정보]을 포함하여:jmh-generator-annprocess-0.5.5.jar
[정보]을 포함하여:asm-4.2.jar
[정보]을 포함하여:commons-math3-3.2.jar
[정보]을 포함하여:jmh-core-0.5.5.jar
[정보]을 포함하여:scala-library.jar
[...]
[보장/home/scala-2.10/vc/rhaag/scala/scala-benchmark/target/scala-2.10/microbenchmarks.jar ...

결과 microbenchmarks.jar 모든 것이 포함되어를 실행하는 데 필요한 벤치마크:

$ java -jar target/scala-2.10/microbenchmarks.jar -wi 3 -i 3 -f 1 app.benchmark.java.benchmark2.Benchmark2.run 

[...] 

Benchmark                  Mode   Samples         Mean   Mean error    Units 

a.b.j.b.Benchmark2.run    thrpt         3   607555,968    70243,275   ops/ms 

그래서 지금까지 너무 좋아요.


밀라노 벤치마크를 사용하여 sbt

에서 하는 기도한 기능을 제공합니다.밀라노 기반 벤치마크:

니다.sbt

대체 Java 아키와 스칼라 하나이

libraryDependencies += "org.openjdk.jmh" % "jmh-scala-benchmark-archetype" % "0.5.5"

이 작동하지 않는,다운로드 실패합니다.

이동:

libraryDependencies += "org.openjdk.jmh" % "jmh-scala-benchmark-archetype" % "0.5.5" from "http://repo1.maven.org/maven2/org/openjdk/jmh/jmh-scala-benchmark-archetype/0.5.5/jmh-scala-benchmark-archetype-0.5.5.jar"

또 다른 간단한 벤치마크:

src/main/밀라노/응용 프로그램/벤치마크/밀라노/benchmark2/Benchmark2.scala

package app.benchmark.scala.benchmark2

import org.openjdk.jmh.annotations.GenerateMicroBenchmark
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

class Benchmark2 {
  @GenerateMicroBenchmark
  def run() = {
    Seq.range(0, 10).map(i => i * i).sum
  }
}

지금 sbt assembly 생 jar 파일이지만, target/scala-2.10/microbenchmarks.jar#META-INF/MicroBenchmarks 목록이 없는 스칼라 벤치마크 및 이들은 다음과 같여 java -jar target/scala-2.10/microbenchmarks.jar -l 다.


리소스:

어떻게 통합할 수 있습니(바이트 코드 기반)JMH 프로세서에 대한 Scala?또는 다른 관점에서:왜입니다(주석을 기반)JMH 프로세서가 자동으로 선택하고 생산하는 Java 기반의 벤치마크?

도움이 되었습니까?

해결책

내가 시행하고있다. sbt-jmh 는 플러그인이 실제로 작동: https://github.com/ktoso/sbt-jmh

현재 benchmarks.jar 지원하지 않지만,당신은 단순히 유형 run -i 10 .*MyBenchmark.* 고 예상대로 작동합니다(모든 일을 멀티-단계 편집을 위해 당신).

이 도움이 되었으면 좋겠습니다,cheers!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top