1

我们正在从一台配备 2*Xeon X5650 的本地计算服务器转移到另一台配备 2*Opteron 4280 的本地计算服务器......今天我试图在新机器(AMD 机器)上启动我精彩的 C 程序,并发现性能 > 50%,保持所有可能的参数相同(甚至随机数生成器的种子)。我开始研究这个问题:谷歌搜索“amd opteron 4200 编译器选项”给了我一些建议,即“标志”(选项)可供我使用 GCC 4.6.3 编译器。我玩弄了这些旗帜,并在这里总结了我的发现……

我不允许上传图片,所以图表在这里https://plus.google.com/117744944962358260676/posts/EY6djhKK9ab

我想知道是否有人(编码人员)可以就这个主题给我任何评论,尤其是我对“... -march=bdver1 -fprefetch-loop-arrays”和“... -fprefetch -loop-arrays -march=bdver1" 在不同的运行时产生?我也不确定,假设“-funroll-all-loops”是否已经包含在“-O3”或“-Ofast”中,为什么再添加一次这个标志会有任何不同呢?为什么英特尔处理器的任何额外标志都会使性能变得更糟(除了“-ffast-math” - 这很明显,因为据我了解,它通过定义浮点运算实现了不太精确和更快,虽然...... )?

关于机器和我的程序的更多详细信息:2*Xeon X5650 机器是具有 gcc 4.4.3 的 Ubuntu 服务器,它是 2(主板上的 CPU)X6(每个真实内核)*2(超线程)=24 线程机器,并且在我的“实验”或基准测试期间,它上面运行着一些东西......

2*Opteron 4280 机器是具有 gcc 4.6.3 的 Ubuntu 服务器,它是 2(主板上的 CPU)X4(每个真实内核=Bulldozer 模块)*2(AMD Bulldozer 任何线程=内核类型)=18 线程机器,我只是将它用于我美妙的“基准”......

我的基准测试程序只是一个蒙特卡洛模拟的东西,它在开始时会做一些 IO,然后大约 10^5 次 Mote Carlo 循环给我结果。所以,我假设它是整数和浮点计算程序,不时循环并检查随机生成的“结果”是否对我来说足够“好”......该程序只是一个单线程,我正在为每个基准测试使用相同的参数启动它(很明显,但我还是应该提到它),包括随机生成器种子(因此,结果是 100% 相同的)......该程序不是内存密集型的。结果运行时间只是标准“/usr/bin/time”命令的“用户”时间。

4

0 回答 0