Qualcomm Hexagon是否存在向量内存加载存储的C-intrinsics?
Qualcomm Hexagon平台向量加载/存储C-intrinsics解答
首先明确结论:Hexagon平台存在官方提供的向量内存加载、存储对应的C-intrinsics,不需要自行编写汇编实现。
常用加载/存储intrinsics分类
你可以根据自身使用的向量位宽、对齐要求、数据类型选择对应接口,常见类别如下:
- 对齐加载接口:例如用于加载128位对齐向量的
Q6_V64_vload_128B、Q6_V128_vload_128B这类接口,要求访问的内存地址按128字节对齐,执行效率最高 - 非对齐加载接口:如果数据源地址无法保证对齐,可以使用
Q6_V64_vloadu_128B这类带u后缀的非对齐加载接口,兼容性更好但性能略低于对齐加载 - 带偏移的加载接口:部分场景下需要从基地址加固定偏移的位置加载数据,可以用
Q6_V64_vloadio_128B这类带io后缀的接口,不需要额外做地址运算 - 存储接口:和加载逻辑一一对应,同样分对齐存储
Q6_vstore_128B、非对齐存储Q6_vstoreu_128B等不同类别,参数匹配对应向量类型即可
使用注意事项
- 所有Hexagon SIMD intrinsics都需要引入头文件
<hexagon_types.h>、<hexagon_protos.h>才能正常编译 - 编译时需要指定对应Hexagon核心的架构版本参数,比如
-mv65、-mv66,不同架构版本支持的intrinsics集合有差异 - 如果是在HVX(Hexagon Vector eXtensions)场景下使用,加载存储接口还会支持更大的向量位宽(512位、1024位),接口命名规则和上述规则保持一致,仅需调整位宽参数即可
内容的提问来源于stack exchange,提问作者Dario Da
相关产品推荐
相关产品推荐

