设为首页 加入收藏

TOP

1.3.2 CPU(指令集)
2013-10-07 12:57:30 来源: 作者: 【 】 浏览:72
Tags:1.3.2 CPU 指令

1.3.2  CPU(指令集)

CPU有着它识别并执行的原生指令集(native instruction set)。C++(www.cppentry.com)编译器的工作是将C++(www.cppentry.com)程序代码转换到目标平台的原生指令集。编译器对C++(www.cppentry.com)进行转换并生成一个由目标处理器的原生指令组成的目标文件。图1-3显示了基本编译过程的缩略图。

 
(点击查看大图)图1-3
在将C++(www.cppentry.com)代码转换为目标CPU本地语言的过程中,编译器可以选择如何生成目标代码。编译器可用来帮助确定寄存器如何使用或是否执行循环展开。可以通过对编译器选项的设置来决定是否生成16位、32位或64位目标代码。编译器可用于选择内存模型。编译器可以提供代码提示来声明提供多少L1(level 1) cache或L2(level 2) cache。注意在表1-1中的浮点操作类别中,该类别中的开关允许编译器影响对浮点指令的选择。例如,GNU gcc编译器有- -float-store开关。这个开关告诉编译器在生成目标代码时,不应当使用将在寄存器中存储浮点变量的指令。Sun C++(www.cppentry.com)编译器有-fma开关,这个开关允许自动生成浮点和multi-add指令。-fma=none禁用了这些指令的生成。-fma=fused开关允许编译器通过使用浮点、fused和multiply=add指令来尝试改进代码性能。在上述两种情况下,开关都作为选项提供给编译器:
  1. gcc -ffloat-store my_program.cc 

  1. CC -fma=used my_program.cc 

其他开关影响cache使用。例如Sun C++(www.cppentry.com)编译器有-xcache=c,定义了被优化器使用的cache属性。GNU gcc编译器有-Funroll -loops,指定循环如何展开。GNU gcc编译器的-pthread开关开启了对使用pthread的多线程的支持。编译器甚至还有选项可用来设置典型内存引用间隔,使用的是-mmemory-latency=time开关。实际上,对于图1-2中的任何部件,均有编译器选项和开关可影响它们的使用。

编译器提供对处理器的访问,对为特定目标处理器或处理器系列编写多核应用程序的开发人员是有影响的。例如,UltraSparc、Opteron、Intel Core 2 Duo和Cell处理器都是常用的多核配置。这些处理器均支持高速向量操作和计算。它们支持并行计算的单指令多数据(SIMD)模型。这种支持可以通过编译器来获得,并受编译器影响。

注意:

第4章包含了对编译器在多核开发中的作用的详细介绍。

值得注意的是,使用过多这种类型的编译器选项,会导致编译器为特定处理器进行代码优化。如果设计目标之一是跨平台兼容,那么必须小心使用编译器选项。对于系统程序员、库制作人员、编译器编写人员、内核开发人员、数据库和服务器引擎开发人员,对基本处理器架构、指令集和编译器接口的基本理解是开发利用CMP的有效软件的先决条件。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.3.1 基本的处理器体系结构 下一篇1.2 多核体系结构

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: