首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

GCC 选项和交叉编译

GCC 选项和交叉编译

GCC 选项和交叉编译我使用不同的内核版本和编译选项运行了一些 LMBench 基准测试(我将在本文最后进行总结)。尽管这个基准测试并没有受到我所尝试的选项的显著影响,但是,LMBench 的源代码仍然提供了一个可以用于测试编译选项的有益项目。例如,在使用 64 位内核的一个配置中,在进行通常的         make 步骤之前,我输入了下面的内容来配置编译器:      
% export CPPFLAGS='-mcpu=970 -mtune=970'
在文档“About Compilers with VMX Support”中可以找到关于PowerPC 970 编译器主要选项的实用总结。引用的这篇文档所涉及的是混合 YDL 和基于 PowerPC 970 的 IBMeServer™ JS20 BladeCenter™机器所附带的 GCC 3.3.3 版本。您可以比较 Linux 和 Darwin(Mac OSX)中可用的编译选项—— 大部分是类似的,但有一些不同。      
此外,整个 POWER 家族体系结构的设计,既支持针对不同具体目标的交叉编译,也支持针对通用指令基的编译。极其令人着迷的是,有可能在 Apple Power Mac G5 上开发一个应用程序而在 IBM eServer p5 上运行这个应用程序。
GCC 文档第 3.17.23 节“IBM RS/6000 and PowerPC Options”(给出了一些关于交叉编译选项的有用资料。其中         -mcpu 是主要需要关注的一个标记。参考摘录:      
-mcpu=cpu_type
设置体系结构类型、寄存器用法、选择记忆法(mnemonics)、针对机器类型 cpu_type 的指令调度参数。cpu_type 类型所支持的值是 401、403、405、405fp、440、440fp、505、601、602、603、603e、604、604e、620、630、740、7400、7450、750、801、821、823、860、970、common、ec603e、G3、G4、G5、power、power2、power3、power4、power5、powerpc、powerpc64、rios、rios1、rios2、rsc 和 rs64a。
-mcpu=common 选择的是完全通用的处理器。基于此选项生成的代码将可以运行于任何 POWER 或PowerPC 处理器之上。GCC 将只会使用这两种体系结构的指令公共子集,将不会使用 MQ 寄存器。GCC 在进行调度时会采用通用处理器模型。
在实验过程中,我发现在我的 YDL 系统中,我可以以几种不同的 CPU 为目标编译(并运行)LMBench,比如         G5 、         G4 、或         powerpc 。我尤其感兴趣的是以         common 为目标尝试进行编译,但是我的系统缺少一些必需的头文件。我可能可以下载 GCC 源代码和其他相关文件来解决这一问题。使用 YDL 自带的 GCC,我还是可以以         common 为目标编译 LMBench 源文件中的很多文件 —— 但不是全部。      
基准测试首先,我将给出一些免责声明。第一,比较的是处于测试中的 Terra Soft 的 32 位和 64 位系统与机器附带的OSX。所以,在未来几个月里,当 Terra Soft 发布产品化的 32 位和 64 位发行版本时,所有这些数字都可能会有变化。不过,实际上这些基准测试集中关注的是底层性能,这就使得有可能这些数字至少可以在一定程度上反映机器附带的版本。然而,这些数字不能(也不是有意要)反映 OSX 与 YDL/Y-HPC 的对比,也不反映 OSX 与 Linux、32 位和64 位的对比,而且,就更小范围而言,也不反映 GGC 编译器开关会如何影响 LMBench。
第二个免责声明是,要在 G5 系统和可以与其匹敌的类似处理器(比如 Intel 的 Xeon 或 AMD 的 Athlon64)之间的进行有意义的比较,我还不具备足够的专门的基准测试技术。
考虑到已公布的基准程序很少是完全没有偏差的,我认为,观察分析操作系统、kernel-bit-ness 和编译选项的不同对在同一台机器上得到的基准测试的结果的影响还是有用的(也是公平的)。Apple 的 Power Mac G5 系统得到高度称许的特性之一是它们的快速内存子系统 —— 400 MHz 总路线上的 DDR SDRAM,按宣传其带宽最高可达 64 GB/秒(虽然我的测试系统不是最高级别的)。我感觉 LMBench 2.0.4(最新的稳定版本)是研究此方面的一个很好的工具:它集中关注底层性能,尤其是内存子系统。
我以四种不同的配置来运行 LMBench。在一些情况下,我执行了多次运行,不过变化足够小,因而相对于每种配置我只给出了一个示例。我在 MAC OSX(1.3.4)上编译并运行 LMBench 作为一个基本情形。一般而言,在大部分测试中,看起来好像 Linux 基准要比 OSX         稍微 更好一些。不过,在 OSX 上得到的一些令人惊讶的糟糕结果让我怀疑套件是不是都在正确运行。例如,在本地 TCP 带宽方面,64 位 Y-HPC 比OSX 高出百分之五十,这是惊人的,但是可信 —— Linux 针对 TCP 的调节做得非常好。不过,在磁盘页失败方面,OSX 的延迟是 Linux 的         500 倍,这就非常不正常了。当然,与 OSX 在“File & VM system latencies”方面得到的其他比较差的结果类似,相对于 OS 内核之间区别,后一个问题与 HFS+ 和 ext3 之间区别的关系更密切。      
由分析基准推知综合基准总是有难度的,不过 LMBench 很像是使用了大量 IPC 的应用程序(比如科学应用程序和其他数值计算程序)的一个代理 —— 高负载的 Web 服务也会受到影响。
在 Linux 方面,我使用 32 位内核不使用编译器选项运行了一个配置。在 64 位内核中,我既不使用 GCC 选项编译了LMBench,也使用 970 特定的调节选项进行了编译。Linux 结果变动范围不大,不过通常看来 64 位内核稍有提高,而使用 970 标记编译的应用程序则稍有进一步提高。
然后,这里是我得到的 LMBench 结果(为了布局而稍加编辑):
表 1. 在 Power Mac G5 上得到 LMBench 2.0.4 的结果总结
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Basic system parameters
Host                 OS Description              MHz
--------- ------------- ----------------------- ----
Darwin    Darwin 7.2.0  powerpc-apple-darwin7.2 1800
32bit     Linux 2.6.4-1 powerpc-linux-gnu 32bit 1800
64bit     Linux 2.6.1-1 powerpc-linux-gnu 64bit 1800
64bit-970 Linux 2.6.1-1 PPC-linux -mtype=970    1800
Processor, Processes - times in microseconds - smaller is better
----------------------------------------------------------------
Host      null null      open selct sig  sig  fork exec sh
          call  I/O stat clos TCP   inst hndl proc proc proc
--------- ---- ---- ---- ---- ----- ---- ---- ---- ---- ----
Darwin    2.23 2.78 6.27 9.17  15.6 3.09 8.97 1468 3146 6796
32bit     0.30 0.42 5.13 6.08  25.5 0.72 2.67  295  990 4093
64bit     0.23 0.43 5.04 6.47  33.3 0.70 2.19  257  914 3778
64bit-970 0.24 0.44 4.98 6.49  33.2 0.70 2.25  262  955 3856
Context switching - times in microseconds - smaller is better
-------------------------------------------------------------
Host      2p/0K 2p/16K 2p/64K 8p/16K 8p/64K 16p/16K 16p/64K
          ctxsw  ctxsw  ctxsw ctxsw  ctxsw   ctxsw   ctxsw
--------- ----- ------ ------ ------ ------ ------- -------
Darwin     12.4   12.3   12.3  12.9   16.4   14.2     34.2
32bit      10.4   10.5   10.6   8.68   9.71   7.57    26.2
64bit      11.1   11.3   11.4   9.35   12.7  10.1     29.2
64bit-970  11.2   11.3    7.97  7.11   16.4   7.57    27.9
*Local* Communication latencies in microseconds - smaller is better
-------------------------------------------------------------------
Host      2p/0K  Pipe AF     UDP  RPC/   TCP  RPC/ TCP
          ctxsw       UNIX         UDP         TCP conn
--------- ----- ----- ---- ----- ----- ----- ----- ----
Darwin     12.4  40.6 40.3  58.4        74.3       153.
32bit      10.4  20.5 24.5  31.5  40.6  57.5  41.4 53.3
64bit      11.1  47.8 42.4  58.5  45.9  67.7  68.9 47.9
64bit-970  11.2  40.2 24.6  34.0  40.5  35.0  48.5 47.7
File & VM system latencies in microseconds - smaller is better
--------------------------------------------------------------
Host        0K File      10K File      Mmap    Prot    Page
          Create Delete Create Delete  Latency Fault   Fault
--------- ------ ------ ------ ------  ------- -----   -----
Darwin     108.2  136.3 1440.9  228.2    11.0K 47.4   3740.0
32bit       44.1   34.3  121.8   64.3   3894.0  0.595    7.0
64bit       46.5   30.8  118.2   59.2   3314.0  0.514    4.0
64bit-970   46.5   30.8  118.3   59.2   3256.0  0.550    4.0
*Local* Communication bandwidths in MB/s - bigger is better
-----------------------------------------------------------
Host      Pipe AF    TCP  File   Mmap  Bcopy  Bcopy  Mem   Mem
               UNIX      reread reread (libc) (hand) read write
--------- ---- ---- ---- ------ ------ ------ ------ ---- -----
Darwin     52.  346 351.  364.0 1837.4 1431.0  897.8 1840 1207.
32bit     715. 1137 428. 1037.6 1799.4  899.9  888.5 1805 1203.
64bit     634. 1189 609.  922.3 1789.5  888.5  888.5 1792 1200.
64bit-970 620. 1046 629.  915.4 1792.0  888.4  889.6 1797 1209.
Memory latencies in nanoseconds - smaller is better
---------------------------------------------------
Host        L1 $   L2 $ Main mem
---------  ----- ------ --------
Darwin     1.664 6.1040  152.3
32bit      1.666 6.1110  153.1
64bit      1.667 6.1150  153.9
64bit-970  1.666 6.1140  153.3




结束语总之,G5 是可以运行 Linux 的极好机器 —— 现在可以以合理的终端用户桌面机的价格购买到。虽然还是一个测试版本,但是 Terra Soft 和 Yellow Dog Linux 和 Y-HPC 几乎可以直接运行于 G5 系统上,只是仍有相对很少而且相对较小的问题(在这里没有都具体讨论到)。我应该说,这恰是产品发布的预兆。
对于在 970 机器上 OSX 和 Linux 的相对性能有哪些可以预先期待的,我没有真正的把握。作为终端用户桌面机或开发平台,这两个操作系统都比“足够快”要快得更多,所有仍然存在的差别几乎只剩下了 KDE/X11 和 Aqua/Quartz之间的差别,而不是反映于底层的 OS 特性。无论如何,我所做的内存基准测试的尝试,表明 Linux 可能为高通信量服务器、复杂编译、以及复杂的科学或图形学应用程序提供比 OSX 更为高端的性能。显然,如果您可以选择底层操作系统(正如您使用自由软件的做法),那么在得到任何与您自己的需要相关的具体结论之前,最好进行具体应用程序的高层次基准测试。
返回列表