J'ai fait beaucoup de recherche en Parallèle des Données Haskell, et a trouvé deux séparés parallèle types de tableau. L' [::]
type semble s'affichent plus dans les travaux de recherche et semble être l'idéal type, mais PArray
semble être coincé dans le monde. La page wiki sur le sujet est très clair que les tableaux de type [::]
ne peut pas être passé à unvectorized code. Pourquoi? Pourquoi est-il cet intermédiaire PArray
type? Il semble complètement inutile pour moi. Le wiki appelle un "tableau plat", mais le point de l'ensemble de la vectorisation consiste à rendre parallèles les tableaux à plat.
Mise à jour: Après la lecture de plusieurs documents et de la documentation et le code source, je suis encore plus confus. [::]
ou son synonyme PArr
semblent être mis en œuvre dans GHC.PArr sous forme de tableau, alors que PArray
, de type intermédiaire qui est appelé "plat" dans plusieurs endroits, est mis en œuvre dans les Données.Tableau.En parallèle.PArray.De Base et d'autres modules importés à partir de là, de données, de la famille, à l'aide de l'aplatissement de la transformation décrite dans de nombreux documents que j'ai lu. Pourquoi la télévision tableaux n'est pas plat et imbriquées ceux à plat?
Mise à jour 2: Après plus de recherches, j'ai trouvé que le docementation est un désordre complet. La page wiki n'a pas eu de mises à jour de contenu en près d'un an, en contradiction avec le hackage de la documentation (voir les Données.Tableau.En parallèle.Prélude, où il est explicitement dit de ne pas importer le spécial prélude), et est tout simplement obsolète. Le GHC Trac page est également hors de date, y compris, par exemple, un guide d'utilisation de la DPH paquets qui mentionne les paquets qui, au moins autant que Hackage est concerné (je ne l'ai pas, et n'ont pas vraiment pas où chercher dans d'autres endroits), n'existent pas, et ne mentionne pas les paquets comme dph-levée-vseg.
Sur une meilleure note, je crois que je comprends maintenant la réponse à la première mise à jour, insinuée par cette partie du commentaire dans 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.
C'est ma conjecture que, lors de la vectorisation est activée, le module est automatiquement remplacée par une autre représentation qui utilise l'aplatissement de la transformation. Ce pourrait même être quelque chose comme
type [::] = PArray
, la résolution de mon problème d'origine. Cependant, non seulement le dernier point qui n'a pas beaucoup de sens (pourquoi restreindre [::]
pour un plat de type de tableau lors de la vectorisation est off?), mais je n'ai trouvé aucune preuve à l'appui de la théorie d'ailleurs le commentaire mentionné ci-dessus. Il semble que le seul moyen fiable pour apprendre quelque chose est de regarder le GHC source, ce qui, compte tenu de sa taille et de la complexité, c'est quelque chose que je suis impatient de le faire, même si j'étais sûr que je réussirais.