1.3.2 CPU(指令集)
CPU有着它识别并执行的原生指令集(native instruction set)。C++(www.cppentry.com)编译器的工作是将C++(www.cppentry.com)程序代码转换到目标平台的原生指令集。编译器对C++(www.cppentry.com)进行转换并生成一个由目标处理器的原生指令组成的目标文件。图1-3显示了基本编译过程的缩略图。
|
| (点击查看大图)图1-3 |
- gcc -ffloat-store my_program.cc
或
- 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的有效软件的先决条件。
