
- 加为好友
- 发送私信
- 在线聊天
|
| 发表于:2008-05-13 15:15:472楼 得分:100 |
能够利用编译器优化循环, 最主要的就是要消除循环的数据依赖性, 或者说循环是独立的, 否则编译器很难采用向量化(vectorization)或者软件流水线(software pipelining)的方法提高执行性能 在Intel编译器的手册中, 有专门的章节讨论这个话题 Using High-Level Optimizations (HLO). 一个比较简单的方法来判定循环的独立性, 就是将循环的执行次序颠倒后, 看最后的结果, 是否和原先的相同. 可以通过阅读编译器的优化报告来查看, 是否成功进行了循环优化, 不能进行的原因. 需要使用编译选项"-opt-report -opt-report-phasehlo" 下面给出一个例子: Example 1 void ignore_vec_dep(int *a, int k, int c, int m) { #pragma ivdep for (int i = 0; i < m; i++) a[i] = a[i + k] * c; } 如果没有ivdep pragma, 编译器不会自动将该循环优化, 因为k的值未知, 如果k <0, 那么优化可能会导致非法操作 | | |
修改
删除
举报
引用
回复
| |