ZHCUA98E january 2018 – march 2023 TDA4VM , TDA4VM-Q1
C6000 编译器支持使用原生矢量数据类型,这些类型在 TMS320C6000 优化编译器用户指南 (SPRUI04) 的第 7.4.2 节中进行了说明。
将依赖原生矢量数据类型的源代码移植到 C7000 编译器时,请了解以下差异:
c6x_vec.h
文件。将 c6x_vec.h
和 c6x.h
的 #include 替换为仅 c7x.h
在 C6000 上,必须使用 --vectypes 选项启用类似于 OpenCL™ 的原生矢量数据类型。但是,对于 C7000 编译器,默认情况下会启用所有原生矢量数据类型。因此,无需使用 --vectypes=on。如果现有代码的符号与原生矢量数据类型符号相冲突,则可以使用 --vectypes=off 选项关闭编译器对这些符号的识别。
请注意,每种原生矢量数据类型都有两个名称:一个不带双下划线前缀(例如 int4
),一个带双下划线前缀(例如 __int4
)。原生矢量数据类型的双下划线版本始终被编译器识别。--vectypes=off 选项仅会关闭那些没有双下划线前缀的矢量数据类型。
为了以后实现尽可能出色的兼容性和可移植性,我们建议您重命名使用 OpenCL 和类似 OpenCL 的原生矢量数据类型名称的所有现有 定义类型、结构或等级(不会成为原生矢量数据类型)。这也允许使用较短的原生矢量类型名称,这些名称不使用双下划线前缀。
C7100 和 C7120 的矢量大小为 512 位,因此矢量中的元素数上限大于 C6000。C6000 受到 OpenCL 施加的 16 个元素的限制。C7000 的矢量长度限于表 2-2 中所示的最大元素数。
类型 | 说明 | 最大元素数 |
---|---|---|
charn | 由 n 个 8 位有符号整数值组成的矢量 | 64 |
ucharn | 由 n 个 8 位无符号整数值组成的矢量 | 64 |
shortn | 由 n 个 16 位有符号整数值组成的矢量 | 32 |
ushortn | 由 n 个 16 位无符号整数值组成的矢量 | 32 |
intn | 由 n 个 32 位有符号整数值组成的矢量 | 16 |
uintn | 由 n 个 32 位无符号整数值组成的矢量 | 16 |
longn | 由 n 个 64 位有符号整数值组成的矢量 | 8 |
ulongn | 由 n 个 64 位无符号整数值组成的矢量 | 8 |
floatn | 由 n 个 32 位单精度浮点值组成的矢量 | 16 |
doublen | 由 n 个 64 位双精度浮点值组成的矢量 | 8 |
ccharn | 由 n 对 8 位有符号整数值组成的矢量 | 32 |
cshortn | 由 n 对 16 位有符号整数值组成的矢量 | 16 |
cintn | 由 n 对 32 位有符号整数值组成的矢量 | 8 |
clongn | 由 n 对 64 位有符号整数值组成的矢量 | 4 |
cfloatn | 由 n 对 32 位浮点值组成的矢量 | 8 |
cdoublen | 由 n 对 64 位浮点值组成的矢量 | 4 |
C7000 不支持 C6000 64 位 longlongn、ulonglongn 和 clonglongn 矢量类型。只要包含 c6x_migration.h
文件,编译器就会将这些类型映射为 C7000 支持的相应类型,即分别为 longn、ulongn 和 clongn。