如何使用 GCC 4.4.7-17 禁用 bmi 指令
How to disable bmi instructions with GCC 4.4.7-17
我对 gcc 4.4.7-17 有疑问。我在一台服务器上编译了一个程序,运行在另一台服务器上编译了这个程序,但由于非法指令而崩溃。
我怀疑两个服务器之间的差异可能导致这个exception.Yes,我发现服务器编译程序有CPU标志bmi1和bmi2,但是服务器运行程序没有!
如何在使用 gcc 时禁用 bmi 指令?
默认情况下未启用 -mbmi
和 -mbmi2
。
您可能通过在与目标计算机硬件不同的服务器上使用 -march=native
构建来启用它们。不要那样做。 Use -O3 -march=ivybridge
or -march=bdver2
(AMD Piledriver = Bulldozer version 2), or whatever is appropriate 制作可以使用您的目标支持的所有指令集扩展并针对您的目标进行调整的二进制文件。 (-march=x
表示 -mtune=x
)。
此外,如果可能,请使用较新版本的 gcc。 4.4 现在已经很老了。 gcc 5.3 是 gcc5 系列中的最新版本,在许多情况下可以生成更好的代码。
gcc6 也发布了,但发布时间不长。
我对 gcc 4.4.7-17 有疑问。我在一台服务器上编译了一个程序,运行在另一台服务器上编译了这个程序,但由于非法指令而崩溃。
我怀疑两个服务器之间的差异可能导致这个exception.Yes,我发现服务器编译程序有CPU标志bmi1和bmi2,但是服务器运行程序没有!
如何在使用 gcc 时禁用 bmi 指令?
-mbmi
和 -mbmi2
。
您可能通过在与目标计算机硬件不同的服务器上使用 -march=native
构建来启用它们。不要那样做。 Use -O3 -march=ivybridge
or -march=bdver2
(AMD Piledriver = Bulldozer version 2), or whatever is appropriate 制作可以使用您的目标支持的所有指令集扩展并针对您的目标进行调整的二进制文件。 (-march=x
表示 -mtune=x
)。
此外,如果可能,请使用较新版本的 gcc。 4.4 现在已经很老了。 gcc 5.3 是 gcc5 系列中的最新版本,在许多情况下可以生成更好的代码。
gcc6 也发布了,但发布时间不长。