gpt4 book ai didi

llvm - 具有整数结果的整数的 Julia/LLVM 高效除法

转载 作者:行者123 更新时间:2023-12-01 07:18:06 24 4
gpt4 key购买 nike

我遇到了一个基本的类型稳定性问题,将两个 Integer 分开。 s 将产生一些具体类型的 AbstractFloat .

typeof(60 * 5 / 60)
> Float64

现在这是安全的做法,但它会产生转换为浮点数的运行时开销。

如果我们知道除法总是会产生一个余数为 0 的数字,即。一个 Integer ?

我们可以使用:
div(60 * 5 , 60) 
fld(60 * 5 , 60)

这给了我们一些具体类型的 Integer ,但是这种方法仍然有开销,我们可以从 LLVM IR 中看到:
@code_llvm  div(60 * 5 , 60)

那么当我们知道结果不会有余数时,我们可以做些什么来消除运行时开销?

可能的解决途径:

我宁愿使用 Julia 构造来解决这个问题,即使我们需要创建它,而不是注入(inject) LLVM IR……但话又说回来,我们可以将该注入(inject)包装到 Julia 函数中……

或者也许我们需要一个像 @inbounds 这样的宏用于安全的整数除法,得到一个整数。

或者也许有一些纯粹的数学方法可以适用于任何语言?

最佳答案

整数除法是 CPU 上最慢的独立于缓存的操作之一;事实上,浮点除法在大多数 CPU 上都更快(自己测试并查看)。如果您事先知道要除以什么(并且想要多次除),那么值得预先计算允许您用乘法/移位/加法替换整数除法的因子。有许多网站描述了这个基本思想,here's one .

有关 Julia 中的实现,请参阅
https://gist.github.com/simonster/a3b691e71cc2b3826e39

关于llvm - 具有整数结果的整数的 Julia/LLVM 高效除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34866997/

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