Hasty Briefsbeta

双语

Low-level Haskell: The cursed way to emulate inline assembly in Haskell/GHC, or

10 days ago
  • #Low-Level Programming
  • #Haskell
  • #FFI
  • Haskell (GHC) 缺少像 C/C++ 那样的内联汇编或内置函数,但存在使用特定 CPU 指令的技术。
  • 从 64 位乘法返回 128 位乘积的多种方法包括:使用指针的 C FFI、不安全/安全 FFI、foreign import prim 以及使用 SIMD 寄存器。
  • foreign import prim 允许通过汇编 thunk 实现低开销的自定义原始操作,其性能与 GHC 内置的 timesWord2# 内置函数非常接近。
  • 基准测试显示 timesWord2# 最快(约 4.0 纳秒),其次是 foreign import prim(约 4.5 纳秒);不安全 FFI 搭配双调用也颇具竞争力(约 5.8 纳秒),而安全 FFI 最慢(超过 60 纳秒)。
  • 对于简短、非阻塞的外部调用,使用不安全 FFI 而非安全 FFI 对性能至关重要,以避免 GC 阻塞和开销。