文档库 最新最全的文档下载
当前位置:文档库 › 英特尔多核平台编程优化大赛报告

英特尔多核平台编程优化大赛报告

英特尔多核平台编程优化大赛报告
英特尔多核平台编程优化大赛报告

英特尔多核平台编程优化大赛报告

英特尔多核平台编程优化大赛报告

代码优化前所需时间:4.765秒

代码优化后所需时间:0.25秒(保留小数点后7位精度)

前言

本次优化使用的CPU是Intel Xeon 5130 主频为2.0GHz 同Intel酷睿2一样是基于Core Microarchitecture

的双核处理器。本次优化在Intel的工具帮助下主要针对Core Microarchitecture 系列处理器进行优化。但是由于未知

原因,Intel

VTune Analyzers并不能在该系统下正常工作。所以,所有使用Intel VTune Analyzers的测试均使用另外一个奔腾D

820的系统测试。

第一章主要介绍了程序的串行优化。其中有关于Intel编译器使用,以及Intel Math Kernel Library使用,Intel

VTune

Analyzers使用的介绍。在借助Intel工具的帮助下,结合Intel Core Microarchitectured的特性。设计出了针对L1

Cache进行优化的,高效率的串行代码。程序的执行时间从优化前的4.765秒达到了优化后的0.765秒。

第二章主要介绍了程序的并行化。首先讨论了2种并行算法的优缺点。然后选择了适合本程序的并行算法进行优化。并且

在最后分析了并行化时的性能瓶颈。通过并行化,程序达到了0.437秒。

第三章主要介绍了程序的汇编优化。首先介绍了计算的数学理论。然后介绍了汇编代码的编写。最后进行了性能分析。通

过该步优化程序在保留小数点后7位精度的前提下达到了0.312秒的好成绩。并且在Intel酷睿2 E6600 上测试达到了0.25秒。

附录A 说明了本次报告的目录结构和优化方法。

附录B 列出了进行本次竞赛所参考的文献。

目录

一、串行优化 (4)

1.1 代码的基本修改和优化 (4)

1.2 基于Intel编译器的优化 (4)

1.3 使用Intel VTune Analyzers进行性能分析 (8)

1.3.1 Intel VTune Analyzers概述 (8)

1.3.2 基于SAMPLING方式的分析 (9)

1.3.3 对于本次程序的分析 (9)

1.4 优化computePot函数 (10)

1.5 使用Intel Math Kernel Library. 11

1.6 根据Cache大小优化Intel Math Kernel Library调用 (12)

1.7 优化updatePositions函数 (13)

1.8 其他优化以及性能分析 (14)

二、并行优化 (17)

2.1 并行优化概述 (17)

2.2 优化方案一 (17)

2.3 优化方案二 (17)

2.4 并行实现 (18)

2.5 性能分析 (20)

三、汇编级优化 (23)

3.1 优化目标 (23)

3.2 数学理论 (23)

3.3 汇编码实现 (25)

3.4 性能分析 (28)

3.5 总结 (29)

附录A 目录结构和编译方法 (30)

附录B 参考文献 (30)

一、串行优化

1.1 代码的基本修改和优化

首先根据主办方的要求把代码的输出精度改为小数点后7位。

if (i%10 == 0) printf("%5d: Potential: %20.7f\n", i, pot);

在进行任何优化前代码的执行时间是4.765秒。

接着把项目转换成使用Intel C++ Compiler,代码的执行时间是4.531秒。

然后执行最基本的优化,把代码中的pow函数优化成乘法。代码如下:

distx = (r[0][j] - r[0][i])*(r[0][j] - r[0][i]);

disty = (r[1][j] - r[1][i])*(r[1][j] - r[1][i]);

distz = (r[2][j] - r[2][i])*(r[2][j] - r[2][i]);

执行时间依然为4.531秒。说明Intel编译器已经将pow函数优化掉了。

1.2 基于Intel编译器的优化

这里介绍本程序中基于Intel编译器优化技术。其中有些优化参数是可以确定的,有些优化参数需要在程序的不同阶段反

复调试以确定最优方案,而有些优化技术是在后面的优化中使用的。

编译器优化级别

Intel的编译器共有如下一些主要的优化级别:

u /O1:实现最基本的优化

u /O2:基于代码速度实现常规优化,这个也是默认的优化级别

u /O3:在/O2的基础上实现进一步的优化,包括Cache预读,标量转换等等,但是在某

些情况下反而会减慢代码的

执行速度。

u /Ox:实现最大化的优化,包括自动内联函数的确定,全局优化,使用EBP作为通用寄存器等。

u /fast:等同于/O3, /Qipo, /Qprec-div-, and /QxP。

通过测试,目前选用/O3,但是随着代码的更改,需要重新测试,选择合适的优化级别。

针对特定处理器进行优化

Intel的编译器一共支持如下3种针对特定处理器的优化:

u /G:使用这个优化选项,Intel将针对特定的CPU进行优化,但是其代码依然可以在所有的CPU上执行。

u /Qx:使用这个优化选项,Intel将针对特定的CPU进行优化,并且产生的代码无法使用在不兼容的CPU上。

u /Qax:使用这个优化选项,Intel将针对特定的CPU进行优化,并且产生多份代码,在运行时根据CPU类型自动选

择最优的代码。

由于本程序只需要运行在基于Core Microarchitecture

的处理器上,而无需考虑兼容性。所以本程序选择/Qx选项。并且针对运行时的酷睿2处理器,选择/QxT。但是在进行

VTune测试时,由于测试平台为奔腾D

820,所以暂时使用/QxP的参数。

使用IPO

使用/Qipo可以启用Intel编译器的过程间优化(Interprocedural

Optimizations)。通过过程间优化,编译器可以通过使用寄存器优化函数调用、内联函数展开、过程间常数传递、跨多

文件优化等方式进一步优化程序。

此外,Intel编译器支持多文件的过程间优化,而由于本程序只有一个文件,所以并不需要使用。

但是IPO优化却会对本程序的调试带来极大的麻烦。所以本程序开发时不使用IPO优化,只有在最后的版本中才尝试使用

IPO优化能否提高效率。

使用GPO

Intel编译器支持GPO(Profile-Guided Optimization)。GPO由一下三步组成。

第一步:使用/Qprof-gen编译程序,产生能记录运行细节的特殊程序。

第二步:运行第一步产生的程序,生成动态信息文件(.dyn)。

第三步,使用/Qprof-use,结合动态信息文件重新编译程序,产生更优化的程序。

通过使用GPO,Intel编译器可以更详细得了解程序的运行情况,从而根据实际情况产生更优化的代码。比如优化条件跳转

,使得CPU分支预测的能力更准确,又如决定哪些函数需要内联,哪些不要内联等。

此外,基于GPO还有很多的工具方便用户开发程序。比如Code-Coverage Tool可以进行代码覆盖测试。

由于GPO收集的信息和特定的程序有关,而本程序一直在修改。所以本程序只在每个版本的最后部分使用GPO进行优化。

循环展开

循环展开(Loop

Unrolling)通过在把循环语句中的内容展开从而使执行的代码速度更快。循环展开可以提高代码

的并行程度,减少条件转

移次数从而提高速度。另外,对于Pentium

4处理器,其分支预测功能可以精确得预测出16次迭代以内的循环,所以,如果能把循环展开到迭代次数在16次以内,对

于特定的CPU可以提高分支预测准确度。

但是循环展开必须有一个度,并不是展开层数越多越好,展开层数多了,可能反而影响代码的执行速度。所以通常的做法

是让编译器自己决定循环展开的层数。

Intel编译器对于循环展开有如下选项:

u /Qunrolln:执行循环展开n层。

u /Qunroll:让Intel编译器自己决定循环展开的层数。

此外Intel编译器还提供在了程序中使用编译制导语句规定某个特定循环的展开次数。如下例指示for循环展开n层。

#pragma unroll(n)

for(i=0;i<10000;i++){……}

所以本程序使用/Qunroll参数,让Intel编译器自己决定使用循环展开的层数。但是在程序的最终优化时,如果发现

Intel编译器的循环展开并不是最优的,则通过在特定循环前加上编译制导语句,使用最佳的循环展开层数。

浮点计算优化

Intel编译器提供了很多基于浮点数的优化参数,有提供精度的,也有提高速度的。对于本程序,主要使用如下优化参数

u /fp: fast或/fp: fast=1:这两个参数的等价的,同时也是默认的参数。他告诉编译器进行快速浮点计算优化

u /fp: fast=2:这个参数比/fp: fast=1提供更高的优化级别,同时也可能带来更大的精度损失。

本程序使用/fp: fast=2优化,但是如果发生精度问题,可以考虑使用/fp: fast=1。

自动并行化

Intel的编译器支持自动并行化(Auto-parallelization)。通过/Qparallel可以打开编译器的自动并行化,编译器会在

分析了用户的串行程序后,自动选择可以并行的部分进行并行化。自动并行化的有点是方便,不需要用户懂得专业知识,不需要

更改原来的串行程序。但是缺点也是显而易见的,由于编译器并不知道用户的程序逻辑,所以无法很好得进行并行化。在对本程

序试用/Qparallel后发现,效果并不好。所以本程序不只用/Qparallel进行自动并行化。

使用OpenMP并行化

OpenMP是一种通用的并行程序设计语言,其通过在源代码中添加编译制导语句,提示编译器如何进行程序的并行化。

OpenMP具有书写方便,不需要改变源代码结构等多种优点。Intel的编译器支持OpenMP。本次程序并不打算使用OpenMP进行并行

化,而打算使用Windows

Thread。但是由于本程序需要使用到Intel Math Kernel Library,而Intel Math Kernel

Library中的代码支持OpenMP并行化。所以有必要使用一些基本的OpenMP设置函数。

需要使用OpenMP,需要在编译时加上/Qopenmp选项。并且在源代码中包含” omp.h”文件。

OpenMP提供了函数omp_set_num_threads(nthreads)设置OpenMP使用的线程数,由于其设置会影响到Intel Math

Kernel Library,所以将其设置成1,禁止Intel Math Kernel Library的自动并行化。

向量化

Intel的编译器支持向量化(Vectorization)。可以把循环计算部分使用MMX,SSE,SSE2,SSE3,SSSE3等指令进行向量

化,从而大大提高计算速度。这也是本程序串行化时的主要优化点。前面提到的针对处理器的/QaxT 优化选项已经打开了向量化

。将代码向量化还有许多需要注意的地方,具体的注意点和方法将在后面具体的代码中说明。这里先给出一些对向量化有用的编

译制导语句以及选项。

u

/Qrestrict选项:当Intel编译器遇到循环中使用指针时,由于多个指针可能指向同一个地址,所以其无法保证指针指向

