R中如何打乱一个数组的顺序

Python013

R中如何打乱一个数组的顺序,第1张

如果要求不是很严格的话,感觉可以随机交换N次,每次交换,随机生成两个交换的元素的下标。

如果要求严格随机的话,感觉可以依次从数组里无放回的取数,并按照取数的先后顺序放入一个新的数组,然后新的数组就是打乱顺序之后的数组了。

乱序执行(out-of-order execution)是指CPU采用了允许将多条指令不按程式规定的顺序分开发送给各相应电路单元处理的技术。比方Core乱序执行引擎说程式某一段有7条指令,此时CPU将根据各单元电路的空闲状态和各指令能否提前执行的具体情况分析后,将能提前执行的指令立即传送给相应电路执行。

基本介绍中文名 :乱序执行技术 外文名 :out-of-order execution 允许 :将多条指令不按程式规定 属于 :执行的运行方式 基本信息,定义,解释,目的,工作原理,历史,从有序技术到乱序技术,从安腾到Power6,乱序执行技术与顺序执行技术,简介,对比,乱序执行技术与龙芯2F晶片,套用,对比,乱序执行技术与英特尔E8400处理器,简介,增强的多媒体性能,英特尔可信执行技术,乱序执行技术与Intel的Nehalem架构晶片,建立,原因,乱序执行技术与威盛凌珑(VIA Nano)处理器,简介,关键架构性能,巴塞隆纳新特性解析:堆叠操作与乱序执行,起源,技术, 基本信息 定义 在各单元不按规定顺序执行完指令后还必须由相应电路再将运算结果重新按原来程式指定的指令顺序排列后才能返回程式。这种将各条指令不按顺序拆散后执行的运行方式就叫乱序执行(也有叫错序执行)技术。 解释 这样将根据个电路单元的状态和各指令能否提前执行的具体情况分析后,将能提前执行的指令立即传送给相应电路单元执行,在这期间不按规定顺序执行指令,然后由重新排列单元将各执行单元结果按指令顺序重新排列。采用乱序执行技术的目的是为了使CPU内部电路满负荷运转并相应提高了CPU的运行程式的速度。分枝技术:(branch)指令进行运算时需要等待结果,一般无条件分枝只需要按指令顺序执行,而条件分枝必须根据处理后的结果,再决定是否按原先顺序进行。 目的 采用乱序执行技术的目的是为了使CPU内部电路满负荷运转并相应提高了CPU的运行程式的速度。 这好比请A、B、C三个名人为晚会题写横幅“春节联欢晚会”六个大字,每人各写两个字。如果这时在一张大纸上按顺序由A写好"春节"后再交给B写"联欢",然后再由C写"晚会",那么这样在A写的时候,B和C必须等待,而在B写的时候C仍然要等待而A已经没事了。 但如果采用三个人分别用三张纸同时写的做法, 那么B和C都不必须等待就可以同时各写各的了,甚至C和B还可以比A先写好也没关系(就象乱序执行),但当他们都写完后就必须重新在横幅上(自然可以由别人做,就象CPU中乱序执行后的重新排列单元)按"春节联欢晚会"的顺序排好才能挂出去。 工作原理 在按序执行中,一旦遇到指令依赖的情况,流水线就会停滞,如果采用乱序执行,就可以跳到下一个非依赖指令并发布它。这样,执行单元就可以总是处于工作状态,把时间浪费减到最少。乱序执行可以允许在发布指令3前发布指令4~8,而且这些指令的执行结果可以在指令3引出后立即引出(按序引出对X86 CPU来说是必需的),实际解码率又会增加25%。不过PⅡ和K6从乱序执行中得到的好处有限,因为如果CPU遇到指令依赖情况,它必须找到更多的非依赖指令进行发布。 WinChip的性能表现看到一个带有大容量一级Cache的按序执行CPU能够同乱序执行CPU竞争,在时钟周期方面,Cache未命中的代价是非常高昂的。带有大容量一级Cache的按序执行CPU性能,比只有较小容量Cache乱序执行CPU的性能要强。 而Rise的工程师在这方面犯了错误,MP6的一级Cache只有16KB,因此Cache未命中的发生频率比其他CPU高,以致于它很难“喂饱”它的3条流水线。这是很可惜的事,因为一个按序执行CPU不是太复杂,因此可以做得更小。如果Rise CPU具有较大的一级Cache和高时钟频率,那么,对于像K6-2那样的乱序执行CPU来说,Rise CPU是一个凶狠的对手,它具有更好的浮点性能(双FPU流水线),而且成本也更便宜。集成256KB二级Cache的mP6-Ⅱ或许将纠正这个错误,但它要达到令人满意的时钟频率。 由于K7采用大容量缓冲,因此它能及时发布足够多的非依赖性指令。大容量一级Cache、大容量缓冲和乱序执行,使K7的两条FPU流水线比Rise mP6的两条流水线更容易“喂饱”,效率更高。 历史 从有序技术到乱序技术 直到大约1993年前,大多数CPU一次只能处理一条指令。那时,如果采用流水线设计,譬如摩托罗拉68040或者英特尔80486,那么可以同时在不同执行阶段处理不同的指令。 到了1991年和1992年,出现了MIPS R4000、Alpha 21064和奔腾这些处理器,它们属于面向通用市场的第一批“超标量”处理器:每个CPU周期可以处理(读取、执行及退出)两条指令。 后来,1995年出现了Alpha 21264,就有了每个周期能处理四条指令的第一个CPU,时钟频率达到300MHz,这个速度在当时十分惊人。Alpha21664在微处理器论坛上一亮相,就引来了台下观众的一片赞叹,其中包括英特尔和IBM的设计者,更不用说Sun SPARC的设计者了。遗憾的是,Alpha最后没有成功。 不管怎样,这些厂商当时都采用了有条不紊的有序执行技术(In Order):程式指令在执行时,按顺序读取、执行及引退操作码,每次执行两条或者四条指令。 不同指令需要不同的执行资源,而且程式流程往往是这样:执行需要等资源被释放出来,或者指令依赖性(dependency)得到解决,才能继续执行下一条指令。更糟的是,每出现新一代CPU,就需要重新编译代码,针对新CPU进行最佳化,不然读/写指令之间很可能会出现太多气泡(bubble)即空闲时间,导致性能提升幅度不大,与竞争产品相比优势也不大。 这时候,乱序执行(out of order execution)出场了。CPU硬体本身在读取指令后重新安排指令的执行顺序,根据现有资源情况,提供更多的执行单元、重新命名暂存器、处理好指令依赖性等等。所以,Pentium Pro和Alpha 21264之后的几乎所有新款CPU都是采用无序执行技术。 在多数情况下,乱序执行可以加快晶片的运行速度,有时候加速明显。21264的速度就是21164的将近两倍,而Pentium Pro的速度也比奔腾快了一大截。经过重大改进的最新MIPS架构R10000也采用了乱序执行。 从安腾到Power6 乱序执行一直发展良好,直到后来英特尔推出了一种全新的技术。意义重大的安腾处理器拥有真正独一无二的引擎,并使用了重要的显式并行指令计算(EPIC)技术。先不说安腾处理器的超过100种的指令格式组合、庞大的慢速暂存器组等,它实际上重新采用了有序执行技术。所以,编译器不得不完成所有工作,以确保执行单元始终处于忙碌状态。除了浮点处理密集型套用外,要做到这一点并非易事,只要看看安腾系统的基准测试结果就会明白。  在后续的发展中,安腾架构的这一做法从来没有变过。相反,Sun一度改用了富士通公司使用无序技术的SPARC64,而不是它自己的使用有序技术的UltraSPARC IV。其他的重要架构如x86则继续采用无序技术,使用了Core 2和K10等新引擎,并进一步改进了这种方案,以便充分利用每MHz。 POWER5+ and POWER6 如果出于某种原因需要AIX,那么Power的重要性就不言而喻了。Power4和Power5都是高速、但复杂的采用乱序技术的RISC处理器,它结合了四路超标量执行机制和非常高的系统频宽。不过,Power6却回到了有序技术时代。原因何在? 一个答案就是,如果Power6的同步多执行绪效果好,那么对单一执行绪浪费执行资源就不用太担心:在这种情况下,只要同步运行两个执行绪就行。另外,为了进一步大幅提升性能,频率提高一倍、二级高速快取增加一倍、缩短算术逻辑单元(ALU)的延迟等方面恐怕更关键。即使那样,浮点处理部件还会保留有一定的乱序执行功能——这是在通用处理器的浮点运算部分首次引入十进制浮点处理单元(FPU)。“同步双执行绪执行、负荷预测机制以及增强的数据和指令预取功能,提升了有序执行超标量核心的性能。”IBM是这么评价其新晶片的。 Power5+的五路无序执行被Power6的七路有序执行所取代,但即使如此,也有几个地方需要注意:Power5+一个执行绪每个周期最多只有五条指令,而Power6一个执行绪增加了二条指令,这对计算型执行绪和记忆体搜寻型执行绪组合来说更有优势。Power5+更关注内部资源,而Power6在大部分时候等待记忆体,所以每个周期两次操作完全够了。那么性能方面有什么提升呢?看一下基准测试specfp2006,频率为2.2GHz的Power5+在这方面能达到14.9,当然是在经过改动的Power5机器上实现的而频率为4.7GHz的Power6能达到22.3,时钟频率提高了一倍多,性能提升却不到一半。 所以,Power6的7.9亿个电晶体分布在尺寸比较大的341平方毫米上,超过了Barcelona/Agena的283平方毫米,仅比尺寸庞大的安腾小了一点,它确实大幅提升了性能,尽管没有了乱序技术。虽然高速快取和记忆体频宽随着时钟频率的提高都水涨船高,但是仍然可以说,在时钟频率相同情况下,重新使用有序技术会在处理单执行绪任务时导致性能下降30%左右。 为此,不得不等待更新的Power6系统以及下一版本AIX在编译器方面的进展,以减少这种性能损耗。不过对Power6来说,采用有序技术确实明显提升了处理器的性能。安腾同样采用了有序技术,但是至少到现在还没有看到明显的成效。x86恐怕再也不会出现有序技术。 不过,处理器技术的发展一日千里,Power6设计者不会坐井观天。英特尔公司的3.6GHz的Harpertown”Penryn“和AMD公司3GHz Barcelona处理器就会陆续面世,都会对IBM Power6构成重大挑战。IBM必须牢记: 对采用有序技术的这类处理器而言,随着每一代后续CPU的问世,在编译器方面需要做的工作更多。同时,并不是每个人都会有时间重新编译自己的应用程式。 乱序执行技术与顺序执行技术 简介 未来主流的计算市场(台式机、伺服器和笔记本电脑)需要的是有限多核架构,更加强调核的单执行绪性能,而很多核架构(数十甚至上百个核心)则将套用于流计算、HPC和SoC等特殊计算环境。这也将成为未来英特尔处理器的一个分水岭,于是就有了所谓“大核”和“小核”处理器之分。前者以目前的酷睿架构为发展基准,追求更好的单执行绪性能后者则以凌动(Atom)核心为基础,在设计上强调更高的并行度和更低的功耗。 在指令执行方面,“大核”采用的是乱序执行(out-of-order execution)模式,而“小核”则采用顺序执行(In-order execution)模式。与顺序执行相对应的乱序执行,是指CPU允许将多条指令不按程式规定的顺序分开发送给各相应电路单元处理的技术。 对比 与顺序执行技术相比,乱序执行能够更有效地提高IPC,即提高每个时钟频率能够执行的指令数量。一般来说在同样一个主频周期当中,无序核执行指令数量要比有序核执行的数量更多,因而乱序执行架构的处理器单核的计算能力比较强。但乱序执行模式的处理器在电路设计上比较复杂,核的功耗也比较高,在手机和某些嵌入式套用需要绝对低功耗的场合较难达到其设计要求,因此凌动处理器很自然地就采用了顺序执行模式。 未来,很多核处理器和有限多核处理器将并行发展,以共同满足日益分化和复杂的计算环境的需求。而评价一款处理器好坏的标准也会更加复杂,可能既不是通过主频甚至也不是IPC,而要根据其套用特性来具体判断。 乱序执行技术与龙芯2F晶片 套用 龙芯处理器在工业控制、PC、笔记本、军工方面已经有非常成熟的套用,其实在某种意义上说,国产晶片已经进入了主流市场。据王成江先生透露,有很多 *** 以及军队都在长期使用龙芯平台。 对比 曙光千兆防火墙采用的是龙芯2F晶片,它是64位的通用RISC处理器,采用90nm的CMOS工艺制造,完全兼容MIPS 64标准。龙芯2F是基于龙芯2E处理器的改进版本,于2007年研制成功。龙芯2F集成了高性能龙芯2号CPU核,四发射动态超标量结构,9-10 级超流水线,支持暂存器重命名、动态调度、转移预测等乱序执行技术龙芯2F在龙芯2E的基础上提高了I/O性能和记忆体访问频宽,集成记忆体控制器,提升了数据吞吐的速度,为网路安全产品提供了比较好的平台。 乱序执行技术与英特尔E8400处理器 简介 45纳米英特尔酷睿2双核处理器E8400可为嵌入式套用提供长达7年的生命周期支持。这款处理器同时还支持英特尔可信执行技术(Intel Trusted Execution Technology),以帮助客户部署安全的嵌入式解决方案。 增强的多媒体性能 该款45纳米处理器中引入了超级乱序执行引擎,能够增强专为图形和多媒体处理最佳化的英特尔SIMD流指令扩展(SSE)算法。超级乱序执行引擎能够降低延迟,并在加快现有SSE指令运行速度的同时,显著提升最新SSE4指令集的表现。开发人员可充分利用SSE4多媒体指令集,提升互动式客户端或数字签名等终端嵌入式套用内在的视频编辑和编码功能。 英特尔可信执行技术 英特尔可信执行技术是英特尔酷睿2双核处理器E8400中的一项硬体延展技术,它将硬体数据安全性引入了嵌入式市场,使得双核处理器成为了防务、 *** 、中型网路安全设备和零售套用的理想选择。这项安全技术旨在保护虚拟化计算环境中的数据免遭软体攻击、病毒入侵及其它类型威胁。 乱序执行技术与Intel的Nehalem架构晶片 建立 Nehalem还是基本建立在酷睿微架构(Core Microarchitecture)的骨架上,外加增添了SMT、3层Cache、TLB和分支预测的等级化、IMC、QPI和支持DDR3、新增加SSE4.2指令等技术。比起从Pentium 4的NetBurst架构到酷睿微架构的较大变化来说,从酷睿微架到Nehalem架构的基本核心部分的变化则要小一些,因为Nehalem还是4指令宽度的解码/重命名/撤销。 原因 Nehalem的乱序引擎显著的扩大了,除了性能原因,还有就是为了提供SMT,因为SMT需要资源共享。 和酷睿 2一样,Nehalem的暂存器重命名表(register alias table,RAT)指明每一个结构暂存器(architectural register)要么进入重排序缓冲(Re-Order Buffer,ROB),要么是进入撤销暂存器档案(Retirement Register File,RRF,或翻译为引退暂存器档案),并且保持有绝大多数最近的推测值状态(speculative state)。而RRF则保持有绝大多数最近的非推测状态(non-speculative state)。RAT可以每周期重命名4个微操作,给每一个微操作在ROB中一个目的地暂存器(destination register)。被重命名的指令就读取它们的源运算元并被传送到通用架构的保留站(unified Reservation Station,RS,可以被各种指令类型使用)。 Nehalem的ROB(重排序缓冲)从96项增加到128项,RS(保留站)从32项增加到36项,它们都由两个执行绪所共享,但是使用不同的策略。ROB是静态分配给2个执行绪,使得2个执行绪在指令流里都可以预测得一样远。而RS则是竞争共享,基于各执行绪的需求。这是因为许多时候一个执行绪可能会中止,从记忆体等待运算元,而使用到很少的RS项。这样就不如让另一个更活跃的执行绪尽可能多地使用RS项。在RS中的指令当其所有运算元都准备好时,就被分配到执行单元去。 Nehalem的执行单元与酷睿 2相比,基本没有大的改变,而且并不受SMT的影响,除了使用率更高之外。 乱序执行技术与威盛凌珑(VIA Nano)处理器 简介 威盛凌珑(VIA Nano)处理器是威盛 x86 平台系列第一款 64 位的超标量乱序执行处理器,旨在激活传统台式和笔记本 PC 市场,为广为需求计算技术、娱乐和网路连线套用提供了真正优质性能。 威盛 C7系列处理器采用市场领先的节能科技,威盛凌珑(VIA Nano)处理器系列在同一功耗范围,把性能提高到原来的四倍,从而进一步提升了其每瓦性能值的领导地位。而与C7系列处理器相同的针脚兼容保证了OEM 和主机板商能更平顺地实现二者的转换,另外,也让现有系统和主机板升级更易行。 威盛凌珑(VIA Nano) 处理器系列 处理器名称 型号 主频 威盛 V4 前端汇流排 封装 处理器制程 闲置功耗 VIA Nano L2100 1.8GHz 800MHz NanoBGA2 65nm 500mW VIA Nano L2200 1.6GHz 800MHz NanoBGA2 65nm 100mW VIA Nano U2300 1.3+GHz 800MHz NanoBGA2 65nm 100mW VIA Nano U2500 1.2GHz 800MHz NanoBGA2 65nm 100mW VIA Nano U2400 1.0GHz 800MHz NanoBGA2 65nm 100mW 关键架构性能 尺寸 威盛凌珑(VIA Nano)处理器采用富士通先进的65纳米处理器技术,实现了高性能和低功耗完美的融合。它进一步巩固了威盛在处理器小型化的领导地位,通过超密集设计,实现了x86平台新一代更小型化设计和套用。 封装尺寸:威盛凌珑(VIA Nano)BGA2 封装(21mm x 21mm) 核心尺寸:7.650mm x 8.275mm (63.3平方毫米) 64 位的超标量乱序执行的微体系结构 威盛凌珑(VIA Nano)处理器支持完整 64 位指令集,具备宏融合 (Macro-Fusion),微融合 (micro-fusion)功能,和精密复杂的分支预测。进一步降低了处理器功耗,提升了其效能。 高性能计算和媒体处理 威盛凌珑(VIA Nano)处理器支持高速、低功耗威盛V4 前端汇流排,最低为800 MHz,支持新的SSE指令、2个64KB L1 高速快取和1MB独立L2 高速快取,具有 16路信道连线性能,实现了多媒体性能的一大飞跃。 特别值得一提的是,威盛凌珑(VIA Nano)处理器在高性能浮点运算方面有了非常显著的提升,使用了全新的浮点加法运算法则,大大降低了 x86处理器中的浮点延迟时间(the lowest floating-point add latency),同样,浮点乘法器也拥有了最低的浮点延迟时间。 换句话说,这意味着威盛凌珑(VIA Nano)处理器提供了出色的流畅播放蓝光碟和其它高清视频格式的性能,它能解码的媒体流速度可以达到40Mbps ,此外它独有的双时钟浮点单元(FPU)和 128 位的数据通路,提供了绝佳的游戏体验,提供了极顺畅的 3D 图片表现 下图表明了威盛凌珑(VIA Nano)处理器在计算方面优于广受欢迎的 C7 处理器之处: 高级功耗和热量管理 强劲的动态电源管理,包括支持新型“C6”电源状态,PowerSaver科技,全新的电路设计和机制来管理晶片核心温度,降低功耗提升了热量管理水平。 通过处理器中的以上创新科技,威盛凌珑(VIA Nano)处理器在拥有超标量结构,实现显著的性能提升的同时,功耗却能维持和之前的威盛 C7 系列 处理器一样的范围。 威盛 1.0 GHz 的凌珑(VIA Nano) ULV 处理器的首样产品最大的设计功耗(TDP)只有 5 瓦(空闲运行功耗只有100 毫瓦),而 1.8GHz 的威盛凌珑(VIA Nano)处理器的功耗也只有 25.5 瓦(空闲运行功耗 500 毫瓦)。 威盛凌珑(VIA Nano) 处理器计算性能虽增加,功耗仍维持不变,这进一步提升了每瓦性能值, 更始其成为业内每瓦性能值最佳的产品。 2007 上测试的性能总分 1.6GHz Celeron-M 的TDP(最大热功耗) = 31瓦1.6GHz 威盛Nano 的TDP = 17 瓦 作业系统 = Windows Vista 企业版 可升级威盛 C7处理器:威盛凌珑(VIA Nano)处理器与威盛 C7处理器家族产品针脚兼容,使 OEM 厂商和主机板厂商能平顺的进行新架构的产品交替,能让他们仅需透过单一主机板或系统设计,能扩展延伸到不同的市场领域中。 绿色科技:此外还完全符合 RoHS 标准和 WEEE 规则,产品无卤素、无铅,对保护环境和可持续计算科技大有裨益。 增强的威盛 PadLock安全引擎 威盛凌珑(VIA Nano)处理器承继了威盛处理器家族核心硬体加密加速器和安全特性,包括双随机数据生成器(RNG)、一个AES加密引擎、NX Bit 和一个处理 SHA-1/SHA-256 加密计算的安全混编引擎。 AMD Phenom Intel Core 2 Intel Atom VIA C7 VIA Nano 安全混编 No No No 完全 SHA-1 &SHA-256 完全 SHA-1 &SHA-256 缓冲区溢出 NX Bit NX Bit NX Bit NX Bit NX Bit 核心编密码(On-Die Encryption) No No No 完全 AES 编/译 aeleration RSA 加速 CBC, CFB-M, AC, CTR modes 25Gb/s 峰值 完全 AES 编/译 aeleration RSA 加速CBC, CFB-M, AC, CTR modes 25Gb/s 峰值 随机数字生成器(Random Number Generation) (RNG) No No No 2 个增强的硬体RNG ,Feeds输出至SHA 引起的速度为 12Mb/s 2 个增强的硬体RNG ,Feeds输出至SHA 引起的速度为 12Mb/s 巴塞隆纳新特性解析:堆叠操作与乱序执行 起源 Intel最早的Pentium M处理器引入了一项名为“dedicated stack manager”(专注堆叠管理器)的新特性,正如其名字所暗示的一样,专注堆叠管理器专门处理所有的X86堆叠操作(例如push, pop, call, return等)。它将这些伐数据集中处理而无需其他执行单元参与,这尤其简化了CPU整数执行单元的工作,加快了整数执行单元的处理速度。 技术 AMD在Barcelona中也引入了类似的技术,AMD称之为Sideband Stack Optimizer(边带堆叠最佳化器)。有了边带堆叠最佳化器,处理器中的伐指令不再需要经过3路编码,也不再由整数执行单元处理,这加快了堆叠的处理速度,也同时加快了整数执行单元的处理速度。 在Intel Core微构架中一个重要改进是OOOE乱序执行:当装载指令伫列发生等待时,处理器可以将伫列后方处于等待的指令优先装载并执行,而不是一直等待到堵塞结束。平均而言,约30%的指令会发生一定时间的堵塞,这一乱序执行模式的引入,使新构架CPU性能有了明显的提高。AMD的K8构架并不支持OOOE乱序执行指令,所以即使K8构架有优秀的内置记忆体控制器,也依然被对手的Core构架击败。正视这一技术上的落后,AMD在K8L构架的首款晶片Barcelona上及时改进为OOOE技术,这一改进必将为K8L构架的性能带来极大的提高。 Barcelona将可以乱序执行指令,同样也可以在前一指令尚未处理完成时,装载并用空载单元处理下一指令,即使这两条指令需要读取不同的记忆体地址。Barcelona拥有3个地址生成单元,可以完成3个暂存指令每周期,而Core构架每周期只能执行1次-K8L构架的暂存速度要比Core构架强大3倍。 K8L构架中加入了新的SSE4指令扩展:SSEEXTRQ/INSERTQ指令和MOVNTSD/MOVNTSS指令。前者可以将多条指令合并为一条指令执行,后者用来计算流量暂存指令。Intel也会将在稍候发布的Penryn处理器中加入。