一针见血系列[6]: CPU乱序执行是正常,不乱序才是有问题呢!

栏目:一针见血 作者:admin 日期:2018-10-29 评论:0 点击: 1,124 次

现在的CPU一般采用流水线来执行指令。一个指令的执行被分成:取指、译码、访存、执行、写回等若干个阶段。多条指令可以同时存在于流水线中,同时被执行。
指令流水线并不是串行的,并不会因为一个耗时很长的指令在"执行"阶段呆很长时间,而导致后续的指令都卡在"执行"之前的阶段上。
相反,流水线是并行的,多个指令可以同时处于同一个阶段,只要CPU内部相应的处理部件未被占满即可。比如说CPU有一个加法器和一个除法器,那么一条加法指令和一条除法指令就可能同时处于"执行"阶段,而两条加法指令在"执行"阶段就只能串行工作。相比于串行方式,流水线像这样并行的工作,效率是非常高的。
mainmemory变量是从主存中加载的,肯定不如localmemory赋值快,localmemory的赋值操作可是在寄存器中操作的,所以就发生了乱序:
int localmemory = 2;先执行完,然后再执行完int sum = mainmemory +1;

一针见血系列[6]: CPU乱序执行是正常,不乱序才是有问题呢!:等您坐沙发呢!

发表评论