Me inspiré en esta publicación llamada "Only fast languages are interesting" para ver el problema que sugiere (sumando un par de millones de números de un vector) en Haskell y compararlo con sus resultados.Haciendo Números eficientes en Haskell
Soy un novato en Haskell, así que no sé realmente cómo sincronizar correctamente o cómo hacerlo de manera eficiente, mi primer intento de este problema fue el siguiente. Tenga en cuenta que no estoy usando números aleatorios en el vector ya que no estoy seguro de cómo hacerlo de una buena manera. También estoy imprimiendo cosas para asegurar una evaluación completa.
import System.TimeIt
import Data.Vector as V
vector :: IO (Vector Int)
vector = do
let vec = V.replicate 3000000 10
print $ V.length vec
return vec
sumit :: IO()
sumit = do
vec <- vector
print $ V.sum vec
time = timeIt sumit
Cargando esto en GHCi y funcionando time
me dice que tomó cerca de 0.22s a una duración de 3 millones de números y 2.69s por 30 millones de números.
En comparación con los resultados de los autores del blog de 0.02s y 0.18s en Lush, es bastante peor, lo que me lleva a pensar que esto se puede hacer de una mejor manera.
Nota: El código anterior necesita el paquete TimeIt para ejecutarse. cabal install timeit
lo obtendrá por usted.
Tenga cuidado de lo que se mide. Por el momento, estás midiendo tanto la asignación del vector como la suma. –
No hagas pruebas de rendimiento con ghci. Use ghc --make -O2. –
'ique', echa un vistazo a la excelente tutorial sobre el uso del paquete' vECTOR': http://www.haskell.org/haskellwiki/Numeric_Haskell:_A_Vector_Tutorial – applicative