2013-02-24 8 views
2

Я не вижу, что Repa указывает макеты памяти для данных в любом из своих «манифестных представлений». Это где-то указано?Репа определяет ли макет памяти своих данных?

Конечно, я могу узнать об экспериментах, но я бы предпочел узнать, является ли макет официальным или подвержен изменениям в любое время.

Edit: Чтобы уточнить, я понимаю, как StorableVector выложен, но интересно ли Array U DIM2 Double (например) является строкой-майора, столбцы, или что-то с ума.

+1

Кроме этого: я знаю, что один из них В моем случае, однако, я должен сделать некоторые FFI с данными, так что получение макета прямо (желательно во многих выпусках Repa) имеет некоторое значение. – gspr

ответ

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, что обеспечивает безопасное отображение указателей на C-образные внешние данные до и от Repa.

+1

Право , Я знаю макет сохраняемых векторов, но я не вижу, что это дает мне макет массива Repa. Например, это 'Array U DIM2 Double', выложенный как строка, майор столбца или (из Конечно, нет, но в принципе) каким-то другим сумасшедшим способом? Я думаю, что мой вопрос был неясным, поэтому я его обновлю. Спасибо! – gspr

+0

О, я никогда не замечал ваше сообщение от 24 февраля 17:53. Спасибо, это отвечает на мой вопрос :) – gspr