[armedbear-devel] Parameterized Lisp Calls vs Array Calls

logicmoo at gmail.com logicmoo at gmail.com
Tue Jul 21 22:25:36 UTC 2009


Parameterized Lisp Calls vs Array Calls
In the code I added a Interface "barrier" just in-case there was some inlining

/***********************START JAVA*************************************************/
package benchtest;

interface ISomeFunParams {
 int SomeFun(int i, int j);
}

interface ISomeFunArray {
 int SomeFun(int[] ij);
}

interface ISomeFunVarArgs {
 int SomeFun(int... ij);
}

class BenchArrays1 {

 public static void main(String[] args) {

  ISomeFunParams sumFun = new SomeFunImpl1();

  int res = 0;
  for (int i = 0; i < 100000; i++)
   for (int j = 0; j < 100000; j++) {
    res += sumFun.SomeFun(i, j);
   }

  // make sure we care about 'res'
  int foo = res;
  if (foo > 0) {
   res--;
  }
 }
}


class BenchArrays2 {

 public static void main(String[] args) {

  ISomeFunVarArgs sumFun = new SomeFunImpl2();

  int res = 0;
  for (int i = 0; i < 100000; i++)
   for (int j = 0; j < 100000; j++) {
    res += sumFun.SomeFun(i, j);
   }

  // make sure we care about 'res'
  int foo = res;
  if (foo > 0) {
   res--;
  }
 }
}



class BenchArrays3 {

 public static void main(String[] args) {

  ISomeFunArray sumFun = new SomeFunImpl3();

  int res = 0;
  for (int i = 0; i < 100000; i++)
   for (int j = 0; j < 100000; j++) {
    res += sumFun.SomeFun(new int[]{i, j});
   }

  // make sure we care about 'res'
  int foo = res;
  if (foo > 0) {
   res--;
  }
 }
}

class SomeFunImpl1 implements ISomeFunParams {
 public int SomeFun(int i, int j) {
  return i + j;
 }
}

class SomeFunImpl2 implements ISomeFunVarArgs {
 public int SomeFun(int... ij) {
  return ij[0] + ij[1];
 }
}

class SomeFunImpl3 implements ISomeFunArray {
 public int SomeFun(int[] ij) {
  return ij[0] + ij[1];
 }
}
/***********************END JAVA*************************************************/



[root at titan ArrayBoundsCheckBenchmarks]# time java -cp bin/ benchtest.BenchArrays1

real    0m0.113s
user    0m0.040s
sys     0m0.013s
[root at titan ArrayBoundsCheckBenchmarks]# time java -cp bin/ benchtest.BenchArrays2

real    1m42.898s
user    1m21.279s
sys     0m0.742s
[root at titan ArrayBoundsCheckBenchmarks]# time java -cp bin/ benchtest.BenchArrays3

real    1m40.823s
user    1m21.411s
sys     0m0.651s








More information about the armedbear-devel mailing list