首页 文章

编译器-march标志基准?

提问于
浏览
2

编译器中的-march标志(例如:gcc)真的很重要吗?

如果我使用-march = my_architecture而不是-march = i686编译我的所有程序和内核会更快吗?

2 回答

  • 3

    是的,虽然差异只是有时相关 . 它们可能非常大,但是如果您的代码可以被矢量化以使用SSE或其他扩展指令集,这些指令集在一个架构上可用但在另一个架构上不可用 . 当然,32位和64位之间的差异可以(但不一定总是)明显(如果你认为它是一种 -march 参数,那就是 -m64 ) .

    作为遗传证据,几年前我在 gcc 中遇到了一个有趣的错误,其中使用 -march=pentium4 编译时,奔腾4上运行的特定代码比使用 -march=pentium2 编译时慢约2倍 .

    所以:经常没有区别,有时候会有所不同,有时候这种方式与你的期望相反 . 一如既往:在您决定使用超出“安全”范围的任何优化之前进行测量(例如,使用您实际的精确CPU模型而不是更通用的模型) .

  • 1

    无法保证使用 march 编译的任何代码都会更快/更慢w.r.t.另一个版本 . 它实际上取决于代码的'kind',实际结果只能通过测量获得 . 例如,如果你的代码有很多可能的矢量化,那么无论有没有'march',结果都可能不同 . 另一方面,有时编译器在向量化期间做得很差,并且在为特定体系结构编译时可能导致代码变慢 .

相关问题