Go 中 ASM 函数调用的开销

我目前在玩 go,它的汇编、浮点运算性能 ( float32) 和纳秒级的优化。我对一个简单的函数调用的开销有点困惑:


func BenchmarkEmpty(b *testing.B) {

    for i := 0; i < b.N; i++ {

    }

}

func BenchmarkNop(b *testing.B) {

    for i := 0; i < b.N; i++ {

        doNop()

    }

}

doNop的实现:


TEXT ·doNop(SB),0,$0-0

    RET

结果(go test -bench .):


BenchmarkEmpty        2000000000               0.30 ns/op

BenchmarkNop  2000000000               1.73 ns/op

我不习惯组装和/或 go 的内部结构。go编译器/链接器可以内联汇编中定义的函数吗?我可以以某种方式给链接器一个提示吗?对于一些简单的函数,比如“添加两个 R3 向量”,这会消耗所有可能的性能提升。


(转到 1.4.2,amd64)


元芳怎么了
浏览 246回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go