Pentium III处理器的单指令多数据流扩展指令(3)

概要 :

随着Intel Pentium III处理器的发布,给程序设计人员又带来了许多新的特性。利用这些新特性,程序员可以为用户创造出更好的产品. Pentium III和Pentium III Xeon(至强处理器)的许多新特性,可以使她能够比Pentium II和Pentium II Xeon处理器有更快的运行速度,这些新特性包括一个处理器序列号(unique processor ID)和新增SSE处理器指令集,这些新的指令集就像Pentium II在经典Pentium的基础上添加的MMX指令集.

1. Data Swizzling

要利用Pentium III处理器SSE指令的加速功能也是要有一定的代价的.因为SSE指令只能操作她定义的新数据类型(128位).如果应用程序使用自己的数据类型格式,那么在进行SSE指令操作之前要将他转换为这种新数据类型,操作完成之后又要把他转换回来.

这种把一种数据格式转换到另一种数据格式的操作就称为"data swizzling".

这种转换是需要时间和耗费处理器核心周期的.如果一个应用程序频繁的进行数据格式转换,处理器核心周期的浪费是很严重的.因此,这种数据格式的转换是必须得到关注的.

1.1 数据组织

通常,3D应用程序将一个顶点保存在一个和他相配的数据结构中.当表达多个顶点时,应用程序使用这个结构的数组,也叫做AoS来表示.一个典型的操作是对表示顶点的x、y和z坐标进行的.下面的代码就给出了这样一个表示3D顶点的数据结构.如果要表示大量的这样的顶点,就要用到这个结构的一个数组了,如图9所示.

struct point {

float x, y, z;
};
...
point dataset[...];

图九 :结构数组

SSE的优点,就是可以同时对多个顶点的进行处理.这样我们就必须要能够方便的处理到表示多个顶点的数据(比如表示4个顶点x坐标的4个浮点数).这是可以实现的,我们可以把表示一个顶点的x、y和z三个坐标值分别集合在一起,然后应用程序对他们进行处理.要实现这些,应用程序必须重新组织数据到三个单独的数组中,或者创建一个数组结构,结构中每个数组对应一个这样的坐标值数组.这个数据结构也称为SoA结构.(我是这样理解的: 在不用SSE时是把表示一个顶点的三个坐标值组合到一个数据结构中,处理时一个值一个值的进行.而使用SSE以后,可以把所有点的各坐标值分别组合到3个数组中,处理时取出这样一个数组的4个值同时执行).

下面的代码就定义了这样的一个数组结构,如图10用图表来表示的数组结构.

struct point {

float *x, *y, *z;
};

图十: 数组结构

时间: 2025-01-20 21:12:14

Pentium III处理器的单指令多数据流扩展指令(3)的相关文章

Pentium III处理器的单指令多数据流扩展指令(2)

关键字 : Pentium,处理器,单指令多数据流扩展指令,SSE,指令集 概要 : 随着Intel Pentium III处理器的发布,给程序设计人员又带来了许多新的特性.利用这些新特性,程序员可以为用户创造出更好的产品. Pentium III和Pentium III Xeon(至强处理器)的许多新特性,可以使她能够比Pentium II和Pentium II Xeon处理器有更快的运行速度,这些新特性包括一个处理器序列号(unique processor ID)和新增SSE处理器指令集,这

Pentium III处理器的单指令多数据流扩展指令(1)

关键字 : Pentium,处理器,单指令多数据流扩展指令,SSE,指令集 概要 : 随着Intel Pentium III处理器的发布,给程序设计人员又带来了许多新的特性.利用这些新特性,程序员可以为用户创造出更好的产品. Pentium III和Pentium III Xeon(至强处理器)的许多新特性,可以使她能够比Pentium II和Pentium II Xeon处理器有更快的运行速度,这些新特性包括一个处理器序列号(unique processor ID)和新增SSE处理器指令集,这

