Estoy tratando de encontrar el mejor lenguaje de programación para un modelo analítico que estoy construyendo. La consideración principal es la velocidad a la que ejecutará los bucles FOR.Lenguaje más rápido para los bucles FOR
Algunos detalle:
- El modelo necesita realizar numerosas (~ 30 por entrada, de más de 12 ciclos) operaciones en un conjunto de elementos de una matriz - hay ~ 300k filas, y ~ 150 columnas en el conjunto. La mayoría de estas operaciones son de naturaleza lógica, por ejemplo, si place (i) = 1, entonces j (i) = 2.
- He creado una versión anterior de este modelo usando Octave - para ejecutarlo toma ~ 55 horas en una instancia de Amazon EC2 m2.xlarge (y utiliza ~ 10 GB de memoria, pero estoy muy contento de tirar más memoria). Octave/Matlab no realizará operaciones lógicas con elementos, por lo que se necesita una gran cantidad de bucles para for - estoy relativamente seguro de haber vectorizado tanto como sea posible - los bucles que quedan son necesarios. He obtenido octava-multicore para que funcione con este código, lo que mejora (~ 30% de reducción de velocidad cuando lo ejecuto en 8 núcleos EC2), pero termina siendo inestable con bloqueo de archivos, etc. + Estoy realmente estoy buscando un cambio radical en el tiempo de ejecución: sé que el hecho de utilizar Matlab me da una mejora de hasta un 50% si miro algunos puntos de referencia, pero eso es un costo prohibitivo. El plan original al comenzar esto era ejecutar un Monte Carlo con esto, pero a las 55 horas de carrera, eso es completamente impráctico.
- La próxima versión de esto va a ser una reconstrucción completa desde cero (por razones de IP que no entraré si nada más), por lo que estoy completamente abierto a cualquier lenguaje de programación. Estoy muy familiarizado con Octave/Matlab, pero he incursionado en R, C, C++, Java. También soy hábil con SQL si la solución implica almacenar los datos en una base de datos. Aprenderé cualquier idioma para esto: estas no son funcionalidades complicadas que estamos buscando, no interactúan con otros programas, etc., así que no estamos demasiado preocupados por la curva de aprendizaje.
Con todo lo dicho, ¿cuál es el lenguaje de programación más rápido específicamente para los bucles FOR? A partir de una búsqueda de SO y Google, Fortran y C llegan a la cima, pero buscan más consejos antes de sumergirse en uno u otro.
Gracias!
Esto puede ser una pregunta estúpida, pero ¿las operaciones realizadas en resultados de efecto de una fila de cálculos de otras filas? – R0MANARMY
En algunos lugares, lo hacen, pero la función de sumidero más grande (que actualmente comprende ~ 80% del tiempo de ejecución) no lo hace. – Noah
Como algunos otros han sugerido que iría con Fortran.Use funciones elementales donde sea posible, FOR y DO para todo lo que no se pueda realizar en partes de una matriz como un todo. ¿Pueden algunas partes de las operaciones ser paralelizadas? Además, piense cómo fortran almacena datos en la memoria. La elección cuidadosa de los índices y el orden de operación también puede traer alguna mejora en la velocidad. – Rook