¿Existen inconvenientes al usar scalacl plugin?Operaciones de Scala con rendimiento de matrices (complemento scalacl)
Estoy planeando usar scala en mi proyecto. He escrito un poquito de código en scala para ver su tiempo de ejecución.
(1 to 1000000).map(1 + _).sum
1. Sin Plugin
se compila a algo como esto:
BoxesRunTime.unboxToInt(((TraversableOnce)Predef..MODULE$.intWrapper(1).to(1000000).map(new MyScala..anonfun.1(), IndexedSeq..MODULE$.canBuildFrom())).sum(Numeric.IntIsIntegral..MODULE$));
y correr en unos 375 ms
2. Con el plugin scalacl
int i = 1;
int j = 1000000;
int k = j;
int m = i;
for (VectorBuilder localVectorBuilder = new VectorBuilder(); m <= k;) {
int n = m;
localVectorBuilder.$plus$eq(BoxesRunTime.boxToInteger(1 + n));
m += 1;
}
int a = BoxesRunTime.unboxToInt(localVectorBuilder.result().sum(Numeric.IntIsIntegral..MODULE$));
259 ms
Mejora del 30% no es mucho. Optimicé una parte de mi código, que ahora usa matrices y bucles while, para una aceleración de 100x. Idiomatic Scala puede ser muy lento. Por ejemplo, si te deshaces del boxeo, obtendrás algo más impresionante. – ziggystar
Por cierto, 'Range # sum' ahora está optimizado en trunk y se ejecuta en tiempo constante' O (n) 'en lugar de' O (n) 'lineal. Las mejoras algorítmicas son la mayoría de las veces preferibles. – soc