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

相关推荐
CSDN_RTKLIB19 分钟前
两版本锁抛出异常测试
c++
晨非辰20 分钟前
Linux权限管理速成:umask掩码/file透视/粘滞位防护15分钟精通,掌握权限减法与安全协作模型
linux·运维·服务器·c++·人工智能·后端
IT陈图图1 小时前
构建 Flutter × OpenHarmony 跨端带文本输入对话框示例
开发语言·javascript·flutter
叫我辉哥e16 小时前
### 技术文章大纲:C语言造轮子大赛
c语言·开发语言
guygg887 小时前
NOMA功率分配与64 QAM调制中的SIC的MATLAB仿真
开发语言·matlab
flushmeteor8 小时前
JDK源码-基础类-String
java·开发语言
u0109272718 小时前
C++中的策略模式变体
开发语言·c++·算法
雨季6669 小时前
构建 OpenHarmony 简易文字行数统计器:用字符串分割实现纯文本结构感知
开发语言·前端·javascript·flutter·ui·dart
雨季6669 小时前
Flutter 三端应用实战:OpenHarmony 简易倒序文本查看器开发指南
开发语言·javascript·flutter·ui
进击的小头9 小时前
行为型模式:策略模式的C语言实战指南
c语言·开发语言·策略模式