Julia: N個の `VecElements {T}`を保持するために `VecTuple {N、T}`を追加することを検討してください

作成日 2017年03月14日  ·  3コメント  ·  ソース: JuliaLang/julia

SIMD.jlの存在を知っています。 ただし、SIMDベクトルの基本的なコード生成は、Juliaベース自体でより簡単な方法でサポートされ、基になるタイプだけでなく、ラッピングタプルの詳細の一部を非表示にする必要があると思います。

したがって、私の提案は、現在のNTuple{N, VecElement{T}}と本質的に同等であるタイプVecTuple{N,T}を定義することです。 違いは、 VecElement codegenプロパティが必要に応じて暗黙的に適用されますが、要素ではなくタプルに関連付けられることです。 このように、タプルの個々の要素にアクセスするために、追加の変換T <-> VecElement{T}を実行する必要はありません。 現在、 NTuple{N, VecElement{T}}単一の要素にアクセスするには、単にx[i]ではなく、 x[i].valueが必要です。

また、タイプの合計サイズと配置の要件、またはどの基本タイプ(ビットサイズ8〜64)が許可されるかは、特殊なタプルに関連付けられます。 #20961も参照してください。

SIMDベクトルで可能なすべての操作をJuliaベースに追加することを提案しているわけではありません。 確かに多すぎます(シャッフル、転置、または反転について考えてください)。 これは当面はすべて特殊なパッケージに任せることができ、最も基本的なLLVMcodegenプロパティがタプルにリンクされる方法の種類を変更するだけです。

(もちろん、 VecTupleは、この問題に関する便利な名前の単なるプレースホルダーです。)

simd speculative types and dispatch

最も参考になるコメント

続行する方法の1つのアイデアは、ベースに入れるべきだと思うことを説明する新しいパッケージを作成することです。 たとえばSIMDBase呼びます。 次に、 SIMDをそのパッケージにリターゲットできます。これにより、仮定が正しければ、 SIMD簡略化されます。 SIMDBase提供する機能について人々が同意すると、Baseに移動できます。

たとえば、低レベルのLLVM呼び出しのゆがみの一部を他の場所で処理できるかどうかは気になりません。

全てのコメント3件

他の人へのリマインダーとして、タプルは抽象的なベクトルのタイプとして定義されていないため、VecTupleはありません。したがって、ベクトル化されたタプルについて話すことは、用語の部分的な衝突です。

続行する方法の1つのアイデアは、ベースに入れるべきだと思うことを説明する新しいパッケージを作成することです。 たとえばSIMDBase呼びます。 次に、 SIMDをそのパッケージにリターゲットできます。これにより、仮定が正しければ、 SIMD簡略化されます。 SIMDBase提供する機能について人々が同意すると、Baseに移動できます。

たとえば、低レベルのLLVM呼び出しのゆがみの一部を他の場所で処理できるかどうかは気になりません。

参考までに、SIMD組み込み型についてもここで詳しく説明します:#2299

実現可能なコンセプトを考え出そうと思います...少し時間がかかるかもしれません。

このページは役に立ちましたか?
0 / 5 - 0 評価