2

Repa が「マニフェスト表現」のいずれかでデータのメモリ レイアウトを指定していることはわかりません。これはどこかに指定されていますか?

もちろん、実験を通じて調べることはできますが、レイアウトが公式のものであるか、いつでも変更される可能性があるかどうかを知りたい.

編集:明確にするために、 aStorable Vectorがどのようにレイアウトされているかは理解していますが、 Array U DIM2 Double(たとえば)が行優先、列優先、または何かおかしいのでしょうか。

4

1 に答える 1

4

データのメモリ レイアウトは、ボックス化されていないベクトルの型クラス インスタンスによって定義されます。

実装では、型ファミリに基づいた @Data.Vector.Unboxed@ を使用し、すべての要素型に対して効率的で特殊な表現を選択します。特に、ペアのボックス化されていないベクトルは、ボックス化されていないベクトルのペアとして表されます。

ベクトルのレイアウト仕様を確認するには、ベクトル パッケージで定義されているボックス化されていないベクトルのインスタンスを確認します。たとえば、Bool はバイトで表されます。

newtype instance MVector s Bool = MV_Bool (P.MVector s Word8)

一方、プリミティブ配列パッケージにウサギの穴を掘り下げると、プリミティブ型の配置とサイズの制約が表示されます。Repa 1 によると、マニフェスト (割り当てられた) 配列は行メジャーで埋められます。最新バージョンのドキュメントもこれをサポートしています。

データに対してFFIも行う必要があるため、レイアウトをまっすぐにします

C コード (またはその他のもの) と相互運用する必要があるため、Storableインスタンスを使用することが不可欠です。これらにより、型を C に簡単に転送できることが保証されます ( Repa への ForeignPtr インターフェイスを介して C レイアウト規則を使用することで、Repaとの間で C 形式の外部データへのポインターを安全にマップできます。

于 2013-02-24T16:49:23.080 に答える