Skip to content

Commit 2bacda6

Browse files
Merge pull request #7689 from brunnerant/tuple-tweaks-03
Improve performance of tuple operations
2 parents 35fbb34 + 08613cb commit 2bacda6

File tree

6 files changed

+267
-57
lines changed

6 files changed

+267
-57
lines changed

bench-run/inputs/map.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
size:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50

bench-run/inputs/zip.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
size:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50

bench-run/src/main/scala/dotty/tools/benchmarks/tuples/Concat.scala

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ class Concat {
1010
var sizes: String = _
1111
var tuple1: Tuple = _
1212
var tuple2: Tuple = _
13-
var array1: Array[Object] = _
14-
var array2: Array[Object] = _
1513

1614
def tupleOfSize(n: Int): Tuple = {
1715
var t: Tuple = ()
@@ -26,17 +24,10 @@ class Concat {
2624
val size2 = sizes.split(' ')(1).toInt
2725
tuple1 = tupleOfSize(size1)
2826
tuple2 = tupleOfSize(size2)
29-
array1 = Array.fill(size1)("elem")
30-
array2 = Array.fill(size2)("elem")
3127
}
3228

3329
@Benchmark
3430
def tupleConcat(): Tuple = {
3531
DynamicTuple.dynamicConcat(tuple1, tuple2)
3632
}
37-
38-
@Benchmark
39-
def arrayConcat(): Array[Object] = {
40-
array1 ++ array2
41-
}
4233
}

bench-run/src/main/scala/dotty/tools/benchmarks/tuples/Cons.scala

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ class Cons {
88
@Param(Array("0"))
99
var size: Int = _
1010
var tuple: Tuple = _
11-
var array: Array[Object] = _
11+
var array1: Array[Object] = _
12+
var array2: Array[Object] = _
1213

1314
@Setup
1415
def setup(): Unit = {
@@ -17,7 +18,8 @@ class Cons {
1718
for (i <- 1 to size)
1819
tuple = "elem" *: tuple
1920

20-
array = Array.fill(size)("elem")
21+
array1 = new Array[Object](size)
22+
array2 = new Array[Object](size + 1)
2123
}
2224

2325
@Benchmark
@@ -26,7 +28,13 @@ class Cons {
2628
}
2729

2830
@Benchmark
29-
def arrayCons(): Array[Object] = {
30-
DynamicTuple.cons$Array("elem", array)
31+
def createArray(): Array[Object] = {
32+
new Array[Object](size + 1)
33+
}
34+
35+
@Benchmark
36+
def consArray(): Array[Object] = {
37+
System.arraycopy(array1, 0, array2, 1, size)
38+
array2
3139
}
3240
}

bench-run/src/main/scala/dotty/tools/benchmarks/tuples/ArrayOps.scala renamed to bench-run/src/main/scala/dotty/tools/benchmarks/tuples/Conversions.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import org.openjdk.jmh.annotations._
44
import scala.runtime.DynamicTuple
55

66
@State(Scope.Thread)
7-
class ArrayOps {
7+
class Conversions {
88
@Param(Array("1"))
99
var size: Int = _
1010
var tuple: Tuple = _

0 commit comments

Comments
 (0)