小编sfb*_*bea的帖子

Rust 编译器没有优化 lzcnt?(以及类似的功能)

做了什么:

这是在 Compiler Explorer 上进行实验的结果,以确定编译器(rustc)在涉及log2()/leading_zeros()和类似函数时的行为。我发现这个结果似乎既奇怪又令人担忧:

编译器资源管理器链接

代码:

pub fn lzcnt0(val: u64) -> u64 {
    val.leading_zeros() as u64
}

pub unsafe fn lzcnt1(val: u64) -> u64 {
    core::arch::x86_64::_lzcnt_u64(val)
}

pub unsafe fn lzcnt2(val: u64) -> u64 {
    asm_lzcnt(val)
}

#[inline]
pub unsafe fn asm_lzcnt(val: u64) -> u64 {
    let lzcnt: u64;
    core::arch::asm!("lzcnt {}, {}", in(reg) val, lateout(reg) lzcnt, options(nomem, nostack));
    lzcnt
}
Run Code Online (Sandbox Code Playgroud)

输出:

example::lzcnt0:
        test    rdi, rdi
        je      .LBB0_2
        bsr     rax, rdi
        xor     rax, 63
        ret
.LBB0_2: …
Run Code Online (Sandbox Code Playgroud)

x86 bit-manipulation intrinsics compiler-optimization rust

7
推荐指数
1
解决办法
207
查看次数

Mathf.Floor 与 (int) 的性能比较

当我想知道哪个更快时,我正在创建和翻译一些算法。

A)(int)float

或者

b)Mathf.FloorToInt(float)

提前致谢。

编辑:如果有比这两种方法更快的方法,那也会有帮助。

c# int performance unity-game-engine

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