C 编译器-三月旗基准?

C 编译器-三月旗基准?,c,optimization,compiler-construction,compiler-optimization,C,Optimization,Compiler Construction,Compiler Optimization,编译器中的-march标志(例如:gcc)真的很重要吗 如果我使用-march=my_架构而不是-march=i686来编译我的所有程序和内核,会更快吗?是的,确实如此,尽管差异只是有时相关。但是,如果您的代码可以矢量化,以使用SSE或其他扩展指令集,这些指令集在一种体系结构上可用,但在另一种体系结构上不可用,那么它们可能会非常大。当然,32和64位之间的差异可以(但不一定总是)是明显的(即“代码> -M64 < /代码>,如果您认为是 -Maule参数)的类型。 作为一个医学证据,几年前我在g

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


如果我使用-march=my_架构而不是-march=i686来编译我的所有程序和内核,会更快吗?是的,确实如此,尽管差异只是有时相关。但是,如果您的代码可以矢量化,以使用SSE或其他扩展指令集,这些指令集在一种体系结构上可用,但在另一种体系结构上不可用,那么它们可能会非常大。当然,32和64位之间的差异可以(但不一定总是)是明显的(即“代码> -M64 < /代码>,如果您认为是<代码> -Maule参数)的类型。

作为一个医学证据,几年前我在
gcc
中遇到了一个有趣的错误,在那里,在奔腾4上运行的特定代码段在使用
-march=pentium4
编译时的速度大约是使用
-march=pentium2
编译时的2倍


所以:通常没有区别,有时是,有时是相反的,比你预期的。一如既往:在决定使用任何超出“安全”范围的优化之前进行测量(例如,使用实际的精确CPU型号,而不是更通用的型号)。

是的,但差异只是有时相关。但是,如果您的代码可以矢量化,以使用SSE或其他扩展指令集,这些指令集在一种体系结构上可用,但在另一种体系结构上不可用,那么它们可能会非常大。当然,32和64位之间的差异可以(但不一定总是)是明显的(即“代码> -M64 < /代码>,如果您认为是<代码> -Maule参数)的类型。

作为一个医学证据,几年前我在
gcc
中遇到了一个有趣的错误,在那里,在奔腾4上运行的特定代码段在使用
-march=pentium4
编译时的速度大约是使用
-march=pentium2
编译时的2倍


所以:通常没有区别,有时是,有时是相反的,比你预期的。一如既往:在决定使用任何超出“安全”范围的优化之前进行测量(例如,使用实际的精确CPU型号而不是更通用的型号)。

不能保证使用
march
编译的任何代码都会比其他版本更快/更慢。这实际上取决于代码的“种类”,只有通过测量才能获得实际结果。e、 例如,如果您的代码有很大的矢量化潜力,那么使用和不使用“march”的结果可能会有所不同。另一方面,有时编译器在矢量化过程中做得很差,这可能会导致在为特定体系结构编译代码时速度较慢。

不能保证使用
march
编译的任何代码都会比其他版本快/慢。这实际上取决于代码的“种类”,只有通过测量才能获得实际结果。e、 例如,如果您的代码有很大的矢量化潜力,那么使用和不使用“march”的结果可能会有所不同。另一方面,有时编译器在矢量化过程中做得很差,这可能导致为特定体系结构编译代码时速度较慢。

是的,这很重要。否则,这个选项就不存在了。它会影响编译器生成的指令集和调度。是的,这很重要。否则,这个选项就不存在了。它影响编译器将生成的指令集和调度。