3内存
六角形统一字节可寻址存储器有一个32位的虚拟地址空间。所有地址,无论是标量还是向量操作使用,都通过MMU进行地址转换和保护。
3.1对齐
与在标量处理器上不同的是,一个未对齐的指针(即,一个不是向量大小的倍数的指针)不会导致内存故障或异常。当使用通用VMEM加载或存储时,地址的最小重要位将被忽略。
VMEM(R0) = V1 // Store to R0 & ~(0x3F)
矢量内寻址位被忽略(64B向量长度低6,128B向量长度低7)。通过VMEMU指令,也可以显式地支持未对齐的负载和存储。
V0 = VMEMU(R0) // Load a vector from R0 regardless of alignment
3.2 HVX本地内存: VTCM
HVX还支持一个名为VTCM的本地内存。内存的大小是已定义的实现。该大小可以从V65系统体系结构规范中定义的配置表中发现。VTCM像其他内存一样需要正常的虚拟到物理转换。该内存具有更高的性能和较低的功率。如果可能,这个内存至少应该用于中间向量数据。除了HVX VMEM访问外,正常的六角形内存访问指令也可以访问该内存。
以下条件对VTCM访问无效:
- 使用大于VTCM大小的页面大小。
- 试图执行来自VTCM的指令。这包括投机性的访问权。当HVX保险丝烧断(禁用)时的
- Scalar VTCM访问。
- 加载锁定或存储条件到VTCM。
- 当多个线程处于活动状态时,从VTCM进行的物理加载。
- 在HVX未完全通电或任何VTCM银行处于睡眠状态时访问VTCM。
- VTCM页面和非VTCM页面之间的非对齐访问交叉。
3.3散射和收集
散点和收集指令允许每个元素的随机访问内存。每个元素可以指定应读(收集)或写(分散)的独立地址。HVX收集是一个从非连续地址到对齐连续向量位置的向量副本。
通常,这些指令不会依次执行以下操作。即使是来自相同散点或收集指令的元素的访问也没有顺序。主排序案例正在从收集结果中加载。为了帮助完成此排序,提供了一个散射存储发布指令,在之前的散射和收集完成之前不会执行该指令。从散射存储释放中消耗的负载停止,直到那些之前的散射和收集完成。
以下条件对分散或收集访问无效:
- 分散(写入)或收集(读)区域覆盖一个页面,或者M源(长度-1)为负数。否则将生成一个异常。
- 任何一次访问都不在VTCM范围内。这还包括收集目标地址。否则将生成一个异常。
- 在同一数据包中的收集区域指令和分散指令。
3.4内存类型
HVX内存指令(VMEM或分散/收集)的目标设备类型的内存是非法的。如果这样做,则将引发一个VMEM地址错误异常。在MMU关闭时使用HVX内存指令也是非法的。
注:HVX设计适用于L2缓存、L2TCM或VTCM。对于L2缓存数据,内存应标记为L2-可缓存,而对于位于L2TCM或VTCM中的数据,内存应标记为未缓存。
3.5非时间
VMEM指令可以具有一个可选的非时间属性。这是在具有“:nt”附录的汇编中指定的。非时间指令标记表明微体系结构在指令发出后不再需要数据。高速缓存存储器系统使用这些信息来通知替换和分配决策。
3.6权限
恰好自然对齐的未对齐的VMEMU指令只需要对所访问的行具有MMU权限。硬件禁止生成对未使用部分的访问。
启用字节的条件VMEM存储指令都需要MMU权限。换句话说,在检查权限时不考虑Q寄存器的状态。