www informatica functional extension autor haskell data-parallel-haskell

informatica - ¿Cuál es la diferencia entre PArray y[::] en Data Parallel Haskell?



haskell website (1)

He estado investigando mucho en Data Parallel Haskell y encontré dos tipos de matrices paralelas separadas. El tipo [::] parece mostrarse más en los artículos de investigación y parece ser el tipo ideal, pero PArray parece estar atrapado en todas partes. La página wiki sobre el tema deja muy claro que las matrices de tipo [::] no se pueden pasar al código sin vectorizar. ¿Por qué? ¿Por qué hay este tipo intermedio de PArray ? Me parece completamente superfluo. El wiki lo llama una "matriz plana", pero el objetivo de la vectorización es hacer arreglos paralelos planos.

Actualización: Después de leer más documentos, documentación y código fuente, estoy aún más confundido. [::] o su sinónimo PArr parece estar implementado en GHC.PArr como una matriz plana, mientras que PArray , el tipo intermedio que se llama "plano" en múltiples lugares, se implementa en Data.Array.Parallel.PArray.Base y otros módulos importados desde allí como una familia de datos, utilizando la transformación de aplanamiento descrita en muchos de los documentos que leí. ¿Por qué las matrices planas no son planas y las anidadas son planas?

Actualización 2: Después de más investigaciones, descubrí que la docencia es un desastre total. La página wiki no ha tenido actualizaciones de contenido en casi un año, contradice la documentación de pirateo (ver Data.Array.Parallel.Prelude , donde dice explícitamente que no se debe importar el preludio especial), y en general está desactualizada. La página de GHC Trac también está desactualizada e incluye, por ejemplo, una guía de los paquetes de DPH que menciona paquetes que, al menos en lo que respecta a Hackage, no lo he hecho, y no tengo dónde mirar. otros lugares), no existen, y no menciona paquetes como dph-lifted-vseg.

En una nota mejor, creo que ahora entiendo la respuesta a la primera actualización, insinuada por esta parte de los comentarios en GHC.PArr :

-- BIG UGLY HACK: The desugarer special cases this module. Despite the uses of ''-XParallelArrays'', -- the desugarer does not load ''Data.Array.Parallel'' into its global state. (Hence, -- the present module may not use any other piece of ''-XParallelArray'' syntax.) -- -- This will be cleaned up when we change the internal represention of ''[::]'' to not -- rely on a wired-in type constructor.

Supongo que, cuando se habilita la vectorización, ese módulo se reemplaza automáticamente por otra representación que usa la transformación de aplanamiento. Esto podría ser algo así como

type [::] = PArray

, resolviendo mi problema original. Sin embargo, el último punto no tiene mucho sentido (¿por qué restringir [::] a un tipo de matriz plana cuando la vectorización está desactivada?), Pero no he encontrado evidencia que respalde ninguna de las dos teorías además del comentario mencionado anteriormente. Parece que la única manera confiable de aprender algo es mirar la fuente de GHC, que, dado su tamaño y complejidad, es algo que estoy ansioso por hacer, incluso si estuviera seguro de que tendría éxito.