c++函数重载,模板,指针
越简洁越好。
优化代码一定要考虑到内存,如果程序有大量的内存读写,可能内存读写影响了效率
如果内存读写地址都是连续的,就比较方便。
避免内存拷贝,随之代码会变得较为复杂
循环中尽可能不要打印
查表法,比如三角函数,在低端cpu上,计算三角函数是比较慢的,只要精度不高,我们就可以搞一个哈希表
SIMD指令和OPENMP
SIMD
一个指令可以处理多个数据
上述不同的CPU有不同的指令,可以完成上述的SIMD操作,因此跨平台就比较麻烦,不同的平台都要重新写一遍,所以维护起来比较麻烦
OpenCV实现了一套 Universal intrinsics,可以针对不同的平台采取不同的指令集,下面图片中三链接是老师写的如何使用OpenCV的指令
OpenMP
SIMD在运行的时候都是在一个CPU内核上运行,现在的CPU基本上都是多核的
所以当我们跑起来的时候会发现,其中一个核是100%的,但是其他核却是空闲的,此时CPU的计算能力就没有被利用充分
OpenMD可以任务分配给其他的核。假设我们有一个for循环,循环1000次。执行一下以下操作就可以加速
注意,不是只写一个progma就可以了,我们把任务拆到其他核的时候是有代价的,是需要花时间的。
如果拆开后,任务很简单,仅仅就是一个加法的话,提速不明显,比如两个for循环的时候,我们应该把prama放到外面,这样的任务比较重。
第二个注意,循环体里面不能有相互依赖,在写的时候是有冲突的。因此需要先破除依赖才可以执行
Comments