Julia: Envisagez d'ajouter un `VecTuple{N,T}` pour contenir N `VecElements{T}`s

Créé le 14 mars 2017  ·  3Commentaires  ·  Source: JuliaLang/julia

Je suis au courant de l'existence de SIMD.jl. Cependant, je pense que la génération de code fondamentale des vecteurs SIMD devrait être prise en charge plus facilement dans la base Julia elle-même et masquer certains détails dans le tuple d'emballage plutôt que simplement par le type sous-jacent.

Ainsi, ma proposition serait de définir un type VecTuple{N,T} qui serait essentiellement équivalent à l'actuel NTuple{N, VecElement{T}} . La différence serait que les propriétés de codegen VecElement seraient implicitement appliquées si nécessaire, mais liées au tuple plutôt qu'à l'élément. De cette façon, l'accès aux éléments individuels du tuple n'aurait pas besoin de passer par une conversion supplémentaire T <-> VecElement{T} . L'accès actuel à un seul élément d'un NTuple{N, VecElement{T}} nécessite x[i].value au lieu de simplement x[i] .

En outre, les exigences relatives à la taille totale des types et à l'alignement, ou les types fondamentaux (bits 8 à 64) autorisés, seraient liés au tuple spécialisé. Voir aussi #20961.

Je ne suggère pas d'ajouter toutes les opérations possibles sur les vecteurs SIMD à la base Julia. Il y en a certainement trop (pensez à mélanger, transposer ou inverser). Cela pourrait encore être laissé à des packages spécialisés pour le moment, changeant simplement le type de lien entre la propriété de codegen LLVM la plus fondamentale et le tuple.

( VecTuple n'est bien sûr qu'un espace réservé pour tout nom pratique sur le sujet.)

simd speculative types and dispatch

Commentaire le plus utile

Une idée de la façon de procéder serait de créer un nouveau package qui décrit ce que vous pensez devoir entrer dans la base. Appelez-le par exemple SIMDBase . Nous pouvons ensuite recibler SIMD sur ce package, ce qui, si votre hypothèse est correcte, simplifierait SIMD . Une fois que les gens sont d'accord sur la fonctionnalité fournie par SIMDBase , il peut être déplacé dans Base.

Par exemple, cela ne me dérangerait pas si certaines des contorsions d'appel LLVM de bas niveau pouvaient être traitées ailleurs.

Tous les 3 commentaires

Juste pour rappel pour les autres, nous n'avons pas de VecTuple puisque Tuple n'est pas défini comme un type de vecteur abstrait, c'est donc un conflit partiel de termes pour parler d'un tuple vectorisé.

Une idée de la façon de procéder serait de créer un nouveau package qui décrit ce que vous pensez devoir entrer dans la base. Appelez-le par exemple SIMDBase . Nous pouvons ensuite recibler SIMD sur ce package, ce qui, si votre hypothèse est correcte, simplifierait SIMD . Une fois que les gens sont d'accord sur la fonctionnalité fournie par SIMDBase , il peut être déplacé dans Base.

Par exemple, cela ne me dérangerait pas si certaines des contorsions d'appel LLVM de bas niveau pouvaient être traitées ailleurs.

Pour référence, les types intrinsèques SIMD sont également discutés en détail ici : #2299

Je vais essayer de trouver un concept réalisable... ça peut prendre un peu.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

Keno picture Keno  ·  3Commentaires

tkoolen picture tkoolen  ·  3Commentaires

iamed2 picture iamed2  ·  3Commentaires

thofma picture thofma  ·  3Commentaires

felixrehren picture felixrehren  ·  3Commentaires