来源: cces-BlackfinCompiler-library-manual
1. 循环缓冲区:重复取某些数,编译器直接创建缓冲区,不必每次去内存某个地址读数——计算地址取数访问总线浪费时间。
2. 分支预测:告诉编译器那种情况更可能发生内核流水线可以更大概率取到需要的判断分支,整体上运行更快。
3. 循环边界预测:告诉编译器loop_count大于4,编译器就不必考虑它等于零的问题,变量边界已知可以减轻编译器思考的复杂度。
4. 内联函数比宏定义更可靠,一样节省调用时入栈出栈操作。
5. 一个指令,在内存的两个BANK中同时取数,数据在同一个bank影响速度。
6. 不要在循环内放太多中间变量。
7. 循环依赖一个任意变化的变量,不如依赖一个自增的i,每次自增1最佳。
8. 内循环要多于外循环。
9. 循环之内别放判断,宁可重复写循环,先判断再循环。
10. 多维数组应该优先改变低维下标。
11. 控制循环次数的变量,应为unsigned int,且不要是全局变量。
12. 乘加统统单独出来,移位会打乱编译,不如直接乘2。
13 指令流水线:某个数增加后存取,应该转化为先存取后增加,尤其是循环中。芯片会同时执行存储和运算。
14. 内核有2个乘加单元,矢量化后可以一个两个乘加,编译器自动判断是否矢量化,也可手动强制矢量化,注意数组内存对齐。
15. 充分利用官方库函数。