矢量数据寄存器用于存储矢量数据,其位宽为VL(Vector Length),可存储VL/sizeof(T)的数据(T表示数据类型)。在Atlas 350 加速卡版本中, VL = 256B。例如对于矢量数据类型vector_float,该寄存器可存储的元素数量为256B / sizeof(float) = 64个。
以下是以位宽为分类,列举的所有矢量数据寄存器的数据类型:
注意: vector_int4x2_t、vector_fp4x2_e2m1_t、vector_fp4x2_e1m2_t这三个矢量数据类型在内存中的排布需要将两个元素打包为一个字节的存储单元。
[object Object]
掩码寄存器的数据类型为vector_bool,用于矢量计算中选择参与计算的元素,其位宽为VL/8。
[object Object]
非对齐寄存器包括vector_load_align和vector_store_align。这些寄存器作为缓冲区,用于在UB和矢量数据寄存器之间进行连续的非对齐数据搬运,其中非对齐特指数据起始地址未按32字节对齐。在搬运过程中,非对齐数据首先被加载到专用的非对齐寄存器,随后通过相应的搬运接口完成数据的分块读取或写入。
在读非对齐地址前,vector_load_align应该通过asc_loadunalign_pre初始化,然后再使用asc_loadunalign。在写非对齐地址时,应先使用asc_storeunalign,再使用asc_storeunalign_post进行处理。
[object Object]
地址寄存器的数据类型为iter_reg,用于存储地址偏移量。iter_reg通过asc_create_iter_reg初始化,然后在循环之中使用iter_reg存储地址偏移量。iter_reg在每层循环中根据所设置的步长进行自增。
[object Object]