ADI SHARC C/C++ 编译器指令优化
流水线依赖条件
- 代码无法使用内联函数调用。
- 迭代之间有依赖关系,如 N+1 的操作依赖 N 中的操作。
- 不能确定输入和输出缓冲区指针不会指向同一数组。
- 处理器外部内存不支持 SIMD 访问。
- 代码包含 asm 语句:编译器无法知道 asm 语句执行的指令,因此无法自动判断这些指令在 SIMD 模式下是否安全。除非使用
-annotate-loop-instr开关告诉编译器某条 asm 语句在 SIMD 模式下是安全的(具体说明见-asms-safe-in-simd-for-loops)。

优化指令
循环与向量化控制
#pragma SIMD_for- 必须在 for、while 或 do...while 中使用。
- 要求连续迭代中内存不会相互混叠。
- 环形缓存必须是偶数个元素,指针初始值必须对齐。
#pragma all_aligned- 适用于后续循环,所有指针变量双字节对齐。
- 后面可跟一个参数,代表指定 n 次迭代后参数对齐。
#pragma loop_count(min, max, modulo)- 描述循环迭代最小值、最大值,并且是 modulo 的倍数。
#pragma loop_unroll N- 将代码循环展开 N 次。
#pragma no_alias- 下面的循环中加载或者存储操作不会引用彼此相同的内存。
#pragma vector_for- 编译器认为循环所有迭代可以相互并行运行。

性能与空间优化
#pragma optimize_for_speed- 提高代码运行速度高于减少代码大小。
#pragma optimize_for_space- 优先减少代码大小。
#pragma alignment_region(2)/#pragma alignment_region_end- 定义对齐区域。








