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

相关推荐
Chester_199910 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
EXI-小洲11 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员11 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导11 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan11 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子11 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化12 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
m0_6952514912 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
大衛說13 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
学习星球14 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode