gpt4 book ai didi

haskell - Haskell 中的 INLINE_FUSED 编译指示

转载 作者:行者123 更新时间:2023-12-03 15:29:33 25 4
gpt4 key购买 nike

我正在查看向量库并注意到 {-# INLINE_FUSED transform #-}我想知道它有什么作用?我看到它在 vector.h 中定义但别无他处。

最佳答案

定义意味着 INLINE_FUSEDINLINE [1] 相同; INLINE_INNERINLINE [0] 相同. [1][0]是用于订购内联阶段的标准 ghc。参见标题 7.13.5.5 下的讨论。 http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/pragmas.html 中的相位控制
vector需要控制 ghc 的阶段内联各种定义。首先它想要函数的所有用途streamunstream被暴露,因此(最重要的是)stream.unstream可以替换为 id ,并且在其他情况下类似地,根据分布在各处的(重写)RULE pragma。

典型的向量到向量函数写为 unstream . f . stream ,其中 f 是 Stream to Stream 函数。 unstreamStream 在内存中构建一个实际的向量; stream将实向量读入 Stream .游戏的目的是减少实际构建的向量的数量。所以三个向量到向量函数的组合

 f_vector . g_vector . h_vector

是真的
 unstream . f_stream . stream . unstream . g_stream . stream . unstream . h_stream . stream

他改写为
 unstream . f_stream . g_stream . h_stream . stream

等等。所以我们写一个新的向量而不是三个。
transform 的规则比这更花哨一些,但属于同样微妙的排序系统:
 transform f g (unstream s) = unstream (Bundle.inplace f g s)
transform f1 g1 (transform f2 g2 p) = transform (f1 . f2) (g1 . g2) p

https://github.com/haskell/vector/blob/master/Data/Vector/Generic/New.hs#L76

所以你可以看到表单中的内联内容:
unstream . h_stream . stream . transform f1 g1 . transform f2 g2 
. unstream . j_stream . stream $ input_vector

将被重写。

关于haskell - Haskell 中的 INLINE_FUSED 编译指示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23711923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com