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

相关推荐
aramae2 小时前
模拟实现strcmp()(C语言)
c语言·开发语言·后端
泡海椒3 小时前
PDF 表格样式优化:jquick-pdf 边框、圆角、背景色
java·开发语言·pdf
Beyond_System|系统之外4 小时前
【学编程】Python基础编程题100道(21-60)
开发语言·python·算法
景熙55234 小时前
15.Java 8 Stream 流入门到实战
java·开发语言·数据结构
汉克老师5 小时前
GESP2026年9月认证C++六级( 第三部分编程题(1、数组划分))精讲
c++·gesp·小学生·学c++编程
千里码aicood5 小时前
基于PLC与机器视觉的智能分拣控制系统设计
c++·自动化·plc
漂流瓶jz6 小时前
UVA-1442 洞穴 题解答案代码 算法竞赛入门经典第二版
c++·算法·题解·aoapc·算法竞赛入门经典·uva
朽棘不雕6 小时前
进一步了解模板
c++
Bruce_Liuxiaowei7 小时前
Python 实例赋值遮蔽类属性:一个从不报错的静默陷阱
开发语言·python·语法糖
aramae8 小时前
MySQL内置函数(7)
开发语言·笔记·后端·mysql·其他