相关疑难解决方法(0)

如何在Haskell中进行快速数据反序列化

基准测试表明,对于cereal我的数据结构(详见下文),反序列化所需的时间比从驱动器读取相同数据所需的时间长100倍:

benchmarking Read
mean: 465.7050 us, lb 460.9873 us, ub 471.0938 us, ci 0.950
std dev: 25.79706 us, lb 22.19820 us, ub 30.81870 us, ci 0.950
found 4 outliers among 100 samples (4.0%)
  4 (4.0%) high mild
variance introduced by outliers: 53.460%
variance is severely inflated by outliers

benchmarking Read + Decode
collecting 100 samples, 1 iterations each, in estimated 6.356502 s
mean: 68.85135 ms, lb 67.65992 ms, ub 70.05832 ms, ci 0.950
std dev: 6.134430 ms, lb …
Run Code Online (Sandbox Code Playgroud)

performance serialization haskell

20
推荐指数
1
解决办法
2042
查看次数

有效地将64位Double转换为ByteString

我编写了一个函数将64位Double转换为ByteString(架构/类型安全性并不是真正的问题 - 我们现在假设Double是64位Word).虽然下面的函数运行良好,但我想知道是否有更快的方法将Double转换为ByteString.在下面的代码中,有一个解压缩Word64到Word8列表,然后反向(使它成为小端格式),然后打包到ByteString.代码如下:

{-# LANGUAGE MagicHash #-}
import GHC.Prim
import GHC.Types
import GHC.Word
import Data.Bits (shiftR)
import Data.ByteString (pack, unpack)
import Data.ByteString.Internal (ByteString)
import Text.Printf (printf)

encodeDouble :: Double -> ByteString
encodeDouble (D# x) = pack $ reverse $ unpack64 $ W64# (unsafeCoerce# x)

unpack64 :: Word64 -> [Word8]
unpack64 x = map (fromIntegral.(shiftR x)) [56,48..0]

-- function to convert list of bytestring into hex digits - for debugging
bprint :: ByteString -> String
bprint x = ("0x" ++ ) …
Run Code Online (Sandbox Code Playgroud)

haskell casting bytestring

6
推荐指数
2
解决办法
1223
查看次数

在Haskell中将字节转换为Int64s/Floats/Doubles

我正在尝试在Haskell中解析二进制文件格式(Apple的二进制属性列表格式),并且该格式所需的一件事是将字节序列视为(a)无符号的1-,2-或4-字节整数; (b)签署8字节整数; (c)32位float; (d)64位double.将字节序列转换为无符号整数很容易,甚至处理有符号整数也不会很糟糕.但是对于有符号的整数,特别Floats和Doubles,我真的不想自己实现逻辑.我已经能够找到的功能int2Float# :: Int# -> Float#,并int2Double# :: Int# -> Double#GHC.Prim,但这些似乎并不理想(我不特别想与拆箱类型来工作).我希望有一些方法可以从a [Word8]Word32s/Word64s中进行投射.是否有类型的任何功能Word32 -> Float,Word64 -> Double,Word64 -> Int64,或类似的?

haskell bits

4
推荐指数
1
解决办法
2356
查看次数

标签 统计

haskell ×3

bits ×1

bytestring ×1

casting ×1

performance ×1

serialization ×1