كيف يمكنني استخدام جم لمعايير سكالا جنبا إلى جنب مع سبت?

StackOverflow https://stackoverflow.com//questions/23016733

  •  21-12-2019
  •  | 
  •  

سؤال

لقد حاولت استخدام جنبا إلى جنب مع , ، ولكن حتى الآن لم أتمكن من إعداده بشكل صحيح بحيث .سكالا أساس معايير العمل.

كما الجمع سبت + .معايير جافا القائمة يعمل ، حاولت أن أبدأ من تلك القاعدة.أنا باستخدام سبت 0.13.1.


.معايير جافا القائمة على استخدام سبت

بناء.سبت

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")

للحصول على جرة واحدة "الدهون" في النهاية ، فإن الجمعية مطلوب البرنامج المساعد:

مشروع / التجمع.سبت

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

معيار بسيط:

سرك / الرئيسية / جافا/التطبيق/المعيار/جافا/المعيار 2 / المعيار 2.جافا

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 يعطي هذا الإخراج:

- الجمعية سبت
[...]
[معلومات] تجميع 2 مصادر سكالا و 2 مصادر جافا ل ...
[تحذير] تحذير:الإصدار المصدر المدعوم 'الإصدار 6' من معالج التعليقات التوضيحية'.أوبنجدك.جم.المولدات.مولدميكروبنشماركالمعالج 'أقل من المصدر '1.8'
[تحذير] 1 تحذير
[معلومات] بما في ذلك:جم-جافا-المعيار-النموذج الأصلي-0.5.5.جرة
[معلومات] بما في ذلك:جم-مولد-بايت كود-0.5.5.جرة
[معلومات] بما في ذلك:جوبت-بسيط-4.6.جرة
[معلومات] بما في ذلك:جم-مولد-انعكاس-0.5.5.جرة
[معلومات] بما في ذلك:جم-مولد-آنبروسيس-0.5.5.جرة
[معلومات] بما في ذلك:أسم-4.2.جرة
[معلومات] بما في ذلك:العموم-الرياضيات 3-3.2.جرة
[معلومات] بما في ذلك:جم-كور-0.5.5.جرة
[معلومات] بما في ذلك:سكالا-مكتبة.جرة
[...]
[معلومات] التعبئة والتغليف / الصفحة الرئيسية/سكالا-2.10/فك/راغ/سكالا/سكالا-المعيار/الهدف/سكالا-2.10 / ميكروبينشماركس.جرة ...

و الناتجة 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 

حتى الآن جيد جدا.


معايير سكالا باستخدام سبت

من تلك القاعدة حاولت التبديل إلى .المعايير القائمة على سكالا:

بناء.سبت

استبدال النموذج الأصلي جافا مع سكالا واحد

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"

معيار بسيط آخر:

سرك / الرئيسية / سكالا/أب/المعيار/سكالا/المعيار 2 / المعيار 2.سكالا

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 يخلق ملف جرة ، ولكن target/scala-2.10/microbenchmarks.jar#META-INF/MicroBenchmarks لا يسرد معايير سكالا ، وهذه لا تظهر من قبل java -jar target/scala-2.10/microbenchmarks.jar -l إما.


الموارد:

كيف يمكنني دمج (بايت كود على أساس) جم المعالج ل سكالا?أو من منظور آخر:لماذا هو (الشرح على أساس) اختار جم المعالج تلقائيا وتنتج معايير جافا على أساس?

هل كانت مفيدة؟

المحلول

لقد نفذت سبت-جم البرنامج المساعد الذي يعمل في الواقع: https://github.com/ktoso/sbt-jmh

حاليا بناء المعايير.جرة غير معتمد ، ولكن يمكنك ببساطة كتابة run -i 10 .*MyBenchmark.* وسوف تعمل كما هو متوقع (القيام بكل تجميع متعدد الخطوات بالنسبة لك).

آمل أن يساعد هذا ، في صحتك!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top