是否有无箱列表具有未装箱的矢量性能?

时间:2014-06-28 15:00:42

标签: haskell signal-processing lazy-evaluation

我专门考虑信号处理。让我们说我想做一些像输入信号幅度加倍的事情。我希望它非常快,所以我希望信号保持在连续的存储器中(例如,未装箱的矢量)。但是这个信号可以无限期地继续下去,所以我希望它被视为一个无限的列表;我宁愿拨打map (*2) signal一次而不是为每个信号块调用它。

Haskell中是否有一个数据结构可以缓冲这些数据块,以便我可以获得连续的内存性能,但是将数据视为无限流?

1 个答案:

答案 0 :(得分:6)

这只是一个很长的镜头,但是使用足够大的未装箱的向量的streams呢?这将具有向量性能的优势,同时,fusion归功于流。

更新:我们的想法是定义newtype,例如:

import Data.Array.Unboxed
import Data.Stream
import Data.Word

newtype Word8Stream = Word8Stream (Stream (UArray Int Word8))

然后定义所需的通用函数,例如

smap :: (Word8 -> Word8) -> Word8Stream -> Word8Stream
smap f (Word8Stream s) = Word8Stream $ fmap (amap f) s