adi sharc c/C++ 语言指令优化

流水线依赖条件

1.代码无法使用内联函数调用

2.迭代之间有依赖关系,如N+1的操作依赖N中的操作

3.不能确定输入核输出缓冲区指针不会指向同一数组

4.处理器外部内存不支持SIMD 访问

5.代码包含 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

#pragma FX_CONTRACT {ON|OFF}

当开启时,中间结果没有存储回命名变量,编译器会将中间结果保持在比ISO/IEC C 报告18037要求的更高精度,能够生成更高效的代码

#pragma inline

#pragma never_inline

#pragma always_inline

#pragma core

指定代码在那个核

#pragma compatible _pm_dm_params

将pm 和dm 限定的指针视为赋值兼容

#pragma section/#pragma default_section

指定变量在参数哪个段

下面函数默认是用40bit 精度进行计算的

内存 定义

#pragma generate_exceptions_tables

使用 #pragma generate_exceptions_tables 的替代方法是使用 -eh(启用异常处理)选项编译 C 文件,对于 C 文件来说,这相当于在每个函数定义之前使用该 pragma。

asm()操作数约束表字母和寄存器对应关系

参考

cces-SharcCompiler-manual.pdf

相关推荐
王老师青少年编程1 天前
信奥赛C++提高组csp-s之并查集(案例实践)1
数据结构·c++·并查集·csp·信奥赛·csp-s·提高组
冰暮流星1 天前
javascript赋值运算符
开发语言·javascript·ecmascript
郑泰科技1 天前
fmm(快速地图匹配)实践:Unknown toolset: vcunk的解决方案
c++·windows·交通物流
刘97531 天前
【第25天】25c#今日小结
java·开发语言·c#
豆沙沙包?1 天前
2026年--Lc330-394. 字符串解码(栈)--java版
java·开发语言
2501_941800881 天前
从微服务限流到系统稳定性的互联网工程语法实践与多语言探索
开发语言·python
清水白石0081 天前
《深度剖析 Pandas GroupBy:底层实现机制与性能瓶颈全景解析》
开发语言·python·numpy
2501_941875281 天前
从资源隔离到多租户安全的互联网工程语法构建与多语言实践分享
java·开发语言
hui函数1 天前
python全栈入门到实战【基础篇 03】入门实操:第一个Python程序 + PyCharm使用 + 输入输出全解析
开发语言·python·pycharm