Repa是否指定其数据的内存布局?

时间:2013-02-24 16:16:17

标签: haskell repa memory-layout

我看不到Repa在其任何“清单表示”中为数据指定了内存布局。这是指定的吗?

当然我可以通过实验找到答案,但我宁愿知道布局是否正式或者随时都有变化。

修改:为了澄清,我了解Storable Vector是如何布局的,但我想知道Array U DIM2 Double(例如)是否为行主,专栏,或疯狂的东西。

1 个答案:

答案 0 :(得分:4)

数据的内存布局由unboxed vectors的类型类实例定义:

  

该实现使用@ Data.Vector.Unboxed @,它基于类型   家庭和挑选一个高效,专业的代表每一个   元素类型。特别地,表示了对的未装箱的矢量   作为未装箱的矢量对。

要查看向量的布局规范,请检查未装箱的向量defined in the vector package的实例,例如, Bool用字节表示:

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

如果我们将兔子洞向下潜入原始数组包,你会看到alignment and size constraints for the primitive types。根据Repa 1,清单(已分配)数组填入row major。最新版本的文档也支持这一点。

  

我也必须对数据做一些FFI,所以直接进行布局

由于您必须与C代码(或其他东西)进行互操作,因此使用Storable实例至关重要。这些将保证您的类型可以轻松地传输到C(使用C布局约定,通过ForeignPtr interface to Repa,这可确保您安全地将指针映射到与来自Repa的C形外部数据。