内容的唯一性。故Intel编译器无法确定循环内数据是否存在依赖性。这是可以通过使用/Qrestrict 选项与restrict关键字,指

示某个指针指向内容的唯一性。从而能解决数据依赖性不确定的问题。

u #pragma vector编译制导语句:该编译制导语句一共包含3个。#pragma vector always用于指示编译器忽略其他因素,进行向量化。#pragma vector

aligned用于指示编译器进行向量化时使用对齐的数据读写方式。#pragma vector

unaligned用于指示编译器进行向量化时使用不对齐的数据读写方式。由于在使用SSE类指令进行向量化时,需要同时处理

多个数据,所以每次读写的数据长度很长,可以达到128bit。所以将要处理的数据按照

128bit(16byte)对齐,使用对齐的读写

指令是可以提高程序运行速度的。但是需要注意的是对于实际没有对齐的数据使用#pragma vector aligned会造成程序运行错误。

使用变量对齐指示

Intel编译器提供了__declspec(align(n))用于在定义变量时指定其需要进行n字节对齐。变量对齐对于向量化计算的读

取速度有很大关系。对于向量化计算一般使用__declspec(align(16))进行对齐。另外也可以使用

__declspec(align(64))指定

变量对齐到Cache的行首。关于Cache的行对齐的详细讨论请见后文的分析。

数据预读

通常数据是放在内存中,当要计算时才读入CPU进行计算。由于内存到CPU的传输需要很长时间,所以CPU中有多级Cache

机制。Intel编译器支持数据预读优化选项。通过/Qprefetch打开数据预读优化,编译器会在使用数据前先插入预读指令,让CPU

先把数据预读到Cache中,从而加快数据的访问速度。该选项默认情况下是打开的。此外Intel还提供了数据预读的编译制导语句

,通过使用#pragma

prefetch语句,用户可以人为得在程序中增加数据预读指令。但是需要注意的是,数据预读指令并不是越多越好的。不恰

当的数据预读指令会占用内存带宽,把有用的数据从Cache中挤出去,反而影响速度。并且Core Microarchitecture体系结构已经支持给予硬件的数据预读指令。所以本程序倾向于使用给予硬件的数据预读机制。而由

于/Qprefetch默认的打开的,也没有必要特意关闭该选项,Intel编译器有能力判断哪些地方可以通过合适的数据访问模式激活

硬件数据预读机制,哪些地方需要额外添加数据预读指令。

产生调试信息

通过使用/Zi选项产生调试信息以帮助调试。默认为关闭。在本程序的开发阶段,打开此选项。在开发完成后关闭此选项

使用全局优化

通过使用/Og选项打开编译器的全局优化功能。改选项需要在本程序不同的开发阶段分别尝试是否打开以确定最优优化选

项。

针对Windows程序优化

通过使用/GA选项可以打开Intel编译器的针对Windows程序优化的功能。其实通过打开/GA 选项,Intel可以提高访问

Windows下thread-local

storage(TLS)变量的速度。TLS变量通过__declspec(thread)来定义。在本程序中,并不打算使用TLS变量。但还是打开

/GA选项。

内联函数扩展

Intel编译器可以通过/Obn来定义内联函数的扩展级别。当n为0禁止用户定义的内核函数的扩展。当n为1时,根据用户定

义的inline关键字进行扩展。当n为2时,根据Intel编译器的自动判断进行扩展。本次程序使用/Ob2选项。

FTZ与DAZ

在计算机内浮点数是由尾数和指数组成的。尾数通常被规范化成[1,2)之间。但是当数字接近0时,由于其指数已经无法将

尾数规范成[1,2)之间,所以需要在尾数表示成0.0000xx的形式。这种表示形式称为不规范的形式。其会影响CPU的浮点计算速度

。并且由于这种数非常接近0,所有有时将其表示成0并不会影响计算的结果。所以CPU的浮点控制器有2个用于控制对于不规范数

处理的选项。FTZ用于将计算结果中的不规范数表示成0,DAZ用于在读入不规范数时将其表示成0。Intel编译器提供了内置的宏

来方便用户设置这两个模式。这两个宏分别是

_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON)和

_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON)。用户在程序中设置了这两个模式将有助于提高浮点计算速度。但是

实际上对于本程序,由于已经使用了/O3以及SSE指令集优化。所以Intel编译器已经设置好了FTZ 模式,用户不必另外设置FTZ。

并且由于本程序中所有的数都是计算得来的,所以只要计算时使用了FTZ,那读取数据时就不会碰到不规范的数据,所以用户也

没必要设置DAZ。

编译器报告

编译器报告虽然不能直接提供优化,但是却可以让用户了解编译器处理程序的信息,给用户更改源代码提供了很多有用的

信息。对于本程序,向量化是非常重要的一步,而编译器报告可以指出某个地方是由于什么原因造成没有向量化。所以本使用使

用/Qvec-report3参数对向量优化进行报告。

使用Intel编译器函数进行精确时间测量

Intel编译器提供了许多特殊的函数。这类函数一般都对应一条或者几条汇编语言。其可以让用户以比汇编语言方便的方

式写出性能接近汇编语言的代码。其中最主要的是对SIMD类指令的支持。当然其中还有很多其他功能的函数。比如_rdtsc()函数

需要注意的是要使用这些函数必需打开/Oi选项。这个选项默认是打开的。

当程序需要进行精确时间测量,比如优化后需要知道某段特定的代码到底快了多少毫米时,使用Windows的时间函数已经

无法满足精度要求。这是用户可以使用Intel

VTune

Analyzers进行测量(具体使用方法将在后面介绍)。其实CPU已经提供了一个特殊的机器指令rdtsc,使用这条指令可以

读出CPU自从启动以来的时钟周期数。由于现在的CPU主频已经是上GHz了。所以,其计时精度可以达到纳秒级。Intel提供的

_rdtsc()函数使得用户不必再使用汇编语言,可以像调用函数一样得到CPU的时钟周期数。例子代码如下:

注:以下代码摘自“Intel C++ Compiler Documentation”

#include

int main()

{

__int64 start, stop, elaspe;

int i;

int arr[10000];

start= _rdtsc();

for(i=0; i<10000; i++)

{

arr[i]=i;

}

stop= _rdtsc();

elaspe = stop -start;

printf("Processor cycles\n %I64u\n", elaspe);

return 0;

}

优化结果

经过以上编译器选项的调整,程序的运行速度已经达到了2.25秒。

1.3 使用Intel VTune Analyzers进行性能分析

1.3.1 Intel VTune Analyzers概述

Intel VTune Analyzers用于监视程序或者系统的各种性能,从而为用户优化程序提供有价值的数据。同时Intel VTune

Analyzers也能分析其收集的信息,给出用户优化程序的建议。Intel VTune

Analyzers即支持本地的数据收集,也支持远程的数据收集。在本程序中,我们只需使用其本地数据收集功能。Intel

VTune

Analyzers共支持3种数据收集机制。每种机制都有其自己的适用范围,详细介绍如下:

u

SAMPLING:其通过使用CPU内部的监视功能来检测系统底层的各种性能事件。使用这个功能无需在执行代码中插入特定的

指令,因此其几乎没有探针效应。其无法给出函数间的调用关系。但是可以把相应的事件关联到程序中某行源代码或者汇编代码

上。该方法通常适用于对某段程序的微调或者针对特定性能事件的调整上。

u CALL

GRAPH:其通过在程序中插入特殊的指令,来记录每个函数执行的时间。函数间的调用关系等。其有一定的探针效应。该

方法通常用于对于整个比较庞大的程序,进行分析,找出其中具有性能瓶颈的函数。

u COUNTER

MONITOR:其无需在程序内部插入特殊的指令,因此其几乎没有探针效应。该方法即无法显示函数间的调用关系,也没法

把事件定位到具体的某行代码中。该方式是用于测试整个系统的某些性能,比如CPU占用率,内存带宽等。通常用于系统级的调

试。

对于本程序。由于程序结构简单。无需进行函数间调用的分析。而主要需要进行基于特定代码的分析。特别是后期需要针

对CPU内部的事件特性进行源代码级甚至是汇编级的调试。所以本次优化主要采用SAMPLING方式。

1.3.2基于SAMPLING方式的分析

原理:Intel的CPU有一组性能检测寄存器,由于记录各种影响性能的事件。程序首先通过编程设定需要检测的事件,并且

设定触发中断的计数值。当CPU中被检测的事件达到预设的值后触发相应的中断。Intel VTune

Analyzers中的SAMPLING就是使用CPU的性能检测功能帮助用户分析程序的性能。其中有关于内存访问的事件,分支预测

的事件,指令执行的事件等等。由于不同的CPU支持不同的性能事件,所以在不同的CPU上使用VTune时,所能监视的事件并不相

同。

使用注意事项:SAMPLING一共支持2种统计。一种是Event,其是直接测量得到的值。另外一种是Event

Ratio,其是基于多个Event计算得到的,有时更有实际意义,更直观。需要注意的是,每个Event 都有一个预设的值,当

这个预设的值到了以后,CPU引起中断,VTune进行统计。而这个值的设置不能太大,否则统计到的

事件不够多,无法分析。也不

能太小,否则频繁引起中断,会加大探针效应。用户可以在每个Event上手工设置合适的Sample After值,也可以通过选项卡上的选项,让VTune先运行一遍程序,然后根据实际的事件数量来校准触发值。对于本程序,

这点尤其需要引起注意。因为本程序优化到后面时间非常短,如果不校准触发值,分析的效果会不理想。需要注意的是

Clockticks和Instructions

Retired这两个最基本的事件,默认是不校准触发值的,我们需要把他们调整成自动校准。此外对于某个Event的发生,大

部分的中断点并不是精确的。即真正发生该事件的指令在所记录事件指令的前几条。但是有一部分属于精确事件,引起这类事件

的指令正好是发生中断的前一条。

1.3.3对于本次程序的分析

本程序首先使用VTune最基本的3个事件(Clockticks、Instructions Retired和CPI)进行程序耗时分析。其结果如图:

说明程序中耗时最长的是computePot函数。

1.4 优化computePot函数

在对computePot函数向量化前,我们可以注意到distx,disty,distz三个变量都是临时变量。先将这3个变量去掉,从

而可以使得Intel编译器能够更灵活得进行中间结果优化。另外最完成循环的i虽然是从0开始的,但是实际0和1并不进行计算,

所以把外层循环的i设置层从2开始。代码如下:

for( i=2; i

for( j=0; j

dist = sqrt( (r[0][j] - r[0][i])*(r[0][j] - r[0][i]) +

(r[1][j] - r[1][i])*(r[1][j] - r[1][i]) + (r[2][j] -

r[2][i])*(r[2][j] - r[2][i]) );

pot += 1.0 / dist;

}

}

