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

泛型苔原
• 阅读 2612

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

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

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

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

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

首先我们要意识到,这个循环体循环了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也许能帮助你们侥幸过关!

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

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

点赞
收藏
评论区
推荐文章
不才 不才
3年前
md-loader
mdloader组件文档是如何渲染出来文档用于描述系统功能,而组件文档描述组件的功能,对于前端组件为了直观体现一般会有一个预览模块,而一般组件文档都是采用markdown编写,而md是文本内容且并没有渲染组件代码的能力,那么这是如何做的呢?简单的说就是“自定义结构”,像elementui中对代码的描述为,中间的YOUCODE可以放简单的vue组件代码。这种
Karen110 Karen110
4年前
求求你调试Python代码,不要再用Print了!
相信大部分人学习Python,肯定会用print()这个内置函数,来调试代码的。那么在一个大型的项目中,如果你也是使用print来调试你的Python代码,你就会发现你的终端有多个输出。那么你便不得不去分辨,每一行的输出是哪些代码的运行结果。举个例子,运行下面这个程序。num1  30num2  40 print(num1
添砖java的啾 添砖java的啾
4年前
如何写出"简单"代码?
<sectionid"nice"datatool"mdnice编辑器"datawebsite"https://www.mdnice.com"style"lineheight:1.6;wordbreak:breakword;wordwrap:breakword;textalign:left;fontfamily:OptimaRegul
梦想橡皮擦 梦想橡皮擦
4年前
5. Python 循环的本质就是一段代码懒得重复写
为啥要滚雪球学Python,目的就是当你学会编程一些思想之后,可以让知识的雪球自行滚动起来。五、Python循环的本质就是一段代码懒得重复写程序中的循环概念非常容易理解,一段相似的代码不想重复去写,然后让程序去完成这个操作就是循环。例如从1加到100,如果你依次去加会发现,代码又臭又长,最好的写法当然是让程序通过循环依次去累加。
风花雪月 风花雪月
2年前
简单的GRU实例代码
importnumpyasnp定义sigmoid函数defsigmoid(x):return1/(1np.exp(x))classRNN:definit(self,inputsize,hiddensize,outputsize):设定超参数self.in
Stella981 Stella981
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Stella981 Stella981
3年前
RabbitMQ(3) Spring boot集成RabbitMQ
springboot集成RabbitMQ非常简单,如果只是简单的使用配置非常少,springboot提供了springbootstarteramqp项目对消息各种支持。资源代码:练习用的代码。https://github.com/xiaozhuanfeng?tabrepositories!(https://oscimg.oschina
Wesley13 Wesley13
3年前
Go WEB入门
摘要由于Golang优秀的并发处理,很多公司使用Golang编写微服务。对于Golang来说,只需要短短几行代码就可以实现一个简单的Http服务器。加上Golang的协程,这个服务器可以拥有极高的性能。然而,正是因为代码过于简单,我们才应该去研究他的底层实现,做到会用,也知道为什么这么用。在本文中,会以自顶向下的方式,从如何使用,到如何实现,一点点的分
Easter79 Easter79
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这