2

これはかなり異端的な質問かもしれませんが、System.IO.Posix.MMap を介してデータのファイルを mmap しcast、結果の ByteString を他の型の厳密な配列にマッピングできるかどうか疑問に思います。例えば。ファイルに double が含まれていることがわかっている場合、どうにかしてこの mmap されたデータを UArr Double に取得して、sumU などを実行し、仮想メモリ システムに IO を処理させることはできますか? これは基本的に、C++ コードで複数 GB のデータ セットを処理する方法です。これを行うための代替のより慣用的な方法も高く評価されました、ありがとう!

データに対してマルチコア処理を行う方法についての最高の追加ポイント:-)私が要求しているわけではありません。

4

3 に答える 3

3

これを行うのは安全ではないと思います。UArrはHaskellヒープに割り当てられた固定されていないメモリであり、GCはそれを移動します。ByteStrings(およびmmapされたもの)は、固定されたメモリへのForeignPtrです。これらは、ランタイムシステムでは異なるオブジェクトです。

基になるタイプをForeignPtrからHaskell値「a」に変更する場合は、これを安全にコピーする必要があります。

于 2009-09-21T15:53:48.537 に答える
1

ByteString残念ながら、 aを aにキャストする方法がわかりませんが、 Data Parallel HaskellUArr Tを参照することを提案して、「余分なポイント」を主張したいと思います。あなたが説明した問題から、それはあなたの通りにある可能性があります。

于 2009-09-21T08:07:51.233 に答える
0

ここではおそらく Foreign.Marshal 、特にForeign.Marshal.Arrayが必要です。まさにこれを行うために設計されました。

于 2009-09-22T20:35:19.587 に答える