推测执行

推测执行(亦作预测执行投机性执行,英语:Speculative execution)是优化技术的一类,采用这个技术的计算机系统会根据现有信息,利用空转时间提前执行一些将来可能用得上,也可能用不上的指令。如果指令执行完成后发现用不上,系统会抛弃计算结果,并回退执行期间造成的副作用(如缓存)。

推测执行的目标是在处理器系统资源过剩的情况下并行处理其他任务,实际上电脑处理器在工作中,闲置性能的这种情况还不少。因此为了充分运用效率,推测执行无处不在。流水处理器的分支预测、数值预测、[1] 预读取内存和文件、以及数据库系统乐观并发控制等机能中都采用到了推测执行。[2][3]最终可以达到提高整体性能的目的。

举例

假设某程序的结构如下:

  • 从网络上下载一个数据A,耗时30秒。
  • 如果下载A成功,则直接给出A的答案。
  • 如果下载A失败,则计算30秒的算数B,并给出这个答案。

如果没有推测执行功能,那么当A下载后发现失败,那么就要再花30秒做算术B,总共耗时1分钟。但是,由于下载过程中CPU是空转,CPU可以认识到反正闲着也是闲着,不如在下载A的同时将B算出。这样如果将来需要到B,就节省了30秒的时间。就算不需要,丢弃B即可,仅增加些许功耗之外,也没有什么坏处。

参见

参考文献

  1. ^ "A Survey of Value Prediction Techniques for Leveraging Value Locality页面存档备份,存于互联网档案馆)", S. Mittal, Concurrency and Computation, 2017
  2. ^ Lazy and Speculative Execution页面存档备份,存于互联网档案馆Butler Lampson Microsoft Research OPODIS, Bordeaux, France 12 December 2006
  3. ^ International Business Machines Corporation. Research Division; Prabhakar Raghavan; Hadas Schachnai; Mira Yaniv. Dynamic schemes for speculative execution of code. IBM. 1998 [18 January 2011]. (原始内容存档于2020-11-27).