先来看一段很简单的代码,对于iinrange(10000):x[i]=x[i]+10看到这段代码,肯定有小伙伴会有疑惑。说说这么简单的代码我该如何优化???不急,我慢慢分析:首先我们要意识到这个循环循环了10000次。那么提速的关键之一就是减少循环次数,因为每次循环结束后,本质上都是对一条分支指令的判断,来判断循环是否结束。如果是则跳出循环执行下一个代码块,否则继续循环。我们可以充分利用cpu内部的寄存器。在程序执行之前,编译器会自动为我们的加法指令分配不同的寄存器,避免指令流水线中的数据冲突,这样循环中的多通道并行也减少了时间开销。所以,我们优化后的程序如下:foriinrange(0,10000,5):x[i]=x[i]+10x[i+1]=x[i+1]+10x[i+2]=x[i+2]+10x[i+3]=x[i+3]+10x[i+4]=x[i+4]+10经过测试,优化后的程序耗时为69ms,与未优化程序的81毫秒相比。被leetcode超时困扰的小伙伴们,这样的小技巧或许能帮到你!如果你对这些优化感兴趣,可以参考计算机体系结构的相关内容进行学习。
