初始化 - 2022.1 简体中文

AI 引擎内核编码 最佳实践指南 (UG1079)

Document ID
UG1079
Release Date
2022-05-25
Version
2022.1 简体中文

以下函数可用于将矢量寄存器初始化为未定义状态,全部为 0 且包含来自本地存储器的数据,或者其中部分值是从另一个寄存器设置的,其余部分则保持未定义状态。使用 undef_type() 初始化器进行初始化可确保编译器能够执行最优化,且不会受到值的未定义部分的任何影响。

v8int32 v;
v8int32 uv = undef_v8int32(); //undefined
v8int32 nv = null_v8int32(); //all 0's
v8int32 iv = *(v8int32 *) reals; //re-interpret "reals" as "v8int32" pointer and load value from it
v16int32 sv = xset_w(0, iv); //create a new 512-bit vector with lower 256-bit set with "iv"

在前述示例中,矢量设置内部函数 [T]set_[R] 支持创建矢量,其中仅一部分加以初始化,其余部分则保持未定义状态。此处 [T] 表示要设置的目标矢量寄存器,w 表示 W 寄存器(256 位),x 表示 X 寄存器(512 位),y 表示 Y 寄存器(1024 位)。[R] 表示源值的来源,v 表示 V 寄存器(128 位),w 表示 W 寄存器(256 位),x 表示 X 寄存器(512 位)。请注意,[R] 宽度小于 [T] 宽度。有效的矢量设置内部函数包括:wset_vxset_vxset_wyset_vyset_wyset_x

static 关键字也适用于矢量数据类型。如未初始化,默认值为 0,在 graph 与运行迭代之间,该值保持不变。