此时编译器显示内层循环已经向量化了。但是这个绝非我们的目标。为了提高计算开根号倒数的速度,为了使用Intel

Math Kernel

Library,我们需要把开根号倒数的计算先存在一组向量中,再一同计算。既将dist变量变成,dist数组,然后再对dist

数组统一计算,再求和。代码如下:

for( i=2; i

for( j=0; j

dist[j] = (r[0][j] - r[0][i])*(r[0][j] - r[0][i]) +

(r[1][j] - r[1][i])*(r[1][j] - r[1][i]) + (r[2][j] -

r[2][i])*(r[2][j] - r[2][i]);

}

for( j=0; j

dist[j] = 1.0 / sqrt(dist[j]);

}

for( j=0; j

pot += dist[j];

}

}

Intel编译器提示,内部的3个循环都进行了向量化。此时出现了令人惊喜的成绩。程序的执行时间突然降到了1.453秒。

使用VTune进行分析,发现Intel编译器对于开根号倒数的计算自动调用了内部的向量化代码库。注意此时,还没有使用Intel

Math Kernel Library,所以这个向量代码库是Intel编译器内置的,虽然效率没有使用Intel Math Kernel

Library高,但是速度已经提高了很多。调用Intel编译器内置的向量库的结果如图:

1.5 使用Intel Math Kernel Library

Intel Math Kernel Library中提供了一部分的向量函数(Vector Mathematical

Functions)。这类函数提供了对于普通数学计算函数的快速的向量化计算。VML中有一个向量函数就是计算开根号倒数的

Intel的VML库中提供了如下函数来计算整个向量中各个数的开根号倒数:

vdInvSqrt( n, a, y )

其中n表示计算的元素个数。a是指向输入计算数据数组的头指针。y是指向输出计算数据数组的头指针。其中a和y可以相

同。

要使用该函数,首先需要在头文件中包含”mkl.h”,并且链接mkl_c.lib文件和libguide40.lib 文件。

除了基本计算功能外,VML还提供了一个设置模式的函数,用于设置特定的计算模式:

vmlSetMode ( mode )

其中的mode是一个预定义宏。在我们的程序中,需要设置如下模式:

VML_LA:VML的所有向量函数都提供了2个精度的版本。精度低的版本计算速度也相对比较快。本程序只需要保留小数点后

7位精度。低精度的版本符合要求,所以设定VML使用低精度的版本。

VML_DOUBLE_CONSISTENT:该选项用于控制FPU的计算精度为double,其实由于我们这次使用的函数基本上是使用SSE2指

令集进行计算的,和FPU没什么关系。但是也可能存在使用FPU的可能,所以设定VML使FPU的精度为double。

VML_ERRMODE_IGNORE:该选项用于关闭VML的错误处理功能,本程序不需要进行错误处理。

VML_NUM_THREADS_OMP_FIXED:VML函数都能使用OpenMP,根据特定的硬件环境进行并行化。而我们并不需要其进行并行

化。所以使用该选项和前面提到的omp_set_num_threads(1)结合。关闭VML的自动并行化功能。

具体的代码如下:

for( i=2; i

for( j=0; j

dist[j] = (r[0][j] - r[0][i])*(r[0][j] - r[0][i]) +

(r[1][j] - r[1][i])*(r[1][j] - r[1][i]) + (r[2][j] -

r[2][i])*(r[2][j] - r[2][i]);

}

vdInvSqrt(i-1,dist,dist);

for( j=0; j

pot += dist[j];

}

}

优化后出现了令人可惜可贺的成绩:0.796秒。

1.6 根据Cache大小优化Intel Math Kernel Library调用

在上面的程序中对于MKL函数的调用是每次内部循环都执行一次调用,我们知道每次执行函数的调用都是需要开销的,那

是否有更优化的调用MKL方法那?下面这段话摘自Intel

Math Kernel Library的说明文档上:

There are two extreme cases: so-called "short" and "long" vectors

(logarithmic scale is used to show both cases). For short vectors

there are cycle organization and initialization overheads. The cost

of such overheads is amortized with increasing vector length, and

for vectors longer than a few dozens of elements the performance

remains quite flat until the L2 cache size is exceeded with the

length of the vector.

下面这副性能分析图片摘自Intel Math Kernel Library的网站上:

从这段文字和这副图片中,我们了解到对于MKL函数的调用时,所处理的向量不能太短,否则函数的建立时间开销将是非

常大的,也不能太长,操作了L2

Cache,否则函数执行时访问内存的开销是很大的。并且通过图片了解到不合适的长度对于函数的性能将产生指数级影响

根据理论计算:每次执行computePot函数,总共需要执行的计算量为

(1+998)*998/2=498501个。每个double类型占用8

个字节,所有总共需要占用的空间为498501*8=3988008byte=3894KB。而这次进行竞赛的测试平台的CPU的L2

Cache大小为2M,由于有2个线程同时计算,平均每个线程分到的L2 Cache为1M。由于L2 Cache可能还被其他数据占据。所以为了保证所计算的数据在L2

Cache中,最好每次计算的向量长度在512KB左右。故把整个computePot函数的计算量分成8份。每份计算量的中间结果向

量长度为3894KB/8=486KB。

但是实际情况并非如此,进行这种优化后,程序的执行速度反而降低了。通过分析发现原来CPU 中的L1

Cache大小为32KB。数组r有3000个元素,如果每次迭代都进行vdInvSqrt调用。那dist 的长度为1000个元素左右。加起来

正好可以全部在L1

Cache中。而如果合并起来调用vdInvSqrt,则由于vdInvSqrt过长。其L1 Cache中存放不下,需要存放在L2

Cache中,从而反而影响了速度。看来,对于本程序,不应该根据L2 Cache进行优化,而应该

根据L1

Cache进行优化。但是对于只有几个或者几十个数据就调用MKL函数,其开销还是很大的。因此本程序使用了折中的方法,

对于前面非常小的几十个数据,凑足1000个放在一起进行计算,而后面的数据还是按照原来的方式计算。具体实现的代码如下:

for( i=2,k=0; i<47; i++ ) {

for( j=0; j

dist[k] = (r[0][j] - r[0][i])*(r[0][j] - r[0][i]) +

(r[1][j] - r[1][i])*(r[1][j] - r[1][i]) + (r[2][j] -

r[2][i])*(r[2][j] - r[2][i]);

}

}

vdInvSqrt(k,dist,dist);

for( j=0; j

pot += dist[j];

}

for( i=47; i

for( j=0; j

dist[j] = (r[0][j] - r[0][i])*(r[0][j] - r[0][i]) +

(r[1][j] - r[1][i])*(r[1][j] - r[1][i]) + (r[2][j] -

r[2][i])*(r[2][j] - r[2][i]);

}

vdInvSqrt(i-1,dist,dist);

for( j=0; j

pot += dist[j];

}

}

通过该不优化,程序的性能略微有所提高,达到了0.781秒。

1.7 优化updatePositions函数

虽然updatePositions函数执行的时间非常短。但还是值得优化的。

首先进行的是基于数学的优化。我们发现在updatePositions和initPositions中,都有加0.5的计算。但是从后面的

computePot的相减计算中发现,这个0.5是被抵消的,既不加0.5对结果没有影响。故去掉该加0.5的计算。另外

updatePositions和initPositions中都有除以RAND_MAX的计算。而通过提取公因子的变换发现,如果此处不除以RAND_MAX而将

最后的pot乘以RAND_MAX,则最后结果相同。故去掉该处的除以RAND_MAX的计算,而以在pot 上一次乘以RAND_MAX为替换。具体

代码如下:

