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

相关推荐
Dimpels2 分钟前
CANN ops-nn 算子解读:AIGC 批量生成中的 Batch 处理与并行算子
开发语言·aigc·batch
石去皿7 分钟前
【嵌入式就业6】计算机组成原理与操作系统核心机制:夯实底层基础
c++·面试·嵌入式
王老师青少年编程8 分钟前
2024年信奥赛C++提高组csp-s初赛真题及答案解析(完善程序第1题)
c++·题解·真题·初赛·信奥赛·csp-s·提高组
blueSatchel12 分钟前
U-Boot载入到DDR过程的代码分析
linux·开发语言·u-boot
无小道20 分钟前
QT——QFIie和QFileInfo文件类
开发语言·qt·命令模式
踢足球092940 分钟前
寒假打卡:2026-2-7
java·开发语言·javascript
一只小小的芙厨43 分钟前
AT_tkppc3_d 巨大チェスボード 题解
c++·题解
我在人间贩卖青春1 小时前
C++之继承与派生类的关系
c++·向上造型·向下造型
Trouvaille ~1 小时前
【Linux】应用层协议设计实战(二):Jsoncpp序列化与完整实现
linux·运维·服务器·网络·c++·json·应用层
EmbedLinX1 小时前
嵌入式之协议解析
linux·网络·c++·笔记·学习