ngClip —— AngularJS 的剪贴板扩展指令

ngClip 是一个 AngularJS 的扩展指令,封装了 ZeroClipboard 实现了拷贝到剪贴板的功能. 示例代码: .config(['ngClipProvider', function(ngClipProvider) { ngClipProvider.setPath("bower_components/zeroclipboard/dist/ZeroClipboard.swf"); }]); var myapp = angular.module('myapp', ['ng

“质数+探查”可攻击英特尔软件防护扩展指令拿到密钥

软件防护扩展指令( Software Guard Extensions:SGX )本应隐藏数据,但"质数+探查"的攻击方法搞定了它. 1月,英特尔SGX输入输出防护被曝存在可能缺陷,现在,应受保护的SGX飞地上又出现了恶意软件. 奥地利格拉兹科技大学的研究人员写了概念验证程序(PoC),不用SGX保护系统,却用来隐藏恶意软件,并在5分钟之内,就从SGX管辖范围内获取到了RSA密钥. 设计SGX就是为了避免出现这种情况.SGX是隔离机制,本应防止代码和数据不被窥探--恶意特权用户也不行.

使用MMX/SSE汇编指令集优化视频开发

1.汇编指令集 目前大部分的PC机采用的都是Intel或者AMD的CPU,其支持的多媒体汇编指令有: MMX:多媒体扩展指令(MultiMedia eXtention),该指令由Intel在1996年为Pentium处理器开发,包括了57条多媒体指令,可以i一次处理多个数据.但是MMX指令不能与X86浮点运算指令同时执行,在某些场合使用受到一定限制. SSE:SIMD扩展指令集(Streaming SIMD Extension),也称作单指令多数据流扩展.其中的SIMD的含义为Single In

cpu工作原理简析

在了解CPU工作原理之前,我们先简单谈谈CPU是如何生产出来的.CPU是在特别纯净的硅材料上制造的.一个CPU芯片包含上百万个精巧的晶体管.人们在一块指甲盖大小的硅片上,用化学的方法蚀刻或光刻出晶体管.因此,从这个意义上说,CPU正是由晶体管组合而成的.简单而言,晶体管就是微型电子开关,它们是构建CPU的基石,你可以把一个晶体管当作一个电灯开关,它们有个操作位,分别代表两种状态:ON(开)和OFF(关).这一开一关就相当于晶体管的连通与断开,而这两种状态正好与二进制中的基础状态"0"和

内存屏障机制及内核相关源代码分析

1.--->ymons 在www.linuxforum.net Linux内核技术论坛发贴问:set_current_state和__set_current_state的区别? #define __set_current_state(state_value) /do { current->state = (state_value); } while (0) #define set_current_state(state_value) /set_mb(current->state, (st

CPU指令集是什么

  所谓指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合,而每一种新型的CPU在设计时就规定了一系列与其他硬件电路相配合的指令系统.而指令集的先进与否,也关系到CPU的性能发挥,它也是CPU性能体现的一个重要标志. SSE指令集 由于MMX指令并没有带来3D游戏性能的显著提升,1999年Intel公司在Pentium III CPU产品中推出了数据流单指令序列扩展指令(SSE).SSE兼容MMX指令,它可以通过SIMD(单指令多数据技术)和单时钟周期并行处理多个浮点来有效地提高浮点运

Viusal C++.NET的优化代码

前言 人们在使用一个新的编程工具时总会感到缺乏自信,本文试图让你对VC的代码优化有更直观的感觉,希望你能通过阅读本文从VC中"得到"更多的东西. Visual C++ .NET 2003 VC.NET 2003不仅带来了两个新的优化选项,它还改进了VC.NET 2002中一些优化的性能. 第一个新增选项是"/G7",它告诉编译器对Intel Pentium 4和AMD Athlon处理器进行优化. 使用"/G7"选项编译的程序,当我们和VC.NE