-march=native 是一个编译器选项,它告诉编译器使用本地机器的最佳指令集来生成代码。这意味着编译器会根据你的计算机的架构和处理器类型来优化生成的代码。使用这个选项可以最大程度地发挥你的计算机的性能优势。

23

Gentoo Wiki 告诉我以下内容:

警告:GCC 4.2 及以上版本支持 -march=native。-march=native 会应用除了 -march 之外的其他设置,这些设置是针对你的 CPU 的。除非你有特定的原因不使用(例如 distcc 交叉编译),你应该使用 -march=native,而不是下面列出的任何选项。

这些额外的设置是什么?


这个回答解决了你的问题吗?如何查看 -march=native 会激活哪些标志? - undefined
1个回答

16

不用介意。

$ cc -march=core2 -E -v - </dev/null 2>&1 | grep cc1
 /[...]/cc1 -E -quiet -v -iprefix /[...]/4.3.2/ - -march=core2

$ cc -march=native -E -v - </dev/null 2>&1 | grep cc1
 /[...]/cc1 -E -quiet -v -iprefix /[...]/4.3.2/ - -march=core2 -mcx16 -msahf --param l1-cache-size=32 --param l1-cache-line-size=64 -mtune=core2

我开始非常喜欢这个选项。-mcx16-msahf是两个额外的CPU指令,gcc现在可以使用它们,而这些指令在早期的Core2上不可用。


在我的i7上,它还添加了-mpopcnt -msse4.2 --param l2-cache-size=8192,其中POPCNT是一条相当不错的CPU指令。 - Cubbi
6
奇怪。你是否将构建机与你的软件一起提供? - Hans Passant
12
@hans:笑,但是OP正在使用 Gentoo。这意味着没有人分发二进制文件,只有代码需要在将来运行的机器上编译。 (翻译:@hans说“笑”,但原文提到的OP正在使用Gentoo操作系统,这意味着没有人提供已经编译好的二进制文件,只有源代码需要在运行程序的机器上进行编译。) - deft_code

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接