2011-06-28 17 views
9

Quiero crear un búfer circular de longitud fija de algún tipo general en Haskell. Los elementos en el búfer deben ubicarse uno después del otro en la memoria física (no en la lista vinculada). Quiero esta estructura específica porque mejorará las posibilidades de que todos los datos lleguen juntos a la caché L2 en la CPU. He leído acerca de cómo Haskell permite nuevos tipos de datos, sin embargo, parece que los tipos creados con "datos" son un poco más que glorificados con la coincidencia de patrones y los métodos asociados. ¿Es posible crear estructuras de datos de bajo nivel como la descrita anteriormente completamente en Haskell?búfer circular de longitud fija en haskell

+1

Es difícil tener un razonamiento de bajo nivel en Haskell. En mi humilde opinión, es mejor usar C para las tareas en las que desea exprimir las últimas gotas de rendimiento. – fuz

+0

Me pregunto cómo se compararía [Data.Sequence] (http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Sequence.html) con dicha estructura de datos. –

+0

jaspervdj, sclv, Dan Burton, gracias por las respuestas. No estoy seguro de cuál es la mejor respuesta hasta ahora, pero investigaré todo lo que ustedes sugirieron. Gracias de nuevo. –

Respuesta

10

Desea una estructura tipo matriz mutable, y desea particularmente un sin caja uno para que la matriz subyacente almacene no solo punteros a sus datos, sino también los elementos.

Data.Array de la biblioteca matriz estándar le da una versión de eso, pero en especial las matrices de alto rendimiento están disponibles en la biblioteca de vectores: http://hackage.haskell.org/package/vector

La biblioteca de vectores, como ByteString, texto, y algunos otros , usa una buena cantidad de primitivos específicos de ghc de bajo nivel debajo del capó. Para usar la biblioteca, no debe preocuparse por esas cosas usted mismo. Pero si decide que la biblioteca no le proporciona lo que necesita, entonces también puede aprender una cantidad justa de trucos y técnicas leyendo su código fuente.

+4

Otra buena característica de Data.Vector es que es relativamente simple pasar matrices 'Data.Vector.Storable' a una biblioteca C. –

+0

ver el paquete de hackage 'vector-buffer'. – vivian

Cuestiones relacionadas