QPU: TMUキャッシュの特性

概要

TMUキャッシュのラインサイズは$64$[B]であることがわかった. 命令キャッシュ,L2キャッシュおよびuniforms FIFOについては QI3,uniformsキャッシュについては QU16を参照せよ.

また,TMUキャッシュヒット数はQPUのスレッドがTMUによりメモリ読み込みをするたびに, TMUキャッシュミス数はTMUキャッシュがL2キャッシュからフェッチするたびに カウントアップされることがわかった.

実験環境

実験環境として Raspberry Pi 2 Model B を使用した.

プログラムの流れ

nop
nop
nop
nop
mov r0, ELEM_STEP
mov ra0, uniform_read
imul24 r0, element_number
iadd tmu0s, ra0, r0
alu.ldtmu0
mov host_int, 1
alu.program_end
nop
nop
List 1. 実行したプログラム

$ELEM\_STEP$を$[0,72]$の範囲で変化させた.プログラム中ではジャンプ命令を用いておらず, $11$ 個の命令を実行するとプログラムの実行は停止する. プログラムは$10$回実行し,平均値をパフォーマンスカウンタの測定値とした.

結果

パフォーマンスカウンタにより測定した TMUキャッシュのヒット数を $H_{tmu}$ とし, ミス数を $M_{tmu}$ とする. $H_{tmu}$が$16$と一致した. また,$M_{tmu}$ が $\min(\ceil{\frac{((ELEM\_STEP \times 15)\land\lnot 4) + 4}{64}}, 16)$ と一致した.

それぞれの$N$において, すべての実行におけるパフォーマンスカウンタの値が一致した(平均をとるまでもなかった).

考察

今回のプログラムにおいては,TMUによる読み込みは1回しか行なっていない. また,プログラムはQPU$1$コアでしか実行していない. よって,$H_{tmu}$が$16$であったことより,$H_{tmu}$はQPUの各スレッドが TMUによりメモリ読み込みを行うたびにカウントアップされることがわかる. すなわち,tmu{0,1}sを用いたメモリ読み込みを$1$QPU上で行うごとに $H_{tmu}$が$16$だけカウントアップされる.

今回の$ELEM\_STEP$においては,$64$[B]単位のブロックを仮定するとTMUは $\min(\ceil{\frac{((ELEM\_STEP \times 15)\land\lnot 4) + 4}{64}}, 16)$ 個のブロックを読み込む. この値と$M_{tmu}$が一致したため,以下のことがわかる.

Copyright notice

© 2018 Yukimasa Sugizaki. All rights reserved.

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.