|
发表于 2012-9-10 23:17:24
|
显示全部楼层
本帖最后由 mrks 于 2012-9-10 23:32 编辑
曾经用-Ofast -flto编译出来的内核运行了prime95严酷拷机模式12小时,未见报错~~~
ONLY 发表于 2012-9-10 22:26
刚看了一下,-O3 似乎没有什么大问题。但 -Ofast 会打开 -ffast-math,这个 -ffast-math 是一系列开关的总称,gcc 编译器手册上说
http://gcc.gnu.org/onlinedocs/gc ... ml#Optimize-Options
-ffast-math
Sets -fno-math-errno, -funsafe-math-optimizations, -ffinite-math-only, -fno-rounding-math, -fno-signaling-nans and -fcx-limited-range.
This option causes the preprocessor macro __FAST_MATH__ to be defined.
This option is not turned on by any -O option besides -Ofast since it can result in incorrect output for programs that depend on an exact implementation of IEEE or ISO rules/specifications for math functions. It may, however, yield faster code for programs that do not require the guarantees of these specifications.
加黑的那句就是说可能会产生不正确的计算结果。如果是游戏程序,结果稍微差一点可能无所谓,但科学计算就说不准了。
这里不正确的计算结果,可能是因为位数的截断 / 误差的舍入等等。具体到个别的程序,它可能会或者不会受到影响,包括结果的正确性和算法的收敛性。就是说,可能会是变快/变慢,正确/错误的状态组合,也可能对某些输入数据结果是正确的,对某些输入数据又不正确的。
总之不确定,很难说。而且这样的问题一旦发生,又是特别难查找,因为必须深入检查汇编代码才能找出问题所在。
因此这样的计算结果是没有意义的,对科学研究而言是一种伤害。科学计算似乎没有听说过打开 -ffast-math 的。
我听说 NASA 编译航天器的代码时,是不允许编译器做任何优化的,只用 -O0。
既然扯到这里,顺便提一句,个人认为,挑甜包,对 FAH 也是有损害的。希望不要打击到金版的积极性哈。
具体到编译内核来说,估计 -ffast-math 没什么影响(因为没什么地方需要这个东西起作用),但也不会提高性能。
对于 -march=corei7-avx 参数,估计真正有用的地方在于这个 flag 会给出 CPU 的 cache 尺寸/发射数等的精确信息,帮助 gcc 决策。
AVX 指令本身对内核帮助不大。实际上内核应该根本没有浮点环境,不能执行浮点运算。
另外 -flto 要给内核打大量的补丁否则编译无法通过的,你确定你的标志起效了么?
我看 The Kraken 的原理也是调整 NUMA 调度策略,这个是有道理的。
从设置 affinity 的角度,内核开机有个 isolcpus 参数可以把某些 CPU 从内核的调度器中隔离出来,即内核不会给这些 CPU 分配任何
工作,然后用户可以将指定的程序不受任何干扰地运行在这些 CPU 上。不知道 BIGADV 界试过这个没有。 |
|