Github user kiszk commented on the issue:
https://github.com/apache/spark/pull/19518
@bdrillard @cloud-fan @maropu
I created and run a benchmark program. I think that to use an array for a
compaction is slower than to use scalar instance variables. In the following my
case, 20% slower in the best time.
Thus, I would like to use an approach to create inner classes to keep in
scalar instance variables.
WDYT? Any comments are very appreciated.
Here are
[Test.java](https://gist.github.com/kiszk/63c2829488cb777d7ca78d45d20c021f) and
[myInsntance.py](https://gist.github.com/kiszk/049a62f5d1259481c400a86299bd0228)
that I used.
```
$ cat /proc/cpuinfo | grep "model name" | uniq
model name : Intel(R) Xeon(R) CPU E5-2667 v3 @ 3.20GHz
$ java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-2ubuntu1.16.04.3-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
$ python myInstance.py > MyInstance.java && javac Test.java && java Test
Result(us): Array
0: 145333.227
1: 144288.262
2: 144233.871
3: 144536.350
4: 144503.269
5: 144836.117
6: 144448.053
7: 144744.725
8: 144688.652
9: 144727.823
10: 144447.789
11: 144500.638
12: 144641.592
13: 144464.106
14: 144518.914
15: 144844.639
16: 144780.464
17: 144617.363
18: 144463.271
19: 144508.170
20: 144929.451
21: 144529.697
22: 144273.167
23: 144362.926
24: 144296.854
25: 144398.665
26: 144490.813
27: 144435.732
28: 144675.997
29: 144483.581
BEST: 144233.871000, AVG: 144566.806
Result(us): Vars
0: 120375.384
1: 119800.238
2: 119822.842
3: 119830.761
4: 119836.781
5: 120185.751
6: 120208.140
7: 120274.925
8: 120112.109
9: 120082.120
10: 120063.456
11: 120112.493
12: 120144.937
13: 119964.356
14: 119941.633
15: 119825.758
16: 119677.506
17: 119833.236
18: 119749.781
19: 119723.932
20: 120197.394
21: 120052.820
22: 120006.650
23: 119939.335
24: 119857.469
25: 120176.229
26: 120153.605
27: 120345.581
28: 120163.129
29: 120038.673
BEST: 119677.506, AVG: 120016.567
```
Small MyInstance.java (N = 16, M = 4)
```
class MyInstance {
final int N = 16;
int[] instance = new int[N];
void accessArrays00000() {
instance[8] = instance[0];
instance[9] = instance[1];
instance[10] = instance[2];
instance[11] = instance[3];
}
void accessArrays00001() {
instance[12] = instance[4];
instance[13] = instance[5];
instance[14] = instance[6];
instance[15] = instance[7];
}
void accessArrays00002() {
instance[0] = instance[8];
instance[1] = instance[9];
instance[2] = instance[10];
instance[3] = instance[11];
}
void accessArrays00003() {
instance[4] = instance[12];
instance[5] = instance[13];
instance[6] = instance[14];
instance[7] = instance[15];
}
void accessArray() {
accessArrays00000();
accessArrays00001();
accessArrays00002();
accessArrays00003();
}
int instance00000;
int instance00001;
int instance00002;
int instance00003;
int instance00004;
int instance00005;
int instance00006;
int instance00007;
int instance00008;
int instance00009;
int instance00010;
int instance00011;
int instance00012;
int instance00013;
int instance00014;
int instance00015;
void accessVars00000() {
instance00008 = instance00000;
instance00009 = instance00001;
instance00010 = instance00002;
instance00011 = instance00003;
}
void accessVars00001() {
instance00012 = instance00004;
instance00013 = instance00005;
instance00014 = instance00006;
instance00015 = instance00007;
}
void accessVars00002() {
instance00000 = instance00008;
instance00001 = instance00009;
instance00002 = instance00010;
instance00003 = instance00011;
}
void accessVars00003() {
instance00004 = instance00012;
instance00005 = instance00013;
instance00006 = instance00014;
instance00007 = instance00015;
}
void accessVars() {
accessVars00000();
accessVars00001();
accessVars00002();
accessVars00003();
}
}
```
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]