随笔分类 - Assembly
摘要:如果我们希望在用SIMD来提升程序处理的性能,首先需要做的就是检测程序所运行的平台是否支持相应的SIMD扩展。平台对SIMD扩展分为两部分的支持: CPU对SIMD扩展的支持。SIMD扩展是随着CPU的发展不断改进的,CPU为SIMD扩展提供了硬件上的最基本支持。 操作系统对SIMD扩展的支持。目前
阅读全文
摘要:Single Instruction Multiple Data,简称SIMD。SIMD描述的是微处理器中单条指令能完成对数据的并行处理。SIMD所使用的是特殊的寄存器,一个寄存器上存储有多个数据,在进行SIMD运算时,这些数据会被分别进行处理,以此实现了数据的并行处理。 MMX Intel的第一个
阅读全文
摘要:Pipeline的优点 现代微处理器的pipeline中包含许多阶段,粗略地可以分成fetch、decode、execution、retirement,细分开来可以分成十多甚至二十多个阶段。在处理器处理指令时,可以像流水线一样同时处理位于不同阶段的指令。 下图,假设一个pipeline分为四个阶段,
阅读全文
摘要:在Intel 64与IA-32架构中,存在一类用于跳转到以及跳出程序段的指令:PUSH、POP、CALL、LEAVE与RET。这些指令可以在没有其余指令的干预下隐式地更新栈寄存器(ESP),维护栈内的参数,然后再执行其它相应的操作。在P3处理器之前,这类指令都会被解码成多条μops。 从PM处理器开
阅读全文
摘要:micro-fusion 随着技术的发展,CPU内部指令处理单元(execution unit)以及端口(port)增多,在Pentium 4的时候,发出到Execution Unit的μops的throughput可以高达6(6 μops/clock cycle),这时候,流水线中的瓶颈会出现在r
阅读全文
摘要:Intel微处理器近20年从Pentium发展到Skylake,得益于制作工艺上的巨大发展,处理器的性能得到了非常大的增强,功能模块增多,不过其指令处理pipeline的主干部分算不上有特别大的变化,更多的是为了提高指令的处理速度添加一些模块以及各模块的增强与优化。 本文会以Intel Core微处
阅读全文
摘要:Re-order Buffer(ROB)是处理器中非常重要的一个模块,它位于renamer与scheduler(RS)之间,并且也是execution unit(EU)的出口。ROB作为指令处理的后端,其主要任务是存储指令经由EU处理后得到的结果,并把该结果按照in-order顺序写回到寄存器文件。
阅读全文
摘要:上一篇文章指令处理机制说过现代CPU处理指令的方式大多数都是out-of-order,那么为了更好地利用out-of-order这种处理机制,我们在编写程序的时候有必要规避过长的依赖链。 循环 如下面的一个C++例子,目的是计算长度为100的数组的总和: 上述代码中有100次加法运算,并且每次加法运
阅读全文
摘要:大多数情况下,编写程序都不会使用汇编语言而是使用高级语言,原因大致有以下几点: 尽管汇编语言不是开发的常用语言,不过它也有很多的应用场景,如系统最底层的开发、程序的反汇编调试等。不过本篇文章主要目的是用汇编语言对程序的运行速度进行优化。文中所描述的处理器为intel系列处理器,用到的汇编语言为IA-
阅读全文