كيف يمكنني استخدام جم لمعايير سكالا جنبا إلى جنب مع سبت?
-
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.*
وسوف تعمل كما هو متوقع (القيام بكل تجميع متعدد الخطوات بالنسبة لك).
آمل أن يساعد هذا ، في صحتك!