dcbt (Data Cache Block Touch) 指令
用途
允许程序在该程序实际需要高速缓存块访存之前请求该高速缓存块访存。
注: POWER5™ 和更高版本的体系结构支持 dcbt 指令。
语法
| 位数 | VALUE |
|---|---|
| 0-5 | 31 |
| 6-10 | TH |
| 11-15 | RA |
| 16-20 | 经常预算 |
| 21-30 | 278 |
| 31 | / |
描述
布特 指令可以通过预测来自寻址字节的负载来提高性能。 在程序需要块之前,包含由有效地址 (EA) 寻址的字节的块将被访存到数据高速缓存中。 该程序稍后可以从块执行装入,并且可能不会迂到由于将块访存到高速缓存而导致的额外延迟。 执行 布特 指令时不会调用系统错误处理程序。
如果通用寄存器 (GPR) RA 不为 0 ,那么有效地址 (EA) 是 GPR RA 的内容与 GPR 经常预算的内容的总和。 否则, EA 将是 GPR 经常预算的内容。
使用 布特 指示信息时,请考虑以下事项:
- 如果 EA 指定了直接存储段地址,那么该指令将被视为无操作。
- 在保护方面,该访问被视为来自寻址的高速缓存块的负载。 如果保护不允许访问寻址的字节,那么 布特 指令不会执行任何操作。注: 如果程序需要存储到数据高速缓存块,请使用 德克布斯特 (Data Cache Block Touch for Store) 指令。
Touch Hint (TH) 字段用于提供提示,表明程序可能很快将从 EA 和 第 2 个 字段指定的存储位置装入。 对于禁止高速缓存或受保护的位置,将忽略该提示。 第 2 个 字段的编码取决于使用 命令 标志或 .machine pseudo-op 选择的目标体系结构。 POWER5™ 和后续体系结构上 TH 字段的编码如下所示:
| TH 值 | 描述 |
|---|---|
| 0000 | 该程序可能很快将从 EA 寻址的字节装入。 |
| 0001 | 该程序可能很快就会从数据流中装入,该数据流由包含 EA 寻址的字节的块以及无限数量的顺序跟随块组成。 前面按顺序排列的块是由 EA + n * block_size 寻址的字节数 0 其中 n 1 2 0,1,2 等。 |
| 0011 | 该程序可能很快就会从数据流中装入,该数据流包含包含由 EA 寻址的字节和无限数量的顺序前几个块的块。 按顺序排列的前面的块是由 EA-n * block_size 寻址的字节, 0 n = 1 2 等。 |
| 1000 | 布特 指令提供了一个提示,用于描述数据流的某些属性,并且 (可选) 指示程序可能很快将从该流装入。 EA 如 表 1中所述进行解释。 |
| 1010 | 布特 指令提供了一个提示,用于描述数据流的某些属性,或者指示程序可能很快将从已使用 布特 指令描述的数据流中装入,其中 TH [0 1] = 1 或者可能不再从此类数据流装入。 EA 如 表 2中所述进行解释。 |
布特 指令同时充当基本助记符和扩展助记符。 包含三个操作数的 布特 助记符是基本形式,包含两个操作数的 布特 是扩展形式。 在扩展格式中, 第 2 个 字段被省略,并假定为 0b0000。
| 位 | 名称 | 描述 |
|---|---|---|
| 0-56 | EA_TRUNC | 数据流的第一个单位的有效地址的高位 57 位。 |
| 57 | D | 方向
|
| 58 | UG |
|
| 59 | 已预留 | 已预留 |
| 60–63 | 标识 | 要用于此流的流标识。 |
| 位 | 名称 | 描述 |
|---|---|---|
| 0-31 | 已预留 | 已预留 |
| 32 | 执行 |
|
| 33-34 | S | 停止
|
| 35-46 | 已预留 | 已预留 |
| 47-56 | 单元-CNT | 数据流中的单位数。 |
| 57 | T |
|
| 58 | U |
|
| 59 | 已预留 | 已预留 |
| 60-63 | 标识 | 要用于此流的流标识。 |
布特 指令具有一个语法格式,并且不会影响 "条件寄存器 0 字段 0 或" 定点异常 " 寄存器。
参数
| 项 | 描述 |
|---|---|
| RA | 指定用于 EA 计算的源通用寄存器。 |
| 经常预算 | 指定用于 EA 计算的源通用寄存器。 |
| TH | 指示可能需要数据高速缓存块的序列的时间。 |
示例
以下代码对一维向量的内容进行求和:
# Assume that GPR 4 contains the address of the first element
# of the sum.
# Assume 49 elements are to be summed.
# Assume the data cache block size is 32 bytes.
# Assume the elements are word aligned and the address
# are multiples of 4.
dcbt 0,4 # Issue hint to fetch first
# cache block.
addi 5,4,32 # Compute address of second
# cache block.
addi 8,0,6 # Set outer loop count.
addi 7,0,8 # Set inner loop counter.
dcbt 0,5 # Issue hint to fetch second
# cache block.
lwz 3,4,0 # Set sum = element number 1.
bigloop:
addi 8,8,-1 # Decrement outer loop count
# and set CR field 0.
mtspr CTR,7 # Set counter (CTR) for
# inner loop.
addi 5,5,32 # Computer address for next
# touch.
lttlloop:
lwzu 6,4,4 # Fetch element.
add 3,3,6 # Add to sum.
bc 16,0,lttlloop # Decrement CTR and branch
# if result is not equal to 0.
dcbt 0,5 # Issue hint to fetch next
# cache block.
bc 4,3,bigloop # Branch if outer loop CTR is
# not equal to 0.
end # Summation complete.