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]

Reply via email to