如何加速一个简单的for循环?

我们先来看一段非常简单的代码

for i in range(10000):
   x[i] = x[i] + 10

看到这代码,肯定有小伙伴会有疑问,这么简单的代码你告诉我竟然可以优化???

file

不急不急,且听我慢慢分析:

首先我们要意识到,这个循环体循环了10000次。

那么加速的其中一个关键就是减少循环次数,因为每次循环结束之后本质上都是一个分支指令的判断,判断这次循环是否结束。如果是则跳出循环,进行下一个代码块的执行,否则继续循环。

我们可以充分利用cpu内的寄存器。

程序在执行前,编译器会自动给我们的加法指令分配各个不同的寄存器,避免指令流水线的数据冲突,这样循环内多路并行也降低了时间开销。
得此,优化后我们的程序如下:

for i in range(0, 10000, 5):
   x[i] = x[i] + 10
x[i+1] = x[i+1] + 10
x[i+2] = x[i+2] + 10
x[i+3] = x[i+3] + 10
x[i+4] = x[i+4] + 10

经过测试,优化后的程序所花时间为69ms,而未经优化的程序时间为81ms。

饱受leetcode超时困扰的小伙伴,这样的小trick也许能帮助你们侥幸过关!

file

如果对这些优化感兴趣的小伙伴,可以参考计算机体系结构相关内容学习。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 阅读经典——《深入理解计算机系统》06 本文,我们要做一件大胆的事情,从零开始实现一个全新的指令集架构,以此深入理...
    金戈大王阅读 21,164评论 9 54
  • 计算机系统漫游 代码从文本到可执行文件的过程(c语言示例):预处理阶段,处理 #inlcude , #defin...
    willdimagine阅读 3,855评论 0 5
  • 指令系统 程序功能:求两个数据之和并输出 运行结果:sum is 25 基本概念: 指令:是计算机硬件能够直接理解...
    我可能是个假开发阅读 5,298评论 0 5
  • 计算机通过执行指令序列来使机器得以工作,所以对于每一系列的计算机都有指定的一组指令集供计算机使用,这组指令...
    未来科技工作室阅读 8,368评论 1 10
  • “何谓孤寂?”“清风、艳日,无笑意。” “可否具体?”“左拥、右抱,无情欲。” “可否再具体?”“不得你。” “...
    浅亦博阅读 297评论 0 2

友情链接更多精彩内容