void initPositions() {

int i, j;

for( i=0; i

for( j=0; j

r[i][j] = (double) rand();

}

void updatePositions() {

int i, j;

for( i=0; i

for( j=0; j

r[i][j] -= (double) rand();

}

在main函数中:

pot = 0.0;

computePot();

pot*=(double)RAND_MAX;

if (i%10 == 0) printf("%5d: Potential: %20.7f\n", i, pot);

其次需要进行updatePositions内rand函数的优化。虽然rand函数本身的执行时间非常短,但是其频繁得进行调用却影响

了性能。通过查找Microsoft

Visual Studio .NET

2005中提供的源代码。将其中的rand函数提取出来,进行必要的修改,并且加上inline属性。从而加快程序的调用速度

。具体代码如下:

int holdrand=1;

inline int myrand (){

return( ((holdrand = holdrand * 214013L+ 2531011L) >> 16) & 0x7fff );

}

经过上述优化,代码的执行速度已经达到了0.765秒。

1.8 其他优化以及性能分析

至此,该程序串行优化部分已经一本完成。但是还有一点细小的地方需要优化。

变量对齐对于数据读取速度是非常重要的。尤其是使用SIMD指令集进行优化后,对于对齐的变量,可以使用对齐的读写指

令提高速度。一般对于SIMD指令需要进行16字节对齐。但是对于本程序,由于后面要进行多线程优化,而多线程执行时基于

Cache

Line的共享冲突会对读写造成很大的损失。故本程序使用64字节对齐。代码如下:__declspec(align(64)) int holdrand=1;

__declspec(align(64)) double r[DIMS][NPARTS];

__declspec(align(64)) double pot;

__declspec(align(64)) double dist[1048];

在computePot函数的第一次迭代中。有一处进行pot累加的地方,使用了k变量作为循环条件。但是其实该变量的确切值

是可以计算出来的。通过计算出该变量的确切值,可以让Intel编译器在编译时就知道循环的次数,

从而有助于优化。具体代码

如下(注意1035这个值):

for( i=2,k=0; i<47; i++ ) {

for( j=0; j

dist[k] = (r[0][j] - r[0][i])*(r[0][j] - r[0][i]) +

(r[1][j] - r[1][i])*(r[1][j] - r[1][i]) + (r[2][j] -

r[2][i])*(r[2][j] - r[2][i]);

}

}

vdInvSqrt(k,dist,dist);

for( j=0; j<1035; j++ ) {

pot += dist[j];

}

此外再调整以下编译器的某些优化参数,选择合适的使用。比如使用哪个编译级别,是否打开全局优化,使用IPO,使用

GPO等。

至此本程序的串行优化全部完成。使用Intel VTune Analyzers的分析结果为:

Full NameCPIClockticks eventsClockticks %

void updatePositions(void)3.21408037582746210.287907869

int computePot(void)1.29488130292675755232.24568138

mkl_vml_core_t7_vml_dInvSqrt_500.91981472192522848666.9865643 (注:此分析数据是在奔腾D 820上测得)

从以上数据上表明updatePositions函数说执行的事件非常短,低于1%,computePot函数的执行时间在三分之一左右。

mkl_vml_core_t7_vml_dInvSqrt_50的执行时间在三分之二左右。这些数据对下面一步并行化采用的策略是非常重要的。

二、并行优化

2.1 并行优化概述

在进行本程序的并行优化前先谈谈并行优化需要注意的问题。在并行优化中经常用到数据重复和计算重复的方法。所谓数

据重复,就是为了保证多个线程能同时进行计算,就把数据复制多份来提高并行度。所谓计算重复,就是有时使用计算换通信的

方法,提高并行度。

在对本程序进行优化前需要注意的是。测试平台使用的是基于Core Microarchitecture结构的。这个结构的双核CPU是共

享L2

Cache的。但是当数据在一个核中进行修改,另外一个核去读他时,需要消耗几十个时钟周期的延迟。其代价的非常高的

。这里需要注意的是,数据在Cache中是按行进行存放的,也就是说,CPU看待数据有没有被修改过是根据Cache

Line的。所以2个分别被不同的核修改的数据如果存在于同一行Cache中,访问时的效率就会

非常低。也就是发生了共享冲

突。所以在分配变量时要尽量把不同性质的变量分配到不同的Cache

Line中。我们的测试平台的L1 Cache和L2

Cache都是每行64byte的。所以前一章中的变量对齐都使用了64byte对齐。同样,在程序并行化时也需要考虑这种情况。

2.2 优化方案一

此方案使用数据重复的方法。程序可以定义2个r数组。以及2个pot数组。通过定义2个r

数组,使得主线程可以在从线程使

用一个r数组计算时同时更新第二个r数组。即主线程先更新r数组,然后主线程和从线程同时开始计算。但是从线程的计算量比

主线程大一点。这样当主线程计算完后,可以继续更新第二个r数组,而此时从线程还在计算原来r

数组的内容。当主线程更新完

第二个r数组时,从线程正好完成前面的计算,并和主线程一同计算第二个r数组,依次类推。同时2个pot数组,一个给主线程计

算每步的中间结果,另一个给从线程计算每步的中间结果。等计算结束后,再将其结果相加,打印。

优点:使用该方法的优点是显而易见的,理论上线程可以做到完全同步。

缺点:使用该方法的缺点是,从线程每次计算需要从主线程计算好的r数组中读取内容,由于是2个核,所以其访问延迟非

常大。此外使用2个数值,每次迭代都需要将指针指向使用的数组,增加了程序的设计难度。同时计算任务分配的调优也是非常

繁琐的。

由于在前一章中,我们发现updatePositions函数所花费的时间非常短。所以做到线程间的完全平衡意义并不大。

2.3 优化方案二

在前一个方案中,我们提到了线程的完全平衡的算法。同时我们发现完全平衡的意义不大。因此我们设计适合本程序的更

优的方案。既然updatePositions函数所花费的时间非常短。那2个线程同时执行updatePositions 造成的额外开销也是可以忽略

的。本方案使用了数据重复和计算重复的方法。同样使用2个r数组,但是2个线程同时进行重复计算,并且2个线程分区完成不同

的迭代步骤的computePot计算。即主线程完成整个r数组的更新,但是只计算其中的奇数次迭代。从线程同样完成整个r数组的更

新,但是只进行偶数次迭代。并且同样使用了一个pot数组,2个线程分别将自己的计算结果先存储到pot数组中。等最后同步的

时候再打印。

优点:使用该方案,程序的设计相对来说比较简单,负载均衡的调整也很容易。程序只需要很少的同步操作(在本程序中

,只使用了2次同步)。并且重要的是。由于2个线程都在各自的CPU上使用各自的数据进行计算,所以最大化得避免了共享冲突

的发生。同时也保留了前一章优化中针对L1

Cache的命中率。

缺点:该方案的缺点是存在重复计算。但是通过前面VTune的测试,已经发现其重复计算量非常小,可以忽略。

2.4 并行实现

本程序使用方案二进行并行化。首先将所有需要计算的数据和函数都复制2份,代码如下:int computePot1(void);

void initPositions1(void);

void updatePositions1(void);

int computePot2(void);

void initPositions2(void);

void updatePositions2(void);

__declspec(align(64)) int holdrand1=1;

__declspec(align(64)) double r1[DIMS][NPARTS];

__declspec(align(64)) double pot1;

__declspec(align(64)) double dist1[1048];

__declspec(align(64)) int holdrand2=1;

__declspec(align(64)) double r2[DIMS][NPARTS];

__declspec(align(64)) double pot2;

__declspec(align(64)) double dist2[1048];

__declspec(align(64)) double potfinal[264];

其中的potfinal数组记录每次迭代的计算结果,用于最后的数组。

在主函数的并行中。我们发现由于偶数次迭代比奇数次迭代需要多算一次。故本程序的偶数次迭代在进行到快完成前先释

放一个同步锁。使得主线程可以先输出一部分数据。而从线程在执行完所有的偶数次迭代后再释放一个同步锁,使主线程输出剩

余的数据。由于输出数据也有一点的耗时。所以使用这种方法可以提高一点并行度。另外在本代码中使用了

SetThreadAffinityMask分别设置不同的线程对应各自的CPU,以防止线程在不同的CPU中切换从而影响L1

Cache命中率。具体代码如下:

DWORD WINAPI mythread( void *myarg ){

int i;

SetThreadAffinityMask(GetCurrentThread(), 2);

initPositions2();

updatePositions2();

for(i=0;i<=190;i+=2){

pot2 = 0.0;

computePot2();

pot2*=(double)RAND_MAX;

potfinal[i]=pot2;

updatePositions2();

updatePositions2();

}

ReleaseSemaphore(semmiddle, 1, NULL);

for(i=192;i<=NITER;i+=2){

pot2 = 0.0;

computePot2();

pot2*=(double)RAND_MAX;

potfinal[i]=pot2;

updatePositions2();

updatePositions2();

}

ReleaseSemaphore(semafter, 1, NULL);

return 0;

}//从线程

int main() {

int i;

int myarg=0;

clock_t start, stop;

omp_set_num_threads(1);

vmlSetMode(VML_LA);

vmlSetMode(VML_DOUBLE_CONSISTENT);

vmlSetMode(VML_ERRMODE_IGNORE);

vmlSetMode(VML_NUM_THREADS_OMP_FIXED);

semmiddle = CreateSemaphore(NULL, 0, 1, NULL);

semafter = CreateSemaphore(NULL, 0, 1, NULL);

CreateThread(0, 8*1024, mythread, (void *)&myarg, 0, NULL);

SetThreadAffinityMask(GetCurrentThread(), 1);

initPositions1();

start=clock();

for(i=1;i

pot1 = 0.0;

updatePositions1();

updatePositions1();

computePot1();

pot1*=(double)RAND_MAX;

potfinal[i]=pot1;

}

WaitForSingleObject(semmiddle, INFINITE);

for(i=0;i<=190;i+=10)

printf("%5d: Potential: %20.7f\n", i, potfinal[i]);

WaitForSingleObject(semafter , INFINITE);

i=200;

printf("%5d: Potential: %20.7f\n", i, potfinal[i]);

stop=clock();

printf ("Seconds = %10.9f\n",(double)(stop-start)/

CLOCKS_PER_SEC);

}//主线程

2.5 性能分析

并行化后的性能并不没有像理论中这么高只有0.437秒。于是我们开始查找原因。通过使用Intel Threading

Checker我们发现,VML库中存在着访问冲突。图片如下:

当然这个错误有可能是Intel Threading

Checker的误报。因为程序每次执行都没有发现不正确的结果,并且VML函数的文档上说明是线程安全性的。

由于兼容性原因,本系统无法使用Intel VTune

Analyzers进行每个函数的耗时分析。于是使用Intel编译器提供的内置函数_rdtsc()记录不同部分所花费的CPU时钟周期

。结果发现VML函数的总执行时间大概增加了0.088秒左右。说明VML函数在用户使用Windows Thread函数并行化访问时,其同步开销可能有一定的影响。

三、汇编级优化

3.1 优化目标

本程序主要的执行时间在computePot函数与VML库中。对于computePot函数,通过查看Intel编译器产生的汇编码发现其

已经很优了。而对于VML函数由于其需要满足通用性,所以本程序应该可以设计出最适合本程序的计算函数来。

3.2 数学理论

Intel的CPU支持的SSE2指令中,有2条是用于计算双精度浮点的开根号倒数的。sqrtpd指令可以同时计算2个double型的

开根号,其吞吐率为28个时钟周期。divpd指令用于计算2个数的除法,即用于计算倒数,其吞出率为17个时钟周期。由此可以计

算出,如果当当使用这2条指令计算双精度数的开根号倒数,那即使使用汇编语言,忽略其他开销。计算每个元素的时钟周期也

有(17+28)/2=22.5。而Intel的VML库计算每个元素的只需要10多个时钟周期,说明其肯定是通过其他快速的数学计算方法得到

的。所以要优化vdInvSqrt函数,关键是找到更快速的数学计算方法。在Quake 3在源代码中有如下一段具有传奇色彩的代码:

float InvSqrt(float x){

float xhalf = 0.5f*x;

int i = *(int*)&x; // get bits for floating value

i = 0x5f3759df - (i>>1); // gives initial guess y0

x = *(float*)&i; // convert bits back to float

x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases

accuracy

return x;

}

(注:以上代码的注释摘自CHRIS LOMONT的《FAST INVERSE SQUARE ROOT》文章中)在上面的代码中最后一条是典型的牛顿迭代,可以根据精度要求进行多次迭代。这段代码神奇的地方在于初始值的估算上

,只用了减法和移位2个简单的操作,达到了非常接近的估算值。我们称0x5f3759df为幻数(magic number)。CHRIS LOMONT在他的《FAST INVERSE SQUARE ROOT》文章中给出了对于这个幻数的解释和计算方法。并且计

算出了理论上最优的适用于double类型的幻数为0x5fe6ec85e7de30da。说们我们的代码中可以使用该方法进行计算,示例代码

如下:

double myinvsqrt (double x)

{

double xhalf = 0.5*x;

__int64 i = *(__int64*)&x;

i = 0x5fe6ec85e7de30da - (i>>1);

x = *(double*)&i;

x = x*(1.5-xhalf*x*x);

x = x*(1.5-xhalf*x*x);

x = x*(1.5-xhalf*x*x);

x = x*(1.5-xhalf*x*x);

return x;

}

但是不幸的是,根据调试,需要达到比赛要求的小数点后7位精度,必需进行4此牛顿迭代也行。而4此牛顿迭代的计算量

使得这个方法对于Intel的VML函数来说毫无优势可言。那能否降低牛顿迭代的次数那?

我们发现如果以上代码只进行3次牛顿迭代,那误差只有小数点最后的1,2位。CHRIS

LOMONT在他的文中提到他说计算出来的理论最优值,而这个幻数只是在线性估计时是最优的。在多次牛顿迭代中,这个值

并不是最优的。CHRIS

LOMONT并没有给出对于多次牛顿迭代最优幻数的计算方法,他在文章中对于float类型的实际最优值也是穷举得到的。我

们同样在理论最优值0x5fe6ec85e7de30da的基础上进行了一定的穷举操作,发现的确有更优的幻数。但是即使使用了更优的幻数

,还是无法在3次牛顿迭代基础上达到精度要求。但是我们发现所有的数值都偏小。于是我们可以在三次牛顿迭代后再乘一个比1

大一点点的偏移量。从而能做到3次牛顿迭代就能达到精度要求。示例代码如下:

double myinvsqrt (double x)

{

double xhalf = 0.5*x;

__int64 i = *(__int64*)&x;

i = newmagicnum - (i>>1);

x = *(double*)&i;

x = x*(1.5-xhalf*x*x);

x = x*(1.5-xhalf*x*x);

x = x*(1.5-xhalf*x*x);

x = x*offset

return x;

}

由于时间原因,这里并没有对newmagicnum和offset进行详细的计算与统计。只给出一个对于本程序相对较优的

newmagicnum值0x5fe6d250b0000000。

在上面的代码中只进行了3次牛顿迭代。对于Intel的VML来说也没有什么优势可言。那能不能再减少一次牛顿迭代,只进

行2次迭代就达到精度要求那?

我们知道要进行2次牛顿迭代就达到精度要求就必须对其初始值的估计更加准确。而使用上面的方法估计的初始值已经无

法满足该准确性。这是通过查找《Intel 64 and IA-32 Architectures Optimization Reference Manual》,我们发现SSE指令集中有一条RSQRTPS的指令用于同时计算四个单精度浮点数的开根号倒数,而其在Core

Microarchitecture上的延迟为3个周期,吞吐率为2个周期。也就是说我们可以在极短的时间内就算出单精度类型的开根

号倒数值(看来在现在的CPU上,当初Quake 3那段具有传奇色彩的代码已经没有用了)。于是我们想到了先使用单精度类型精度

初值估算,然后再使用牛顿迭代。实验结果表明该方法只需要进行2次牛顿迭代就能满足小数点后7位的精度要求。示例代码如下

double myinvsqrt (double x)

{

double xhalf = 0.5*x;

float xf=(float)x;

__asm{

movss xmm1,xf;

rsqrtss xmm1,xmm1;

movss xf,xmm1;

}

x=(double)xf;

x = x*(1.5-xhalf*x*x);

x = x*(1.5-xhalf*x*x);

return x;

}

不幸的是由于该代码涉及到了复杂的算法以及类型转换,Intel的编译器并无法将其很好的并行化。所以只有依靠手工使

用汇编语言将其优化。

3.3 汇编码实现

在实现汇编码前先要将原来的代码进行优化,将牛顿迭代中的减法变成加法,代码如下:double myinvsqrt (double x)

{

double xhalf = -0.5*x;

float xf=(float)x;

__asm{

movss xmm1,xf;

rsqrtss xmm1,xmm1;

movss xf,xmm1;

}

x=(double)xf;

Intel(英特尔)、AMD(超微)所有CPU型号大全

Intel(英特尔)、AMD(超微)所有CPU型号大全 英特尔的处理器有以下品牌: ?英特尔? 酷睿? 处理器 ?英特尔? 奔腾? 处理器 ?英特尔? 赛扬? 处理器 ?英特尔? 凌动? 处理器 ?英特尔? 至强? 和安腾? 处理器 英特尔? 酷睿? i7-975 处理器至尊版 世界上性能最强的台式机处理器。1 借助英特尔? 酷睿? i7 处理器 975 至尊版的智能化表现,释放台式机计算潜能,轻松应对复杂的多线程游戏和应用。 英特尔? 酷睿? i7 处理器至尊版 用世界上最快的处理器征服极致游戏世界: 英特尔? 酷睿? i7 处理 器至尊版。1 更快速的智能多核技术,满足您的各类需求,带来难以 想象的突破性游戏体验。 英特尔? 酷睿? i7 处理器 智能多核技术速度更快,能够自动为最需要的应用提供处理能力。借助该技术, 新的英特尔? 酷睿? i7 处理器将能为您带来惊人的突破性计算性能。这是全 球最好的台式机处理家族。 英特尔? 酷睿? i5 处理器 智能特性,能够根据任务需求进行加速。英特尔? 酷睿? i5 处理器是一款出 色的解决方案,适用于多媒体多任务处理环境。 英特尔? 酷睿?2 至尊处理器 适用于超级计算。享受英特尔最新双核及四核技术带来的革命性性能 水准,获得逼真的高清晰度体验和多任务响应能力。 英特尔? 酷睿?2 至尊处理器 适用于超级计算。享受英特尔最新双核及四核技术带来的革命性性 能水准,获得逼真的高清晰度体验和多任务响应能力。 英特尔? 酷睿?2 四核处理器 多媒体发烧友们将迎来一次疯狂的体验。借助英特尔? 酷睿?2 四核

处理器,为台式机带来强大的四核性能。它是高度线程化娱乐应用和高效多任务处理的理想引擎。 英特尔? 酷睿?2 双核处理器 至尊威力,铸就优异性能。凭借能效优化的双核技术和优异的能源 使用效率,英特尔? 酷睿?2 双核处理器可以出色地运行要求最苛刻 的应用程序。 英特尔? 奔腾? 处理器 英特尔? 奔腾? 处理器可提供超强的台式机性能、更低的能耗以及更出色的日常计算多任务处理能力。 英特尔? 赛扬? 处理器 基于英特尔? 赛扬? 处理器的台式机平台可为您提供超凡的计算体验,以及源自英特尔的出色品质和可靠性。 -------------------------------------------------------------------- 在同一处理器等级或家族内,编号越高表示特性越多,包括: 高速缓存、时钟速度、前端总线、英特尔? 快速通道互联、新指令或其它英特尔技术1。拥有较高编号的处理器可能某一特性较强,而另一特性较弱。 一、英特尔? 酷睿? 处理器 英特尔? 酷睿? i7 品牌的处理器号由 i7 标识符加三字数字序列组成。

英特尔公司简介

英特尔公司简介 英特尔(Intel)公司是美国最大的独立半导体制造商,成立于1968年8月。在世界半导体生产企业中稳居首位,其业务活动以设计和制造先进的大规模半导体集成电路零部件以及采用这些零部件的计算机系统为主。进入九十年代以来,英特尔公司呈现出一种加速发展趋势,年销售额、利润额和资产总额全面增长,而且盈利增长快于销售额增长,有理由相信,随着计算机的普及和信息高速公路的建设,英特尔公司的前景将更加光明。公司总裁格罗夫介绍,公司将全力把个人电脑推上信息高速公路。 英特尔公司的主要产品有微处理器、微型信息处理机和处理板以及通讯产品。公司在美国声誉极佳,这是公司不断探索的结果。创业初期公司规模还不大时,公司领袖诺伊斯等人就决心采用一种切实可行的管理风格,他们的最初的做法是每周非正式的与员工共进午餐以听取意见,不久之后公司转而推行一种仔细推敲的工作安排,强调公开性,在最低一级进行决策,重视纪律和问题的解决等等,要求每天8点以后才上班的员工书面写明迟到的原因。此外,公司还通过三条途径强化管理,加强企业的生存基础。 第一,重视产品开发。和所有高技术企业一样,英特尔面临的是一个竞争激烈、风险很大的市场,公司必须不断创新开发新产品才能在此立住脚跟并有所发展。1980年,果断退出DRA 市场,集中精力确保其在微处理器市场上的优势地位。如今,英特尔公司仍然在微处理器市场上居领先地位,同时公司还在研究开发上投放巨资,1992年用于研究开发更新开支的经费预算是20亿美元,公司先后投入50亿美元开发“奔腾”处理器芯片。正确的市场开发战略和巨额的投入是公司经历了八十年代的波折后从新成为世界最大的半导体生产商。 第二,注重质量。英特尔公司通过两种方法来提高其产品质量。一是英特尔生产率集团实施“管理生产率计划”,“以使生产率成为每天生活的一部分”,计划包括工作、任务简化培训,工作负担分配分析和使组织结构最优化。此计划是集团在两年间节约开支1200万美元。二是实行质量审计制度,由公司派遣质量审计官巡回世界各地审查公司产品质量,确认各分支机构是否遵循正确的程序和指令,是否有可以改进的地方,并就有关建议写出报告送交最高管理层和公司质量审查办公室。各分支机构也要经常进行质量自检。 第三,全力营造和谐的企业文化。自九十年代年代以来公司先后为职工建立了免费健身房,分级咖啡厅,废除了迟到交书面书面报告制度,推行实迹考评制度,现金奖励制度等等,公司还推行了利润分享计划,三周全薪休假计划,公司员工有机会以15%的折扣购买公司股票,为员工支付医疗保险等,又将1989——1991年间所关闭工厂的2000余工人中的80%左右安置到其他工厂或部门,凡此种种,都使工人对工厂具有较高认同感和向心力。 英特尔公司最初是以生产电脑存储器为主,后由于日本半导体企业的冲击,而被英特尔公司 【最新资料,WORD 文档,可编辑修改】

因特尔

创新组织结构:内企业:内企业家,内企业,3M公司与报事贴,内部孵化器;技术创新小组;新事业发展部;技术中心;动态联盟。二.因特尔 1.主要的创新产品类型和产品时间演进图 英特尔公司从成立来,已经有处理器,芯片组,固态硬盘,主板,以太网产品等,但是它最主要的创新产品是处理器的创新。 根据二手资料,我们可以了解到近十年来,英特尔对处理器作出的改进与创新,2003年-2010年处理器的发展如下: 2003年,奔腾M/赛扬M(Pentium M /Celeron M)处理器 Pentium M是英特尔公司的x86架构微处理器,供笔记簿型个人电脑使用,为了在低主频得到高效能,Banias作出了优化,使每个时钟所能执行的指令数目更多,并通过高级分支预测来降低错误预测率。还有一系列与减少功耗有关的设计:如增强型Speedstep技术;移动电压定位(MVPIV)技术;Micro-opsfusion 微操作指令融合技术等等。所有Celeron M都没有 SpeedStep 技术,不是Centrino 的一部份。采用了Banias-512 0.13 μm 制程技术,Dothan-1024 90 μm 制程,Yonah-1024 65 μm 制程技术等。属于渐进性技术创新,基本沿用了之前的奔腾架构,只是性能和工艺上有所提高和改进。 2004年,奔腾4 Prescott,Intel 64 Pentium 4依次采用Prescott 90 nm 制程,Prescott-2M 90 nm 制程,Cedar Mill 65 nm 制程等技术,逐渐提高处理器的性能。Intel 64,它是64 位元架构的 x86 扩充; 几乎是 AMD64 的复制。仍然是属于渐进性创新,采用的是之前的NetBurst架构。 2005年:英特尔奔腾D处理器,英特尔奔腾处理器至尊版 首颗内含2个处理核心的Intel Pentium D 处理器登场,正式揭开x86处理器多核心时代,英特尔的第一款双核处理器平台包括采用英特尔955X高速芯片组、主频为 3.2 GHz 的英特尔奔腾处理器至尊版840。双核和多核处理器设计用于在一枚处理器中集成两个或多个完整执行内核,以支持同时管理多项活动。这两种处理器都是属于工艺创新,他们的技术改进是由单核转变为多核,是生产过程中技术的变革,但他们本身还是属于NetBurst架构。 2006年:Core Duo处理器,Intel Core 2 Duo处理器 Core Duo处理器是用来取代Pentium M架构的产品,第一款芯片的产品代号为Yonah,是英特尔向酷睿架构迈进的第一步,但是它并没有采用酷睿架构,而是介于NetBurst和Core架构之间(第一个基于Core架构的处理器是酷睿2)。这属于渐进性创新。后来英特尔推出的新一代基于Core 微架构的产品体系Core 2 Duo,是一个跨平台的构架体系,包括服务器版、桌面版、移动版三大领域。它是属于根本性创新,全新的Core架构,彻底抛弃了Netburst架构。 2007年:Penryn家族处理器

英特尔公司介绍

我国的社会转型大致可以划分为转型初期、中期及后期三个阶段,将由计划经济向市场经济转变;从农村社会向城市社会转变;从工业社会向信息社会转变;贫困社会向富裕社会转变。 目前,我国正处在社会转型的中期阶段,在这一时期社会具有以下特点: (1)市场经济体制基本确立,正处于市场规范和调整阶段;(2)城市步入快速发展时期,城市化水平显著提高,城市发展战略急需调整充实;(3)我国正在从农村社会向工业社会转变,产业结构正处于调整与升级阶段;(4)人民生活水平有了大幅度提高,正在向全面小康社会迈进。由此可以看出,磨合与调整是社会转型中期的关键词。 从我国经济社会发展的具体实践来看,社会转型则主要指改革开放以来,我国社会政治、经济发展等各个层面发生的急剧变化。在短短二十多年间,就单从经济体制的变革而言,我国分别经历了以家庭联产承包责任制、国有企业改革以及建立现代企业制度、最终确立社会主义市场经济体制为代表的三个阶段。与此同时,政治体制改革也逐步展开,整个中国社会不论是乡村还是城市,都经历了全面而深刻的变革。对于城市地域而言,这种变革集中表现为社会体制转轨、政治体制改革、社会阶层分化重构、社会发展阶段转变以及城乡文化变迁五个方面。 54 |评论 粗放型经济增长方式是指主要依靠增加生产要素的投入,即增加投资、扩大厂房、增加劳动投入,来增加产量,这种经济增长方式又称外延型增长方式。其基本特征是依靠增加生产要素量的投入来扩大生产规模,实现经济增长。以这种方式实现经济增长,消耗较高,成本较高,产品质量难以提高,经济效益较低。 集约型经济增长方式是指在生产规模不变的基础上,采用新技术、新工艺,改进机器设备、加大科技含量的方式来增加产量,这种经济增长方式又称内涵型增长方式。其基本特征是依靠提高生产要素的质量和利用效率,来实现经济增长。以这种方式实现经济增长,消耗较低,成本较低,产品质量能不断提高,经济效益较高。 intel和英特尔是同义词,已合并。 英特尔 百科名片

Intel平台主流芯片组全析全解(Intel芯片组篇)

目前在市场上流行的Intel芯片组产品中,有老款的945/965系列芯片组、占据主流市场的Bearlake 3系列新列芯片组,而即将在明年第一季度上市、研发代号为Eaglelake的4系列芯片组也同样值得我们关注。 老骥伏枥——9系列酷睿2芯片组 第一代正式支持Conroe处理器的965系列芯片组已经渐别市场 伴随着Intel酷睿2处理器一同上市的Intel P965/G965芯片组,同时也被认为是第一代正式支持酷睿2处理器的芯片组产品。随后,各类经过供电模块改良并破解FSB的945P/945PL等酷睿2主板纷纷登场,而整合主板领域则主要由945GC接替945G/GZ等产品市场,继续成为低端整合酷睿2市场的主力军。虽然无论945P还是945GC都不能原生支持1066Mhz FSB,但800Mhz FSB的奔腾双核E和赛扬4系列处理器的

Intel 9系列整合芯片组规格对比 但再经典的产品也有终被淘汰的一天。从目前我们从厂家透露的情况来看,不少大品牌已经停止了P965主板的生产,各大代理手上的P965主板也非常稀少,特别是大品牌、热门P965主板来说,已经很难买到“新品”。而945GC虽然还是目前Intel在整合市场上不可或缺的产品,但某台系一线大厂透露这款芯片组也将在08年3月份进入清货阶段。

当打之年——Intel Bearlake(3系列)芯片组 Intel Bearlake系列芯片组是Intel今年5月份推出的最新产品。该系列芯片组当初以首款支持Intel 45nm处理器、支持DDR3内存为卖点进入人们视线。同时,Intel Bearlake也是首款此用65nm工艺制程的芯片组,因此在发热量和功耗方面均比前者——9系列芯片组有不少改进。 BearLake架构芯片组是继P965芯片组后Intel推出的首款桌面芯片组,也是首款支持DDR3内存的桌面解决方案,在这点上Intel再一次把AMD抛到后面。BearLake架构采用了65nm工艺制程,较之前P965(90nm)和P975X(110nm)均有所进步。从Intel 的Roadmap可以看出,BearLake家族仍主要针对主流市场,和之前的975X定位的高端

英特尔战略联盟

英特尔战略联盟 1英特尔公司 1.1公司愿景: 英特尔.超越未来? ——超越未来,英特尔的目光聚焦于这四个字上。我们的工作是发现并推动技术、教育、文化、社会责任、制造业及更多领域的下一次飞跃,从而不断地与客户、合作伙伴、消费者和企业共同携手,实现精彩飞跃。英特尔公司将推进技术更迅速、更智能、更经济地向前发展,同时最终用户能够以前所未有的精彩方式应用技术成果,从而令其生活变得更惬意、更多彩、更便捷。 1.2公司使命: 成为全球互联网经济最重要的关键元件供应商,包括在客户端成为个人电脑、移动计算设备的杰出芯片和平台供应商;在服务器、网络通讯和服务及解决方案等方面提供领先的关键元件解决方案。 1.3经营业务和产品: 英特尔为迅猛发展的计算机工业提供关键元件,包括性能卓越的微处理器、芯片组、板卡、系统及软件等。这些产品是标准计算机架构的重要组成部分。英特尔与业界伙伴协力,为最终用户设计、制造出先进的计算机系统。 图1 英特尔三大领域主要产品 2英特尔的竞争环境 2.1昔日的垄断辉煌 总体上,计算机CPU市场竞争可以分为服务器、台式机、笔记本电脑和嵌入式四大战场,其分布格局如下表所示:

表1 CPU市场竞争格局 其中,包括服务器、台式机和笔记本在内的计算机CPU是整个CPU市场竞争的焦点。在这个领域,竞争参与者不多,能够占有一席之地的更少,2003年在全球计算机CPU市场上基本呈现这样的格局:Intel一家独大,占据80%以上的市场份额;AMD与Intel进行全面竞争,占有20%左右的市场份额,处于第二梯队;VIA(威盛)和Transmeta占有很小的市场份额,处于第三梯队。如下表所示: 表2 2003年计算机CPU市场格局 注:数据来源于互联网实验室《中国CPU市场研究报告》 2.2光环不再,双雄相争 然而最近几年,英特尔的中国同盟阵营倒戈的声音频频不断。2007年1月AMD公司正式对外宣布与TCL电脑正式缔结战略合作关系,这标志着国内前七大品牌电脑厂商均已进入AMD的合作圈。AMD步步逼近,PC厂商双轨制已成事实,英特尔垄断地位被冲击,“一家独大”正向着“相互制衡”的方向演进。 目前英特尔正在加强竞争的力度,它在和OLPC、Eee PC抢夺低价便携终端市场、和AMD抢夺芯片市场、和微软竞争车载电脑市场、在高端服务器市场挑战IBM和SUN的霸主地位……当然摆在英特尔第一位的还是遏制AMD咄咄逼人的攻势,英特尔的一举一动都与其竞争对手AMD相关,AMD的崛起让英特尔正在重新审视自己的未来市场和合作伙伴的合作关系,英特尔和合作伙伴的战略联盟遍地开花。

英特尔服务器级别CPU发展历程全解析

英特尔服务器级别CPU发展历程全解析 CNET中国·ZOL06年11月14日【原创】作者:中关村在线蔺晓峰 成立于1968年的英特尔公司,在1971年发布了世界上第一款商用微处理器4004,经过几十年的磨练逐渐成为全球最大的芯片制造商,同时也是计算机、网络和通信产品的领先制造商。英特尔公司在1993年推出了全新一代的高性能处理器Pentium,由于CPU市场的竞争越来越趋向于激烈化,英特尔公司提出了Pentium商标注册,英特尔公司还替它起了一个相当好听的中文名字“奔腾”。1995年推出第一款PC服务器和工作站专用处理器Pentium Pro,自此之后的11年中,处理器从16位到32位再到64位,从单核到双核、四核乃至未来的多核,从150MHz到3GHz以上主频,从X86架构到IA64架构,从奔腾时代到崭新的酷睿时代,从intel inside到Leap ahead,我们领略到了英特尔领导服务器处理器发展潮流的雄姿与伟略,在英特尔“偏执”推动下,全球计算技术也在不断进步着。 1995年秋天Pentium Pro处理器 1995年秋天,英特尔发布了Pentium Pro处理器。已经初步占据了一部分CPU市场的英特尔并没有停下自己的脚步,在其他公司还在不断追赶自己的奔腾之际,又推出了最新一代的第六代X86系列CPU P6。P6只是它的核心架构代号,上市后P6有了一个非常响亮的名字Pentimu Pro。此款处理器的内部含有高

达550万个的晶体管,内部时钟频率为133MHZ,处理速度几乎是PENTIUM的2倍。 Pentium Pro等于是介于Pentium跟Pentium II之间的中央处理器芯片(CPU),其架构等于是没有MMX的Pentium II。Pentium Pro除了内建L2 Cache 以外,也支持多处理器架构,唯一缺点就是必须要用同一制程的Pentium Pro才能使用多处理器架构。从这一代开始(P6),英特尔也开始将为处理器的核心加入Reduced Instruction Set Computer (RISC,精简指令集)的架构设计,所以以后的英特尔x86处理器虽然是使用复杂指令集(CISC),但是核心部分开始逐渐采用RISC的架构。

英特尔多核平台编程优化大赛报告

英特尔多核平台编程优化大赛报告 英特尔多核平台编程优化大赛报告 代码优化前所需时间:4.765秒 代码优化后所需时间:0.25秒(保留小数点后7位精度) 前言 本次优化使用的CPU是Intel Xeon 5130 主频为2.0GHz 同Intel酷睿2一样是基于Core Microarchitecture 的双核处理器。本次优化在Intel的工具帮助下主要针对Core Microarchitecture 系列处理器进行优化。但是由于未知 原因,Intel VTune Analyzers并不能在该系统下正常工作。所以,所有使用Intel VTune Analyzers的测试均使用另外一个奔腾D 820的系统测试。 第一章主要介绍了程序的串行优化。其中有关于Intel编译器使用,以及Intel Math Kernel Library使用,Intel VTune Analyzers使用的介绍。在借助Intel工具的帮助下,结合Intel Core Microarchitectured的特性。设计出了针对L1 Cache进行优化的,高效率的串行代码。程序的执行时间从优化前的4.765秒达到了优化后的0.765秒。 第二章主要介绍了程序的并行化。首先讨论了2种并行算法的优缺点。然后选择了适合本程序的并行算法进行优化。并且 在最后分析了并行化时的性能瓶颈。通过并行化,程序达到了0.437秒。 第三章主要介绍了程序的汇编优化。首先介绍了计算的数学理论。然后介绍了汇编代码的编写。最后进行了性能分析。通 过该步优化程序在保留小数点后7位精度的前提下达到了0.312秒的好成绩。并且在Intel酷睿2 E6600 上测试达到了0.25秒。 附录A 说明了本次报告的目录结构和优化方法。 附录B 列出了进行本次竞赛所参考的文献。 目录 一、串行优化 (4) 1.1 代码的基本修改和优化 (4) 1.2 基于Intel编译器的优化 (4) 1.3 使用Intel VTune Analyzers进行性能分析 (8) 1.3.1 Intel VTune Analyzers概述 (8)

新至强Skylake CPU与Purley平台介绍

新至强Skylake CPU与Purley平台介绍 2017年Q3 英特尔(Intel)正式发布了代号为Purley的新一代服务器平台,包括代号为Skylake 的新一代至强(Xeon)CPU,命名为英特尔至强可扩展处理器(Intel Xeon Scalable Processor),也宣告了延续4代的至强E5/E7系列命名方式的终结。 至强可扩展处理器(右)不再以E7、E5的方式来划分定位,而代之以铂金(Platinum)、金(Gold)、银(Silver)、铜(Bronze)的方式。Skylake是新命名方式的第一代,Cascade Lake应该是第二 代,共用Purley平台 全新网格(Mesh)架构概览

至强E7 v4的内核数量已经达到24个,为了支持更多的内核,至强可扩展处理器采用了全新的Mesh互连架构。 6×6的Mesh,I/O位于顶部,内存通道在两侧居中的位置多达28核,最高205W TDP 四倍L2 Cache(每核256KB升至1MB),减小共享L3 Cache(每核2.5MB降为1.375MB)但提高利用率 3x UPI @ 10.4GT/s(之前2x QPI @ 9.6GT/s) 6x DDR4-2666,通道增加50%,频率更高

48个PCIe 3.0,增加20% 顶级对决:未启用AVX时内核基准频率(Base Non-AVX Core Frequency)为2.50GHz的Intel Xeon Platinum 8180(中),封装尺寸长约75mm,与一张信用卡差相仿佛,比2.20GHz的Xeon E5-2699 v4(左,52.5mm×45mm)大50%以上,TDP也增加了40%以上(205W÷145W),给新一代服务器的设计带来了很大的挑战 全新命名方式 从Skylake开始,启用如下格式命名具体型号: Intel Xeon Platinum/Gold/Silver/Bronze #1##xx processor

英特尔公司简介

英特尔公司简介 集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)

英特尔公司简介 英特尔(Intel)公司是美国最大的独立半导体制造商,成立于1968年8月。在世界半导体生产企业中稳居首位,其业务活动以设计和制造先进的大规模半导体集成电路零部件以及采用这些零部件的计算机系统为主。进入九十年代以来,英特尔公司呈现出一种加速发展趋势,年销售额、利润额和资产总额全面增长,而且盈利增长快于销售额增长,有理由相信,随着计算机的普及和信息高速公路的建设,英特尔公司的前景将更加光明。公司总裁格罗夫介绍,公司将全力把个人电脑推上信息高速公路。 英特尔公司的主要产品有微处理器、微型信息处理机和处理板以及通讯产品。公司在美国声誉极佳,这是公司不断探索的结果。创业初期公司规模还不大时,公司领袖诺伊斯等人就决心采用一种切实可行的管理风格,他们的最初的做法是每周非正式的与员工共进午餐以听取意见,不久之后公司转而推行一种仔细推敲的工作安排,强调公开性,在最低一级进行决策,重视纪律和问题的解决等等,要求每天8点以后才上班的员工书面写明迟到的原因。此外,公司还通过三条途径强化管理,加强企业的生存基础。 第一,重视产品开发。和所有高技术企业一样,英特尔面临的是一个竞争激烈、风险很大的市场,公司必须不断创新开发新产品才能在此立住脚跟并有所发展。1980年,果断退出DRA 市场,集中精力确保其在微处理器市场上的优英特尔公司 【最新资料,WORD 文档,可编辑修改】

势地位。如今,英特尔公司仍然在微处理器市场上居领先地位,同时公司还在研究开发上投放巨资,1992年用于研究开发更新开支的经费预算是20亿美元,公司先后投入50亿美元开发“奔腾”处理器芯片。正确的市场开发战略和巨额的投入是公司经历了八十年代的波折后从新成为世界最大的半导体生产商。 第二,注重质量。英特尔公司通过两种方法来提高其产品质量。一是英特尔生产率集团实施“管理生产率计划”,“以使生产率成为每天生活的一部分”,计划包括工作、任务简化培训,工作负担分配分析和使组织结构最优化。此计划是集团在两年间节约开支1200万美元。二是实行质量审计制度,由公司派遣质量审计官巡回世界各地审查公司产品质量,确认各分支机构是否遵循正确的程序和指令,是否有可以改进的地方,并就有关建议写出报告送交最高管理层和公司质量审查办公室。各分支机构也要经常进行质量自检。 第三,全力营造和谐的企业文化。自九十年代年代以来公司先后为职工建立了免费健身房,分级咖啡厅,废除了迟到交书面书面报告制度,推行实迹考评制度,现金奖励制度等等,公司还推行了利润分享计划,三周全薪休假计划,公司员工有机会以15%的折扣购买公司股票,为员工支付医疗保险等,又将1989——1991年间所关闭工厂的2000余工人中的80%左右安置到其他工厂或部门,凡此种种,都使工人对工厂具有较高认同感和向心力。 英特尔公司最初是以生产电脑存储器为主,后由于日本半导体企业的冲击,而被迫转以芯片生产为主。芯片在电脑中的运用主要是其中央处理器(CPU),它是电脑的核心部件。目前,英特尔是世界上最大的芯片生产商。1995年,其芯片的销量占全球总销售额的79%。世界上大约有90%的计算机

Intel平台

Intel平台 Intel Intel845系列芯片组的82845E/82845GL/82845G/82845GV/82845GE/82845PE,除82845GL 以外都支持533MHz FSB(82845GL只支持400MHz FSB),支持内存方面,以上845系列北桥芯片都支持最大2GB内存,82845G/82845GL/82845E支持DDR 266,其余都支持DDR 333,另外82845G/82845GL/82845GV还支持PC 133 SDRAM,除82845GL/82845GV之外都支持AGP 4X插槽;865系列芯片组的82865P/82865G/82865PE/82865GV/82848P,除82865P之外都支持800MHz FSB,DDR 400(82865P只支持533MHz FSB,DDR 333,除82848P之外都支持双通道内存以及最大4GB内存容量(82848P只支持单通道最大2GB内存),除82865GV之外都支持AGP 8X 插槽;Intel桌面AGP平台最高端的是875系列的82875P北桥,支持800MHz FSB,4GB双通道DDR 400以及PAT功能。Intel的芯片组或北桥芯片名称中带有“G”字样的还整合了图形核心。 还有915/925系列的82910GL、82915P、82915G、82915GV、82915PL、82915GL、82925X 和82925XE等八款北桥芯片。在支持的前端总线频率方面,82910GL只支持533MHz FSB,而82925XE则支持1066MHz FSB,其余的82915P、82915G、82915GV和82925X都支持800MHz FSB;在内存支持方面,82910GL、82915PL和82915GL都只支持DDR内存(DDR 400),82925X和82925XE则只支持DDR2内存(DDR2 533),其余的82915P、82915G和82915GV都能支持DDR 内存(DDR 400)和DDR2内存(DDR2 533),所有这八款北桥芯片都能支持双通道内存技术,除开82915PL之外最大都支持4GB内存容量(82915PL只支持2GB内存),此外82925X还支持ECC 内存;82910GL、82915G、82915GL和82915GV集成了支持DirectX 9.0的Intel GMA900显示核心(Intel Graphics Media Accelerator 900);在外接显卡接口方面,82915P、82915G、82915PL、82925X和82925XE都提供一条PCI Express X16显卡插槽,而82910GL、82915GL 和82915GV则不支持独立的显卡插槽。 之后Intel发布了支持双核心处理器的945/955/975系列的82945P、82945G、82945GZ、82945GT、82945PL、82955X、82975X等七款北桥芯片。在支持的前端总线频率方面,82945GT 只支持667MHz FSB,82945GZ和82945PL则只支持800MHz FSB,其余则全部都支持1066MHz FSB;在内存支持方面,所有这七款北桥芯片都能支持双通道内存技术并且都仅支持DDR2内存从而不再支持DDR内存,其中82945PL和82945GZ仅支持最大2GB的DDR2 533,82945P、82945G 和82945GT则支持最大4GB的DDR2 667,82955X和82975X则支持ECC内存技术和最大8GB 的DDR2 667;在双核心处理器的支持方面,82945P、82945G、82945GZ、82945PL仅支持Pentium D,82955X和82975X则支持Pentium D和Pentium EE,82945GT则支持Core Duo;82945G、82945GZ和82945GT集成了支持DirectX 9.0的Intel GMA950显示核心(Intel Graphics Media Accelerator 950),这是GMA900的升级版;在外接显卡接口方面,82945P、82945G、82945GT、82945PL、82955X、82975X都提供一条PCI Express X16显卡插槽,而82945GZ则不支持独立的显卡插槽。 最新的是946系列的82946PL和82946GZ以及965系列的82P965、82G965、82Q965和82Q963等六款北桥芯片,都支持最新的双核心处理器Core 2 Duo,82P965还支持顶级的Core 2 Extreme。82946PL和82946GZ只支持800MHz FSB,而82P965、82G965、82Q965和82Q963

英特尔智能响应技术平台组建过程(图文)

英特尔智能响应技术平台组建过程: 要想使用英特尔智能响应技术(Smart Response),我们必须要组建一个Z68平台,并且主板BIOS要支持PCI 3.0及POST Memory Mana gem ent技术,同时在准备一块要加速的机械硬盘和一块固态硬盘。 准备工作: 首先,我们需要在主板BIOS中打开RST Smart Storage caching功能,并将硬盘模式设置成RAID,由于非RAID模式的系统无法进入,所以我们还需要再重新装一下系统,装好系统后再安装英特尔Rapid Storage Technology驱动10.5或以上版本的驱动。

进入系统后可以看到我们本次参加测试的两块硬盘,磁盘0是金士顿SSDNow SV100-S2(128G)固态硬盘,磁盘1是西部数据 500GB SATA3 16M蓝盘,目前容量除了必要的系统安装外都是全部可用的。 开始设置:

这时我们打开英特尔快速存储技术控制界面。在这个界面我们可以看到软件具有相应的提示:您的存储系统可通过使用固态硬盘作为高速缓存设备来加速以提高整体性能。 点击启用加速按键就会弹出一个设置页面,在这里可以设置缓存的大小。软件会自动读取固态硬盘的容量信息,你可以选择最小20GB(实际:18.6G B)还 是最大64GB作为缓存空间,如果固态硬盘的容量超过64GB,超出部分用户仍然可以作为磁盘空间自由使用。 同时,加速模式上还可以选择增强模式或最大化模式。增强模式为默认设置,其可以提升系统对磁盘的读取速度;而最大化模式可以提升系统对磁盘的读取以及写入的速度,但当出现硬件故障和意外断电时存储在固态硬盘中的未写入的数据将会丢失。这两个模式的区别我们将会在后面通过实际测试来告诉大家。

英特尔公司简介

英特尔公司 【最新资料,WORD文档,可编辑修改】 英特尔公司简介 英特尔(Intel)公司是美国最大的独立半导体制造商,成立于1968年8月。在世界半导体生产企业中稳居首位,其业务活动以设计和制造先进的大规模半导体集成电路零部件以及采用这些零部件的计算机系统为主。进入九十年代以来,英特尔公司呈现出一种加速发展趋势,年销售额、利润额和资产总额全面增长,而且盈利增长快于销售额增长,有理由相信,随着计算机的普及和信息高速公路的建设,英特尔公司的前景将更加光明。公司总裁格罗夫介绍,公司将全力把个人电脑推上信息高速公路。 英特尔公司的主要产品有微处理器、微型信息处理机和处理板以及通讯产品。公司在美国声誉极佳,这是公司不断探索的结果。创业初期公司规模还不大时,公司领袖诺伊斯等人就决心采用一种切实可行的管理风格,他们的最初的做法是每周非正式的与员工共进午餐以听取意见,不久之后公司转而推行一种仔细推敲的工作安排,强调公开性,在最低一级进行决策,重视纪律和问题的解决等等,要求每天8点以后才上班的员工书面写明迟到的原因。此外,公司还通过三条途径强化管理,加强企业的生存基础。 第一,重视产品开发。和所有高技术企业一样,英特尔面临的是一个竞争激烈、风险很大的市场,公司必须不断创新开发新产品才能在此立住脚跟并有所发展。1980年,果断退出DRA市场,集中精力确保其在微处理器市场上的优势地位。如今,英特尔公司仍然在微处理器市场上居领先地位,同时公司还在研究开发上投放巨资,1992年用于研究开发更

新开支的经费预算是20亿美元,公司先后投入50亿美元开发“奔腾”处理器芯片。正确的市场开发战略和巨额的投入是公司经历了八十年代的波折后从新成为世界最大的半导体生产商。 第二,注重质量。英特尔公司通过两种方法来提高其产品质量。一是英特尔生产率集团实施“管理生产率计划”,“以使生产率成为每天生活的一部分”,计划包括工作、任务简化培训,工作负担分配分析和使组织结构最优化。此计划是集团在两年间节约开支1200万美元。二是实行质量审计制度,由公司派遣质量审计官巡回世界各地审查公司产品质量,确认各分支机构是否遵循正确的程序和指令,是否有可以改进的地方,并就有关建议写出报告送交最高管理层和公司质量审查办公室。各分支机构也要经常进行质量自检。 第三,全力营造和谐的企业文化。自九十年代年代以来公司先后为职工建立了免费健身房,分级咖啡厅,废除了迟到交书面书面报告制度,推行实迹考评制度,现金奖励制度等等,公司还推行了利润分享计划,三周全薪休假计划,公司员工有机会以15%的折扣购买公司股票,为员工支付医疗保险等,又将1989——1991年间所关闭工厂的2000余工人中的80%左右安置到其他工厂或部门,凡此种种,都使工人对工厂具有较高认同感和向心力。 英特尔公司最初是以生产电脑存储器为主,后由于日本半导体企业的冲击,而被迫转以芯片生产为主。芯片在电脑中的运用主要是其中央处理器(CPU),它是电脑的核心部件。目前,英特尔是世界上最大的芯片生产商。1995年,其芯片的销量占全球总销售额的79%。世界上大约有90%的计算机在使用其生产的80X86CPU及兼容芯片。1995年,英特尔公司的营业额达到138亿美元,继1992年超过日本NEL后,四次蝉联半导体行业的桂冠。 英特尔公司为何能在短短的27年中,在优胜劣汰的竞争中迅速成长起来呢?当然,其

Intel Haswell平台解析

Intel Haswell平台解析 Ivy Bridge处理器很快就要正式发布了,当然它也会是北京IDF会议上的重点,不过因为偷跑严重,Ivy Bridge已经没什么秘密可言,来看一点更新的。按照Intel的Tick-Tock,Ivy Bridge只是制程升级,架构升级要等到明年的Haswell。 Pcwach的专栏作者笠原一輝从OEM厂商那里探听了不少Haswell的消息,虽然消息内容主要是针对移动平台的,不过从中已经可以获取很多Haswell处理器的设计要点及特性。 首先来看Haswell的架构设计。 Haswell及配套的Lynx Point芯片组架构(点击放大) Haswell处理器依然有双核、四核等版本(六核以及八核的Haswell-E/EP应该还没影),每个内核搭配LLC 2MB缓存,四核将会有8MB缓存,双核则是4MB,跟目前的SNB、Ivy Bridge没有区别。

指令集方面,Haswell将会支持新一代AVX2指令,它是目前的AVX指令的扩展,其他指令如AES-INI也会提供支持。 GPU方面,集成的核心为GT3,按照Intel的说法它应该是第三代图形引擎了,据说有超过50个EU单元,支持DX11、OpenGL 3.2、OpenCL 1.2等规范,即便是单个EU单元的性能没有提升,仅仅是数量的增加也足以让Haswell的图形性能威胁AMD和NVIDIA的中低端显卡了。(希望如此) Haswell配搭的芯片组代号Lynx Point,命名应该是8系列了,相比目前7系芯片65nm的工艺它将会升级到45nm以进一步减少功耗。 SATA接口上,Intel终于大方了一点,支持4个SATA 6Gbps,2个SATA 3Gbps (PS,之前泄露的Lynx Point芯片组架构图显示是6个SATA 6Gbps接口,这里的图表显示还是4个,最终规格还要看以后的官方说明了),与目前的6/7系主板的SATA接口相反。另外,USB 3.0接口提高到6个(目前是4个),USB 2.0则从10个降低到8个。 南桥与GPU相连的界面依然是FDI,通道为DMI x4,相比CPU早就实现PCI-E 3.0支持,南桥与外设的接口还是PCI-E 2.0 x8通道,当然带宽还是足够的。 再来看一下代号Shark Bay的移动平台的相关信息。它与目前的移动平台最大的不同是封装方式,从Shark Bay开始,Intel开始将SOC的概念推向主流平台,不再只局限在低功耗的Atom芯片上。

intel 笔记本平台

自笔记本电脑诞生之日起,就成为了移动与便携的代名词,而由英特尔公司倾力打造的迅驰(Centrino)移动计算技术更是将其特点发挥到了极值。作为整个笔记本电脑产业的支柱,移动计算技术扮演着不可替换的角色,特别是在消费者要求日益提高的情况下,产品的飞速更新换代也成为市场发展的必然趋势。 2003年3月英特尔公司首次发布了迅驰计算技术平台(Centrino),该平台开发代号为Carmel,代表了一整套移动计算解决方案,从此开创了笔记本移动办公新时代。而时隔五年随着2008年的到来,关于迅驰第五代平台推出的呼声也越来越高,而且在本届Computex 大展上,第五代迅驰移动平台也有了成品展示。至此,英特尔在移动产品上已经走过了一个非常值得关注的历程。编辑今天就在这里从迅驰最早发行的第一代产品开始,为大家作一个回顾。

英特尔五代迅驰平台全解析 首先还是让我们从名字的源头开始,一步步了解迅驰技术。“迅驰”是英特尔公司首次将一系列技术用一个名字来命名,对于这个名称,英特尔官方是这样解释的:Centrino一词是由Center(中心)和Neutrino(微中子)两个词复合而成。由名字我们也能感受到英特尔对迅驰技术寄与的希望:快速、强劲、充满活力。而事实证明的确如此,迅驰移动平台技术在后面的几代中都表现出了极为强劲的势头,彻底改变了台式机笔记本平台混用的现象,我们从此也再没有听说过笔记本电脑搭配台式机处理器这样的另类组合。

?英特尔 公司总能为我们带来惊喜 什么样的平台可以称之为迅驰平台呢?英特尔官方对于这个平台的标准要求非常严格:一台笔记本电脑必须搭配有英特尔移动处理器,英特尔移动芯片组及英特尔无线网卡这三大件才能称之为迅驰平台。那么在接下来的几页文章中,编辑将带领大家一起回顾迅驰从第一代到第四代的详细发展历史,并且对即将到来的第五代迅驰技术进行展望。 第一代迅驰技术(Carmel) 2003年3月发布的第一代迅驰移动计算平台的标准组合为英特尔奔腾M处理器、英特尔855GM或855PM芯片组以及英特尔2100无线网卡模块。其中需要说明的是英特尔855 GM为集成显卡主板芯片组,而855PM为提供独立显卡接口的芯片组,而GM和PM的芯片组命名规则也延续至了后几代迅驰平台。

相关文档