org.openjdk.jmh.annotations.Mode Scala Examples
The following examples show how to use org.openjdk.jmh.annotations.Mode.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: FastFiloRowReaderBenchmark.scala From filo with Apache License 2.0 | 5 votes |
package org.velvia.filo import java.sql.Timestamp import org.openjdk.jmh.annotations.Benchmark import org.openjdk.jmh.annotations.BenchmarkMode import org.openjdk.jmh.annotations.{Mode, State, Scope} import org.openjdk.jmh.annotations.OutputTimeUnit import scalaxy.loops._ import scala.language.postfixOps import java.util.concurrent.TimeUnit @State(Scope.Thread) class FastFiloRowReaderBenchmark { import VectorReader._ // Ok, create an IntColumn and benchmark it. val numValues = 10000 val randomInts = (0 until numValues).map(i => util.Random.nextInt) val randomLongs = randomInts.map(_.toLong) val randomTs = randomLongs.map(l => new Timestamp(l)) val chunks = Array(VectorBuilder(randomInts).toFiloBuffer, VectorBuilder(randomLongs).toFiloBuffer, VectorBuilder(randomTs).toFiloBuffer) val clazzes = Array[Class[_]](classOf[Int], classOf[Long], classOf[Timestamp]) // According to @ktosopl, be sure to return some value if possible so that JVM won't // optimize out the method body. However JMH is apparently very good at avoiding this. // fastest loop possible using FiloVectorApply method @Benchmark @BenchmarkMode(Array(Mode.AverageTime)) @OutputTimeUnit(TimeUnit.MICROSECONDS) def createFastFiloRowReader(): RowReader = { new FastFiloRowReader(chunks, clazzes) } val fastReader = new FastFiloRowReader(chunks, clazzes) @Benchmark @BenchmarkMode(Array(Mode.Throughput)) @OutputTimeUnit(TimeUnit.SECONDS) def fastFiloRowReaderReadOne(): Int = { fastReader.setRowNo(0) if (fastReader.notNull(0)) fastReader.getInt(0) + 1 else 0 } }
Example 2
Source File: Interpreters.scala From scato with Apache License 2.0 | 5 votes |
package scato package benchmarks import org.openjdk.jmh.annotations.{Benchmark, BenchmarkMode, Fork, Mode} object Scato { import Prelude._ import transformers.State def mkState[F[_]](xs: F[Int])(f: Long => (Unit, Long))(implicit F: Traversable[F]): State[Long, Unit] = xs.foldLeft(State.pure[Long, Unit](()))((s, _) => s.flatMap(_ => State.state(f))) def run[F[_]](xs: F[Int])(f: Long => (Unit, Long))(implicit F: Traversable[F]): (Unit, Long) = State.run(mkState(xs)(f))(0) } object Scalaz { import scalaz._ import scalaz.State import scalaz.Free._ import scalaz.syntax.traverse._ def mkState[F[_]](xs: F[Int])(f: Long => (Long, Unit))(implicit F: Traverse[F]) = xs.foldLeft(State.state[Long, Unit](()).liftF)((s, _) => s.flatMap(_ => State[Long, Unit](s => f(s)).liftF)) def run[F[_]](xs: F[Int])(f: Long => (Long, Unit))(implicit F: Traverse[F]): (Long, Unit) = mkState(xs)(f).foldRun(0L)((a,b) => b(a)) } @Fork(1) @BenchmarkMode(Array(Mode.Throughput)) class Interpreters { import Data._ def f0(i: Long): (Unit, Long) = ((), i + 1) def f1(i: Long): (Long, Unit) = (i + 1, ()) @Benchmark def scalaz = { import _root_.scalaz.std.AllInstances._ Scalaz.run(xs)(f1 _) } @Benchmark def scato = Scato.run(xs)(f0 _) }
Example 3
Source File: FreeMonads.scala From scato with Apache License 2.0 | 5 votes |
package scato package benchmarks import scala.annotation.tailrec import org.openjdk.jmh.annotations.{Benchmark, BenchmarkMode, Fork, Mode} @Fork(1) @BenchmarkMode(Array(Mode.Throughput)) class FreeMonads { def runScato(size: Int) = { import transformers.State import FreeMonadsScato._ run(mkFreeT[State[Int, ?]](size)) } def runScalaz(size: Int): Int = { import FreeMonadsScalaz._ run(mkFree(size)) } @Benchmark def free128Scato = runScato(128) @Benchmark def free128Scalaz = runScalaz(128) @Benchmark def free1024Scato = runScato(1024) @Benchmark def free1024Scalaz = runScalaz(1024) @Benchmark def free10000Scato = runScato(10000) @Benchmark def free10000Scalaz = runScalaz(10000) } object FreeMonadsScato { import clazz.{Functor, FunctorClass, Monad} import free.monad._ import transformers.State case class Op[A](a: A) object Op extends FunctorClass[Op] { def map[A, B](op: Op[A])(f: A => B): Op[B] = op match { case Op(a) => Op(f(a)) } } def mkFreeT[M[_]: Monad](size: Int): FreeT[Op, M, Unit] = { @tailrec def build(i: Int, prg: FreeT[Op, M, Unit]): FreeT[Op, M, Unit] = if (i < 1) prg else build(i - 1, prg.flatMap(_ => FreeT.liftF(Op(())))) build(size, FreeT.pure[Op, M, Unit](())) } def run(prg: FreeT[Op, State[Int, ?], Unit]): Int = State.exec(FreeT.run[Op, State[Int, ?], Unit](prg) { case Op(a) => State.modify[Int](_ + 1) })(0) } object FreeMonadsScalaz { import scalaz.{~>, Free, Functor, IndexedStateT, State, StateT, Monad} import Free.Trampoline case class Op[A](a: A) object Op { implicit val functor: Functor[Op] = new Functor[Op] { def map[A, B](op: Op[A])(f: A => B): Op[B] = Op(f(op.a)) } } val opToStateT: Op ~> StateT[Trampoline, Int, ?] = new (Op ~> StateT[Trampoline, Int, ?]) { override def apply[A](oa: Op[A]): StateT[Trampoline, Int, A] = oa match { case Op(a) => State.modify[Int](_ + 1).lift[Trampoline].flatMap(_ => State.state(a).lift[Trampoline]) } } def mkFree(size: Int): Free[Op, Unit] = { @tailrec def build(i: Int, prg: Free[Op, Unit]): Free[Op, Unit] = if (i < 1) prg else build(i - 1, prg.flatMap(_ => Free.liftF(Op(())))) build(size, Free.point[Op, Unit](())) } def run(prg: Free[Op, Unit]): Int = prg.foldMap[StateT[Trampoline, Int, ?]](opToStateT)(StateT.stateTMonadState[Int, Trampoline]).exec(0).run }
Example 4
Source File: CornichonJsonBench.scala From cornichon with Apache License 2.0 | 5 votes |
package parsers import cats.instances.string._ import com.github.agourlay.cornichon.json.CornichonJson import org.openjdk.jmh.annotations.{ Benchmark, BenchmarkMode, Fork, Measurement, Mode, Scope, State, Warmup } @State(Scope.Benchmark) @BenchmarkMode(Array(Mode.Throughput)) @Warmup(iterations = 10) @Measurement(iterations = 10) @Fork(value = 1, jvmArgsAppend = Array( "-XX:+FlightRecorder", "-XX:StartFlightRecording=filename=./CornichonJSonBench-profiling-data.jfr,name=profile,settings=profile", "-Xmx1G")) class CornichonJsonBench { @Benchmark def parseDslStringJsonString() = { val res = CornichonJson.parseDslJson("cornichon") assert(res.isRight) } @Benchmark def parseDslStringJsonArray() = { val res = CornichonJson.parseDslJson("""[ "cornichon", "cornichon" ] """) assert(res.isRight) } @Benchmark def parseDslStringJsonTable() = { val res = CornichonJson.parseDslJson(""" Name | Age | "John" | 30 | "Bob" | 41 | """) assert(res.isRight) } }
Example 5
Source File: RandomUtilBenchmarks.scala From aerosolve with Apache License 2.0 | 5 votes |
package com.airbnb.common.ml.util import scala.collection.mutable import org.openjdk.jmh.annotations.Benchmark import org.openjdk.jmh.annotations.BenchmarkMode import org.openjdk.jmh.annotations.Fork import org.openjdk.jmh.annotations.Measurement import org.openjdk.jmh.annotations.Mode import org.openjdk.jmh.annotations.Param import org.openjdk.jmh.annotations.Scope import org.openjdk.jmh.annotations.State import org.openjdk.jmh.annotations.Warmup object RandomUtilBenchmarks { @BenchmarkMode(Array(Mode.Throughput)) @Fork(value = 1, warmups = 0) @Warmup(iterations = 4, time = 2) @Measurement(iterations = 8, time = 2) @State(value = Scope.Benchmark) class SampleBenchmarks { // Try different collection sizes @Param(value = Array("1000", "10000")) var numItemsToGenerate: Int = _ val ratios: Seq[Double] = Seq(0.85, 0.1, 0.05) @Benchmark def sampleArray(): Seq[Seq[Int]] = { RandomUtil.sample( Array.range(1, numItemsToGenerate), ratios ) } @Benchmark def sampleArraySeq(): Seq[Seq[Int]] = { RandomUtil.sample( mutable.ArraySeq.range(1, numItemsToGenerate), ratios ) } @Benchmark def sampleList(): Seq[Seq[Int]] = { RandomUtil.sample( List.range(1, numItemsToGenerate), ratios ) } @Benchmark def sampleSeq(): Seq[Seq[Int]] = { RandomUtil.sample( Seq.range(1, numItemsToGenerate), ratios ) } @Benchmark def sampleVector(): Seq[Seq[Int]] = { RandomUtil.sample( Vector.range(1, numItemsToGenerate), ratios ) } @Benchmark def sampleSeqToVector(): Seq[Seq[Int]] = { RandomUtil.sample( Seq.range(1, numItemsToGenerate).toVector, ratios ) } } }
Example 6
Source File: CoproductErrorHandlingBench.scala From hotpotato with Apache License 2.0 | 5 votes |
package hotpotato // Must not be in default package import java.util.concurrent.TimeUnit import org.openjdk.jmh.annotations.{Benchmark, BenchmarkMode, Mode, OutputTimeUnit} import hotpotato.Examples._ import hotpotato.ZioExamples._ import BenchmarkSetup.TracedRuntime @OutputTimeUnit(TimeUnit.MILLISECONDS) @BenchmarkMode(Array(Mode.Throughput)) class CoproductErrorHandlingBench { @Benchmark def copBigMapErrorSome1(): Unit = { val io = b_E1to8_1.mapErrorSome( (_: E1) => MSG, (_: E8) => MSG_8, ) val _ = TracedRuntime.unsafeRun(io.either) } @Benchmark def copBigMapErrorSome8(): Unit = { val io = b_E1to8_8.mapErrorSome( (_: E1) => MSG, (_: E8) => MSG_8, ) val _ = TracedRuntime.unsafeRun(io.either) } }
Example 7
Source File: StreamInputOutputBenchmark.scala From scala-commons with MIT License | 5 votes |
package com.avsystem.commons package ser import java.io.{ByteArrayInputStream, ByteArrayOutputStream, DataInputStream, DataOutputStream} import com.avsystem.commons.serialization.{GenCodec, StreamInput, StreamOutput} import org.openjdk.jmh.annotations.{Benchmark, BenchmarkMode, Fork, Measurement, Mode, Scope, State, Warmup} import org.openjdk.jmh.infra.Blackhole case class Toplevel(int: Int, nested: Nested, str: String) case class Nested(list: List[Int], int: Int) object Toplevel { implicit val nestedCodec: GenCodec[Nested] = GenCodec.materialize[Nested] implicit val codec: GenCodec[Toplevel] = GenCodec.materialize[Toplevel] } @Warmup(iterations = 10) @Measurement(iterations = 20) @Fork(1) @BenchmarkMode(Array(Mode.Throughput)) @State(Scope.Thread) class StreamInputOutputBenchmark { val something = Toplevel(35, Nested(List(121, 122, 123, 124, 125, 126), 53), "lol") val inputArray: Array[Byte] = { val os = new ByteArrayOutputStream() GenCodec.write(new StreamOutput(new DataOutputStream(os)), something) os.toByteArray } @Benchmark def testEncode(bh: Blackhole): Unit = { val os = new ByteArrayOutputStream(inputArray.length) val output = new StreamOutput(new DataOutputStream(os)) GenCodec.write(output, something) bh.consume(os.toByteArray) } @Benchmark def testDecode(bh: Blackhole): Unit = { val is = new DataInputStream(new ByteArrayInputStream(inputArray)) val input = new StreamInput(is) bh.consume(GenCodec.read[Toplevel](input)) } @Benchmark def testEncodeRaw(bh: Blackhole): Unit = { val os = new ByteArrayOutputStream(inputArray.length) val output = new StreamOutput(new DataOutputStream(os)) val toplevelOutput = output.writeObject() toplevelOutput.writeField("int").writeSimple().writeInt(35) val nestedOutput = toplevelOutput.writeField("nested").writeObject() val listOutput = nestedOutput.writeField("list").writeList() listOutput.writeElement().writeSimple().writeInt(121) listOutput.writeElement().writeSimple().writeInt(122) listOutput.writeElement().writeSimple().writeInt(123) listOutput.writeElement().writeSimple().writeInt(124) listOutput.writeElement().writeSimple().writeInt(125) listOutput.writeElement().writeSimple().writeInt(126) listOutput.finish() nestedOutput.writeField("int").writeSimple().writeInt(53) nestedOutput.finish() toplevelOutput.writeField("str").writeSimple().writeString("lol") toplevelOutput.finish() bh.consume(os.toByteArray) } @Benchmark def testDecodeRaw(bh: Blackhole): Unit = { val is = new DataInputStream(new ByteArrayInputStream(inputArray)) val input = new StreamInput(is) val objInput = input.readObject() val intField = objInput.nextField().readSimple().readInt() val nestedInput = objInput.nextField().readObject() val listInput = nestedInput.nextField().readList() val listNested = List( listInput.nextElement().readSimple().readInt(), listInput.nextElement().readSimple().readInt(), listInput.nextElement().readSimple().readInt(), listInput.nextElement().readSimple().readInt(), listInput.nextElement().readSimple().readInt(), listInput.nextElement().readSimple().readInt() ) listInput.hasNext val intNested = nestedInput.nextField().readSimple().readInt() nestedInput.hasNext val strField = objInput.nextField().readSimple().readString() objInput.hasNext bh.consume(Toplevel(intField, Nested(listNested, intNested), strField)) } }
Example 8
Source File: JavaSerializationBenchmark.scala From scala-commons with MIT License | 5 votes |
package com.avsystem.commons package rpc.akka.serialization import java.io.{ByteArrayInputStream, ByteArrayOutputStream, ObjectInputStream, ObjectOutputStream} import org.openjdk.jmh.annotations.{Benchmark, BenchmarkMode, Fork, Measurement, Mode, Scope, State, Warmup} import org.openjdk.jmh.infra.Blackhole @Warmup(iterations = 5) @Measurement(iterations = 20) @Fork(1) @BenchmarkMode(Array(Mode.Throughput)) @State(Scope.Thread) class JavaSerializationBenchmark { val something = Something(42, Nested(4 :: 8 :: 15 :: 16 :: 23 :: 42 :: Nil, 0), "lol") val array = { val baos = new ByteArrayOutputStream() val o = new ObjectOutputStream(baos) o.writeObject(something) o.close() baos.toByteArray } @Benchmark def byteStringOutput(): Something = { val baos = new ByteArrayOutputStream() val o = new ObjectOutputStream(baos) o.writeObject(something) o.close() val array = baos.toByteArray new ObjectInputStream(new ByteArrayInputStream(array)).readObject().asInstanceOf[Something] } @Benchmark def writeTest(): Array[Byte] = { val baos = new ByteArrayOutputStream() val o = new ObjectOutputStream(baos) o.writeObject(something) o.close() baos.toByteArray } @Benchmark def readTest(): Something = { new ObjectInputStream(new ByteArrayInputStream(array)).readObject().asInstanceOf[Something] } }
Example 9
Source File: BsonInputOutputBenchmark.scala From scala-commons with MIT License | 5 votes |
package com.avsystem.commons package mongo import java.io.StringWriter import java.nio.ByteBuffer import com.avsystem.commons.rpc.akka.serialization.{Nested, Something} import org.bson.io.BasicOutputBuffer import org.bson.json.{JsonReader, JsonWriter} import org.bson.{BsonBinaryReader, BsonBinaryWriter, BsonDocument, BsonDocumentReader, BsonDocumentWriter, BsonReader, BsonValue, BsonWriter} import org.openjdk.jmh.annotations.{Benchmark, BenchmarkMode, Fork, Measurement, Mode, Scope, State, Warmup} @Warmup(iterations = 10) @Measurement(iterations = 20) @Fork(1) @BenchmarkMode(Array(Mode.Throughput)) @State(Scope.Thread) class BsonInputOutputBenchmark { private val something = Something(42, Nested(List(4, 8, 15, 16, 23, 42, 0), 131), "lol") private val bytes = binaryEncode(something) private val doc = documentEncode(something) private val json = jsonEncode(something) def write(something: Something, bsonWriter: BsonWriter): Unit = { val output = new BsonWriterOutput(bsonWriter) Something.codec.write(output, something) } def binaryEncode(something: Something): Array[Byte] = { val bsonOutput = new BasicOutputBuffer() write(something, new BsonBinaryWriter(bsonOutput)) bsonOutput.toByteArray } def documentEncode(something: Something): BsonDocument = { val doc = new BsonDocument() write(something, new BsonDocumentWriter(doc)) doc } def jsonEncode(something: Something): String = { val stringWriter = new StringWriter() write(something, new JsonWriter(stringWriter)) stringWriter.toString } @Benchmark def binaryEncoding(): Array[Byte] = { binaryEncode(something) } @Benchmark def documentEncoding(): BsonDocument = { documentEncode(something) } @Benchmark def jsonEncoding(): String = { jsonEncode(something) } @Benchmark def valueEncoding(): BsonValue = { BsonValueOutput.write(something) } def read(bsonReader: BsonReader): Something = { val input = new BsonReaderInput(bsonReader) Something.codec.read(input) } @Benchmark def binaryDecoding(): Something = { read(new BsonBinaryReader(ByteBuffer.wrap(bytes))) } @Benchmark def documentDecoding(): Something = { read(new BsonDocumentReader(doc)) } @Benchmark def jsonDecoding(): Something = { read(new JsonReader(json)) } }
Example 10
Source File: BsonCodecBenchmark.scala From scala-commons with MIT License | 5 votes |
package com.avsystem.commons package mongo import java.nio.ByteBuffer import com.avsystem.commons.rpc.akka.serialization.{Nested, Something} import org.bson.codecs.{BsonDocumentCodec, DecoderContext, EncoderContext} import org.bson.io.BasicOutputBuffer import org.bson.{BsonArray, BsonBinaryReader, BsonBinaryWriter, BsonDocument, BsonInt32, BsonString} import org.openjdk.jmh.annotations.{Benchmark, BenchmarkMode, Fork, Measurement, Mode, Scope, State, Warmup} @Warmup(iterations = 10) @Measurement(iterations = 20) @Fork(1) @BenchmarkMode(Array(Mode.Throughput)) @State(Scope.Thread) class BsonCodecBenchmark { import BsonCodecBenchmark._ private val something = Something(42, Nested(List(4, 8, 15, 16, 23, 42, 0), 131), "lol") private val doc = somethingCodec.toDocument(something) private val bytes = binaryEncode(something) def binaryEncode(something: Something): Array[Byte] = { val output = new BasicOutputBuffer() val writer = new BsonBinaryWriter(output) val doc = somethingCodec.toDocument(something) bsonDocumentCodec.encode(writer, doc.toBson, EncoderContext.builder().build()) output.toByteArray } @Benchmark def binaryEncoding(): Array[Byte] = { binaryEncode(something) } @Benchmark def binaryDecoding(): Something = { val reader = new BsonBinaryReader(ByteBuffer.wrap(bytes)) val doc = bsonDocumentCodec.decode(reader, DecoderContext.builder().build()) somethingCodec.fromDocument(new Doc(doc)) } @Benchmark def encoding(): Doc = { somethingCodec.toDocument(something) } @Benchmark def decoding(): Something = { somethingCodec.fromDocument(doc) } } object BsonCodecBenchmark { import BsonCodec._ val bsonDocumentCodec = new BsonDocumentCodec() val intKey: DocKey[Int, BsonInt32] = int32.key("int") val strKey: DocKey[String, BsonString] = string.key("str") val listKey: DocKey[List[Int], BsonArray] = int32.collection[List].key("list") val nestedCodec = new DocumentCodec[Nested] { override def toDocument(t: Nested): Doc = Doc() .put(listKey, t.list) .put(intKey, t.int) override def fromDocument(doc: Doc) = Nested( list = doc.require(listKey), int = doc.require(intKey) ) } val nestedKey: DocKey[Nested, BsonDocument] = nestedCodec.bsonCodec.key("nested") val somethingCodec = new DocumentCodec[Something] { override def toDocument(t: Something): Doc = Doc() .put(intKey, t.int) .put(nestedKey, t.nested) .put(strKey, t.str) override def fromDocument(doc: Doc): Something = Something( int = doc.require(intKey), nested = doc.require(nestedKey), str = doc.require(strKey) ) } }
Example 11
Source File: RefineVBenchmark.scala From refined with MIT License | 5 votes |
package eu.timepit.refined.benchmark import eu.timepit.refined.api.Refined import eu.timepit.refined.numeric.Positive import eu.timepit.refined.refineV import eu.timepit.refined.string.Regex import java.util.concurrent.TimeUnit import org.openjdk.jmh.annotations.{Benchmark, BenchmarkMode, Mode, OutputTimeUnit} @BenchmarkMode(Array(Mode.AverageTime)) class RefineVBenchmark { @Benchmark @OutputTimeUnit(TimeUnit.NANOSECONDS) def refineV_Positive: Either[String, Int Refined Positive] = refineV[Positive](1) @Benchmark @OutputTimeUnit(TimeUnit.NANOSECONDS) def refineV_Regex: Either[String, String Refined Regex] = refineV[Regex](".*") }
Example 12
Source File: BasicFiloBenchmark.scala From filo with Apache License 2.0 | 5 votes |
package org.velvia.filo import org.openjdk.jmh.annotations.Benchmark import org.openjdk.jmh.annotations.BenchmarkMode import org.openjdk.jmh.annotations.{Mode, State, Scope} import org.openjdk.jmh.annotations.OutputTimeUnit import scalaxy.loops._ import scala.language.postfixOps import java.util.concurrent.TimeUnit @State(Scope.Thread) class BasicFiloBenchmark { import VectorReader._ import vectors.IntBinaryVector // Ok, create an IntColumn and benchmark it. val numValues = 10000 val randomInts = (0 until numValues).map(i => util.Random.nextInt) val randomIntsAray = randomInts.toArray val filoBuffer = VectorBuilder(randomInts).toFiloBuffer val sc = FiloVector[Int](filoBuffer) val ivbuilder = IntBinaryVector.appendingVectorNoNA(numValues) randomInts.foreach(ivbuilder.addData) val iv = IntBinaryVector(ivbuilder.base, ivbuilder.offset, ivbuilder.numBytes) val byteFiloBuf = VectorBuilder(randomInts.map(_ % 128)).toFiloBuffer val byteVect = FiloVector[Int](byteFiloBuf) val diffFiloBuf = VectorBuilder(randomInts.map(10000 + _ % 128)).toFiloBuffer val diffVect = FiloVector[Int](diffFiloBuf) // According to @ktosopl, be sure to return some value if possible so that JVM won't // optimize out the method body. However JMH is apparently very good at avoiding this. // fastest loop possible using FiloVectorApply method @Benchmark @BenchmarkMode(Array(Mode.AverageTime)) @OutputTimeUnit(TimeUnit.MICROSECONDS) def sumAllIntsFiloApply(): Int = { var total = 0 for { i <- 0 until numValues optimized } { total += sc(i) } total } @Benchmark @BenchmarkMode(Array(Mode.AverageTime)) @OutputTimeUnit(TimeUnit.MICROSECONDS) def sumAllIntsBinaryVectApply(): Int = { var total = 0 for { i <- 0 until numValues optimized } { total += iv(i) } total } @Benchmark @BenchmarkMode(Array(Mode.AverageTime)) @OutputTimeUnit(TimeUnit.MICROSECONDS) def sumAllIntsFiloByteApply(): Int = { var total = 0 for { i <- 0 until numValues optimized } { total += byteVect(i) } total } @Benchmark @BenchmarkMode(Array(Mode.AverageTime)) @OutputTimeUnit(TimeUnit.MICROSECONDS) def sumAllIntsFiloDiffApply(): Int = { var total = 0 for { i <- 0 until numValues optimized } { total += diffVect(i) } total } @Benchmark @BenchmarkMode(Array(Mode.AverageTime)) @OutputTimeUnit(TimeUnit.MICROSECONDS) def sumAllNotNullIntsFiloApply(): Int = { var total = 0 for { i <- 0 until numValues optimized } { if (sc.isAvailable(i)) total += sc(i) } total } // sum which uses foreach from FiloVector @Benchmark @BenchmarkMode(Array(Mode.AverageTime)) @OutputTimeUnit(TimeUnit.MICROSECONDS) def sumAllIntsFiloForeachFoldLeft(): Int = { sc.foldLeft(0)(_ + _) } }
Example 13
Source File: UTF8StringBenchmark.scala From filo with Apache License 2.0 | 5 votes |
package org.velvia.filo import org.openjdk.jmh.annotations.Benchmark import org.openjdk.jmh.annotations.BenchmarkMode import org.openjdk.jmh.annotations.{Mode, State, Scope} import org.openjdk.jmh.annotations.OutputTimeUnit import java.util.concurrent.TimeUnit @State(Scope.Thread) class UTF8StringBenchmark { val str = "xylophonemania" val str2 = "xylophonemaniac" val zcStr = ZeroCopyUTF8String(str) val zcStr2 = ZeroCopyUTF8String(str2) // According to @ktosopl, be sure to return some value if possible so that JVM won't // optimize out the method body. However JMH is apparently very good at avoiding this. // fastest loop possible using FiloVectorApply method @Benchmark @BenchmarkMode(Array(Mode.Throughput)) @OutputTimeUnit(TimeUnit.SECONDS) def utf8StrCompare(): Int = { zcStr.compare(zcStr2) } @Benchmark @BenchmarkMode(Array(Mode.Throughput)) @OutputTimeUnit(TimeUnit.SECONDS) def nativeStrCompare(): Int = { str.compare(str2) } @Benchmark @BenchmarkMode(Array(Mode.Throughput)) @OutputTimeUnit(TimeUnit.SECONDS) def utf8Substring(): ZeroCopyUTF8String = { zcStr.substring(2, 6) } @Benchmark @BenchmarkMode(Array(Mode.Throughput)) @OutputTimeUnit(TimeUnit.SECONDS) def nativeSubstring(): String = { str.substring(2, 6) } @Benchmark @BenchmarkMode(Array(Mode.Throughput)) @OutputTimeUnit(TimeUnit.SECONDS) def utf8hash(): Int = { zcStr.hashCode } }
Example 14
Source File: DictStringBenchmark.scala From filo with Apache License 2.0 | 5 votes |
package org.velvia.filo import org.openjdk.jmh.annotations.Benchmark import org.openjdk.jmh.annotations.BenchmarkMode import org.openjdk.jmh.annotations.{Mode, State, Scope} import org.openjdk.jmh.annotations.OutputTimeUnit import scalaxy.loops._ import scala.language.postfixOps import java.util.concurrent.TimeUnit @State(Scope.Thread) class DictStringBenchmark { import scala.util.Random.{alphanumeric, nextInt, nextFloat} import VectorReader._ val numValues = 10000 // NOTE: results show that time spent is heavily influenced by ratio of unique strings... val numUniqueStrings = 500 val maxStringLength = 15 val minStringLength = 5 val naChance = 0.05 //5% of values will be NA def randString(len: Int): String = alphanumeric.take(len).mkString val uniqueStrings = (0 until numUniqueStrings).map { i => randString(minStringLength + nextInt(maxStringLength - minStringLength)) } val randomStrings = (0 until numValues).map(i => uniqueStrings(nextInt(numUniqueStrings))) val filoBufferNoNA = VectorBuilder(randomStrings).toFiloBuffer val scNoNA = FiloVector[String](filoBufferNoNA) def shouldNA: Boolean = nextFloat < naChance val filoBufferNA = VectorBuilder.fromOptions( randomStrings.map(str => if (shouldNA) None else Some(str)) ).toFiloBuffer val scNA = FiloVector[String](filoBufferNA) @Benchmark @BenchmarkMode(Array(Mode.AverageTime)) @OutputTimeUnit(TimeUnit.MICROSECONDS) def rawStringLengthTotal(): Int = { var totalLen = 0 for { i <- 0 until numValues optimized } { totalLen += scNoNA(i).length } totalLen } // TODO: also a benchmark for the foreach/fold of a column with no NA's? @Benchmark @BenchmarkMode(Array(Mode.AverageTime)) @OutputTimeUnit(TimeUnit.MICROSECONDS) // Measures foreach and NA read speed def withNAlengthTotal(): Unit = { var totalLen = 0 scNA.foreach { str => totalLen += str.length } totalLen } }
Example 15
Source File: ScalaReadBenchmark.scala From filo with Apache License 2.0 | 5 votes |
package org.velvia.filo import org.openjdk.jmh.annotations.Benchmark import org.openjdk.jmh.annotations.BenchmarkMode import org.openjdk.jmh.annotations.{Mode, State, Scope} import org.openjdk.jmh.annotations.OutputTimeUnit import scalaxy.loops._ import scala.language.postfixOps import java.util.concurrent.TimeUnit @State(Scope.Thread) class ScalaReadBenchmark { // Ok, create an IntColumn and benchmark it. val numValues = 10000 val randomInts = (0 until numValues).map(i => util.Random.nextInt) val randomIntsAray = randomInts.toArray // Scala Seq sum @Benchmark @BenchmarkMode(Array(Mode.AverageTime)) @OutputTimeUnit(TimeUnit.MICROSECONDS) def sumAllIntsScalaSeqFoldLeft(): Int = { randomInts.foldLeft(0)(_ + _) } @Benchmark @BenchmarkMode(Array(Mode.AverageTime)) @OutputTimeUnit(TimeUnit.MICROSECONDS) def sumAllIntsScalaArrayFoldLeft(): Int = { randomIntsAray.foldLeft(0)(_ + _) } @Benchmark @BenchmarkMode(Array(Mode.AverageTime)) @OutputTimeUnit(TimeUnit.MICROSECONDS) def sumAllIntsScalaArrayWhileLoop(): Int = { var total = 0 for { i <- 0 until numValues optimized } { total += randomIntsAray(i) } total } }
Example 16
Source File: FiberRefBenchmarks.scala From zio with Apache License 2.0 | 5 votes |
package zio import java.util.concurrent.TimeUnit import org.openjdk.jmh.annotations.Benchmark import org.openjdk.jmh.annotations.BenchmarkMode import org.openjdk.jmh.annotations.Fork import org.openjdk.jmh.annotations.Measurement import org.openjdk.jmh.annotations.Mode import org.openjdk.jmh.annotations.OutputTimeUnit import org.openjdk.jmh.annotations.Param import org.openjdk.jmh.annotations.Scope import org.openjdk.jmh.annotations.State import org.openjdk.jmh.annotations.Threads import org.openjdk.jmh.annotations.Warmup import zio.IOBenchmarks.verify @State(Scope.Thread) @BenchmarkMode(Array(Mode.Throughput)) @OutputTimeUnit(TimeUnit.SECONDS) @Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) @Fork(1) @Threads(1) class FiberRefBenchmarks { @Param(Array("32")) var n: Int = _ @Benchmark def tracedCreateUpdateAndRead(): Unit = createUpdateAndRead(IOBenchmarks.TracedRuntime) @Benchmark def unTracedCreateUpdateAndRead(): Unit = createUpdateAndRead(IOBenchmarks) @Benchmark def unTracedJustYield(): Unit = justYield(IOBenchmarks) @Benchmark def unTracedCreateFiberRefsAndYield(): Unit = createFiberRefsAndYield(IOBenchmarks) private def justYield(runtime: Runtime[Any]) = runtime.unsafeRun { for { _ <- ZIO.foreach_(1.to(n))(_ => ZIO.yieldNow) } yield () } private def createFiberRefsAndYield(runtime: Runtime[Any]) = runtime.unsafeRun { for { fiberRefs <- ZIO.foreach(1.to(n))(i => FiberRef.make(i)) _ <- ZIO.foreach_(1.to(n))(_ => ZIO.yieldNow) values <- ZIO.foreachPar(fiberRefs)(_.get) _ <- verify(values == 1.to(n))(s"Got $values") } yield () } private def createUpdateAndRead(runtime: Runtime[Any]) = runtime.unsafeRun { for { fiberRefs <- ZIO.foreach(1.to(n))(i => FiberRef.make(i)) values1 <- ZIO.foreachPar(fiberRefs)(ref => ref.update(-_) *> ref.get) values2 <- ZIO.foreachPar(fiberRefs)(_.get) _ <- verify(values1.forall(_ < 0) && values1.size == values2.size)( s"Got \nvalues1: $values1, \nvalues2: $values2" ) } yield () } }
Example 17
Source File: VersionalLevelDBBanches.scala From EncryCore with GNU General Public License v3.0 | 5 votes |
package benches import java.util.concurrent.TimeUnit import benches.VersionalLevelDBBanches.VersionalLevelDBState import encry.settings.LevelDBSettings import encry.storage.levelDb.versionalLevelDB.{LevelDbFactory, VersionalLevelDBCompanion} import encry.utils.FileHelper import org.iq80.leveldb.Options import org.openjdk.jmh.annotations.{Benchmark, Mode, Scope, State} import org.openjdk.jmh.infra.Blackhole import org.openjdk.jmh.profile.GCProfiler import org.openjdk.jmh.runner.options.{OptionsBuilder, TimeValue, VerboseMode} import org.openjdk.jmh.runner.{Runner, RunnerException} class VersionalLevelDBBanches { @Benchmark def versionalLevelDbInsertion(benchStateHistory: VersionalLevelDBState, bh: Blackhole): Unit = { bh.consume { val tempDir = FileHelper.getRandomTempDir val levelDBInit = LevelDbFactory.factory.open(tempDir, new Options) val vldbInit = VersionalLevelDBCompanion(levelDBInit, LevelDBSettings(100)) benchStateHistory.elems10k.foreach(vldbInit.insert) vldbInit.close() } } } object VersionalLevelDBBanches { @throws[RunnerException] def main(args: Array[String]): Unit = { val opt = new OptionsBuilder() .include(".*" + classOf[VersionalLevelDBBanches].getSimpleName + ".*") .forks(1) .threads(2) .warmupIterations(1) .measurementIterations(1) .mode(Mode.AverageTime) .timeUnit(TimeUnit.SECONDS) .verbosity(VerboseMode.EXTRA) .addProfiler(classOf[GCProfiler]) .warmupTime(TimeValue.milliseconds(500)) .measurementTime(TimeValue.minutes(5)) .build new Runner(opt).run } @State(Scope.Benchmark) class VersionalLevelDBState { //val elems1k = Utils.generateRandomLevelDbElemsWithoutDeletions(1000, 100) //val elems5k = Utils.generateRandomLevelDbElemsWithoutDeletions(5000, 100) val elems10k = Utils.generateRandomLevelDbElemsWithoutDeletions(10000, 100) //val elems30k = Utils.generateRandomLevelDbElemsWithoutDeletions(30000, 100) } }
Example 18
Source File: StateRollbackBench.scala From EncryCore with GNU General Public License v3.0 | 5 votes |
package benches import java.io.File import java.util.concurrent.TimeUnit import benches.StateRollbackBench.StateRollbackState import benches.Utils._ import encry.storage.VersionalStorage import encry.utils.CoreTaggedTypes.VersionTag import encry.view.state.{BoxHolder, UtxoState} import encryBenchmark.{BenchSettings, Settings} import org.encryfoundation.common.modifiers.history.Block import org.encryfoundation.common.modifiers.state.box.AssetBox import org.encryfoundation.common.utils.TaggedTypes.{ADKey, Difficulty} import org.openjdk.jmh.annotations.{Benchmark, Mode, Scope, State} import org.openjdk.jmh.infra.Blackhole import org.openjdk.jmh.profile.GCProfiler import org.openjdk.jmh.runner.{Runner, RunnerException} import org.openjdk.jmh.runner.options.{OptionsBuilder, TimeValue, VerboseMode} class StateRollbackBench { @Benchmark def applyBlocksToTheState(stateBench: StateRollbackState, bh: Blackhole): Unit = { bh.consume { val innerState: UtxoState = utxoFromBoxHolder(stateBench.boxesHolder, getRandomTempDir, None, stateBench.settings, VersionalStorage.IODB) val newState = stateBench.chain.foldLeft(innerState -> List.empty[VersionTag]) { case ((state, rootHashes), block) => val newState = state.applyModifier(block).right.get newState -> (rootHashes :+ newState.version) } val stateAfterRollback = newState._1.rollbackTo(newState._2.dropRight(1).last, List.empty).get val stateAfterForkBlockApplying = stateAfterRollback.applyModifier(stateBench.forkBlocks.last).right.get stateAfterForkBlockApplying.close() } } } object StateRollbackBench extends BenchSettings { @throws[RunnerException] def main(args: Array[String]): Unit = { val opt = new OptionsBuilder() .include(".*" + classOf[StateRollbackBench].getSimpleName + ".*") .forks(1) .threads(1) .warmupIterations(benchSettings.benchesSettings.warmUpIterations) .measurementIterations(benchSettings.benchesSettings.measurementIterations) .mode(Mode.AverageTime) .timeUnit(TimeUnit.SECONDS) .verbosity(VerboseMode.EXTRA) .addProfiler(classOf[GCProfiler]) .warmupTime(TimeValue.milliseconds(benchSettings.benchesSettings.warmUpTime)) .measurementTime(TimeValue.milliseconds(benchSettings.benchesSettings.measurementTime)) .build new Runner(opt).run } @State(Scope.Benchmark) class StateRollbackState extends encry.settings.Settings { val tmpDir: File = getRandomTempDir val initialBoxes: IndexedSeq[AssetBox] = (0 until benchSettings.stateBenchSettings.totalBoxesNumber).map(nonce => genHardcodedBox(privKey.publicImage.address.address, nonce) ) val boxesHolder: BoxHolder = BoxHolder(initialBoxes) var state: UtxoState = utxoFromBoxHolder(boxesHolder, tmpDir, None, settings, VersionalStorage.LevelDB) val genesisBlock: Block = generateGenesisBlockValidForState(state) state = state.applyModifier(genesisBlock).right.get val stateGenerationResults: (List[(Block, Block)], Block, UtxoState, IndexedSeq[AssetBox]) = (0 until benchSettings.stateBenchSettings.blocksNumber).foldLeft(List.empty[(Block, Block)], genesisBlock, state, initialBoxes) { case ((blocks, block, stateL, boxes), _) => val nextBlockMainChain: Block = generateNextBlockForStateWithSpendingAllPreviousBoxes( block, stateL, block.payload.txs.flatMap(_.newBoxes.map(_.asInstanceOf[AssetBox])).toIndexedSeq) val nextBlockFork: Block = generateNextBlockForStateWithSpendingAllPreviousBoxes( block, stateL, block.payload.txs.flatMap(_.newBoxes.map(_.asInstanceOf[AssetBox])).toIndexedSeq, addDiff = Difficulty @@ BigInt(100) ) val stateN: UtxoState = stateL.applyModifier(nextBlockMainChain).right.get (blocks :+ (nextBlockMainChain, nextBlockFork), nextBlockMainChain, stateN, boxes.drop( benchSettings.stateBenchSettings.transactionsNumberInEachBlock * benchSettings.stateBenchSettings.numberOfInputsInOneTransaction) ) } val chain: List[Block] = genesisBlock +: stateGenerationResults._1.map(_._1) val forkBlocks: List[Block] = genesisBlock +: stateGenerationResults._1.map(_._2) state = stateGenerationResults._3 state.close() } }
Example 19
Source File: SnapshotAssemblerBench.scala From EncryCore with GNU General Public License v3.0 | 5 votes |
package benches import java.io.File import java.util.concurrent.TimeUnit import benches.SnapshotAssemblerBench.SnapshotAssemblerBenchState import encry.view.state.avlTree.utils.implicits.Instances._ import benches.StateBenches.{StateBenchState, benchSettings} import benches.Utils.{getRandomTempDir, utxoFromBoxHolder} import encry.settings.Settings import encry.storage.{RootNodesStorage, VersionalStorage} import encry.storage.VersionalStorage.{StorageKey, StorageValue, StorageVersion} import encry.storage.levelDb.versionalLevelDB.{LevelDbFactory, VLDBWrapper, VersionalLevelDBCompanion} import encry.utils.FileHelper import encry.view.fast.sync.SnapshotHolder import encry.view.state.UtxoState import encry.view.state.avlTree.AvlTree import org.encryfoundation.common.utils.TaggedTypes.Height import org.iq80.leveldb.{DB, Options} import org.openjdk.jmh.annotations.{Benchmark, Mode, Scope, State} import org.openjdk.jmh.infra.Blackhole import org.openjdk.jmh.profile.GCProfiler import org.openjdk.jmh.runner.{Runner, RunnerException} import org.openjdk.jmh.runner.options.{OptionsBuilder, TimeValue, VerboseMode} import scorex.utils.Random class SnapshotAssemblerBench { @Benchmark def createTree(stateBench: SnapshotAssemblerBenchState, bh: Blackhole): Unit = { bh.consume { //stateBench.a.initializeSnapshotData(stateBench.block1) } } } object SnapshotAssemblerBench { @throws[RunnerException] def main(args: Array[String]): Unit = { val opt = new OptionsBuilder() .include(".*" + classOf[SnapshotAssemblerBench].getSimpleName + ".*") .forks(1) .threads(1) .warmupIterations(benchSettings.benchesSettings.warmUpIterations) .measurementIterations(benchSettings.benchesSettings.measurementIterations) .mode(Mode.AverageTime) .timeUnit(TimeUnit.SECONDS) .verbosity(VerboseMode.EXTRA) .addProfiler(classOf[GCProfiler]) .warmupTime(TimeValue.milliseconds(benchSettings.benchesSettings.warmUpTime)) .measurementTime(TimeValue.milliseconds(benchSettings.benchesSettings.measurementTime)) .build new Runner(opt).run } @State(Scope.Benchmark) class SnapshotAssemblerBenchState extends Settings { val a: AvlTree[StorageKey, StorageValue] = createAvl("9gKDVmfsA6J4b78jDBx6JmS86Zph98NnjnUqTJBkW7zitQMReia", 0, 500000) val block1 = Utils.generateGenesisBlock(Height @@ 1) def createAvl(address: String, from: Int, to: Int): AvlTree[StorageKey, StorageValue] = { val firstDir: File = FileHelper.getRandomTempDir val firstStorage: VLDBWrapper = { val levelDBInit = LevelDbFactory.factory.open(firstDir, new Options) VLDBWrapper(VersionalLevelDBCompanion(levelDBInit, settings.levelDB, keySize = 32)) } val dir: File = FileHelper.getRandomTempDir val levelDb: DB = LevelDbFactory.factory.open(dir, new Options) val rootNodesStorage = RootNodesStorage[StorageKey, StorageValue](levelDb, 10, dir) val firstAvl: AvlTree[StorageKey, StorageValue] = AvlTree[StorageKey, StorageValue](firstStorage, rootNodesStorage) val avlNew = (from to to).foldLeft(firstAvl) { case (avl, i) => val bx = Utils.genAssetBox(address, i, nonce = i) val b = (StorageKey !@@ bx.id, StorageValue @@ bx.bytes) avl.insertAndDeleteMany(StorageVersion @@ Random.randomBytes(), List(b), List.empty) } avlNew } def tmpDir: File = FileHelper.getRandomTempDir } }