个人认为CPU和GPU各有自己的适应领域。CPU(Central Processing Unit)计算核心较少,通常是双核、四核、八核,但是拥有大量的共享缓存、预测、乱序执行等优化,可以做逻辑非常复杂的计算任务。这一点就当前的GPU来说,仍然难以做到。会牺牲大量的性能甚至造成大量的能源开销。 ...
分类:
其他好文 时间:
2015-07-31 10:18:34
阅读次数:
121
处理器的乱序和并发执行目前的高级处理器,为了提高内部逻辑元件的利用率以提高运行速度,通常会采用多指令发射、乱序执行等各种措施。现在普遍使用的一些超标量处理器通常能够在一个指令周期内并发执行多条指令。处理器从L1 I-Cache预取了一批指令后,就会分析找出那些互相没有关联可以并发执行的指令,然后送到...
分类:
其他好文 时间:
2015-05-18 20:45:47
阅读次数:
221
一.前言
1.编译器优化介绍:
由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:...
分类:
系统相关 时间:
2015-01-29 16:02:36
阅读次数:
272
看过了很多介绍指令重排序的文章,可惜由于自己硬件和计算机理论知识缺乏,很难理解深层次的奥秘和实现原理。不过也有很多帖子,讲的浅显易懂,使用的例子很形象。大牛就是能用简单的解释和通俗的比喻,给我们讲明白很高深的东西。这里做个摘抄和总结,和大家分享下,希望大家能够对指令重排序有个形象的认识,不至于在并发编程中犯一些简单的错误。如果理解有错误,希望看到的大神指正。 从源码变成可以被机器(或虚拟机)识别的程序,至少要经过编译期和运行期。重排序分为两类:编译期重排序和运行期重排序,分别对应编译时和运行时环境。由于重排...
分类:
编程语言 时间:
2014-10-29 00:18:04
阅读次数:
712
1. GPU在处理能力和存储带宽上比CPU更优势,这是由于GPU芯片更多的面积(也就是更多的晶体管)用于计算和存储,而不是控制(复杂控制单元和缓存)。
2. 指令级并行-->线程级并行-->处理器级并行-->节点级并行
3. 指令级并行办法:超标量,乱序执行,超流水,超长指令字,SIMD,分支预测。超长指令字可以减少访存。
4. 超长流水线会带来效率问题,需要更精准的预测功能和更大规模的缓存.......
分类:
其他好文 时间:
2014-09-23 21:17:47
阅读次数:
472
一.前言1.编译器优化介绍:由 于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一 定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软...
分类:
编程语言 时间:
2014-08-02 15:25:23
阅读次数:
242
##**关于乱序**首先需要明确一个很普遍,但却未必人人都注意到的事实:程序并不总是按照源码中的顺序被执行的,此谓之乱序,乱序产生的原因可能有好几种:1. 编译器出于优化的目的,在编译阶段将源码的顺序进行交换。2. 程序执行期间,指令流水被 cpu 乱序执行。3. cache 的分层及刷新策略使得有...
分类:
编程语言 时间:
2014-07-07 14:46:35
阅读次数:
238
内存屏障是指“由于编译器的优化和缓存的使用,导致对内存的写入操作不能及时的反应出来,也就是说当完成对内存的写入操作之后,读取出来的可能是旧的内容”(摘自《独辟蹊径品内核》)。内存屏障的分类:编译器引起的内存屏障缓存引起的内存屏障乱序执行引起的内存屏障1、编译器引起的内存屏障:我们都知道,从寄存器里面...
分类:
其他好文 时间:
2014-05-12 06:00:23
阅读次数:
283