QPU: 命令,uniforms及びL2キャッシュのサイズと特性

概要

命令,uniforms及びL2キャッシュについて,以下および Table 1.およびTable 2. のことがわかった.

ここで,パフォーマンスカウンタが全QPUコアで共通であるということを, QPU$1$コアの$1$スレッドにおけるカウントが 該当するパフォーマンスカウンタの値になることと定義する.

命令,uniforms及びL2キャッシュのパフォーマンスカウンタについて, 以下のことがわかった.

Table 1. キャッシュのラインサイズ
データの流れ ラインサイズ [B]
メモリ→L2キャッシュ $64$
L2キャッシュ→命令キャッシュ $64$
L2キャッシュ→uniformsキャッシュ $\ge 8$
uniformsキャッシュ→uniforms FIFO $4$

Table 2. パフォーマンスカウンタがインクリメントされるタイミング
パフォーマンスカウンタ インクリメントされるタイミング
命令キャッシュヒット数 QPUが命令を実行するたび.すなわちキャッシュミス時にも カウントアップされる.
命令キャッシュミス数 命令キャッシュがL2キャッシュからフェッチするたび.
uniformsキャッシュヒット数 uniforms FIFOがuniformsキャッシュからフェッチするたび. すなわちキャッシュミス時にもカウントアップされる.
uniformsキャッシュミス数 uniformsキャッシュがL2キャッシュからフェッチするたび.
L2キャッシュヒット数 不明.ただしキャッシュミス時にはカウントアップされない.
L2キャッシュミス数 L2キャッシュがメモリからフェッチするたび.

実験環境

実験環境として Raspberry Pi 2 Model B を使用した. オーバークロックを施していないため,QPUの1コアは $250 / 4 = 62.5$ MHz で動作するとした.

プログラムの流れ

実行するプログラム全体の命令数を$I$とし,これを$3$以上$603$以下の整数として変化させた. プログラム中ではジャンプ命令を用いておらず, $I$ 個の命令を実行するとプログラムの実行は停止する. プログラムは$10$回実行し,平均値をパフォーマンスカウンタの測定値とした.

結果

パフォーマンスカウンタにより測定した 命令キャッシュ,uniformsキャッシュ,L2キャッシュのヒット数をそれぞれ $H_{inst}$,$H_{unif}$,$H_{L2}$ とし, 命令キャッシュ,uniformsキャッシュ,L2キャッシュのミス数をそれぞれ $M_{inst}$,$M_{unif}$,$M_{L2}$ とする.

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

考察

$n$をuniformsキャッシュのラインサイズ[B]とする. ただし $2 \le n \le 16$ と仮定する.

$H_{inst}$と$I$が一致したことより,以下のことがわかる.

$M_{inst}$と$\ceil{I / 8}$すなわち$\ceil{H_{inst} / 8}$が一致したことより, 以下のことがわかる.

プログラム中でuniform_readレジスタを読まなかったにも関わらず $H_{unif}$が非$0$であったことより,以下のことがわかる.

上記キャッシュを以下「uniforms FIFO」と記す.

$H_{unif}$が$1$または$2$, つまりuniformsストリームがuniforms FIFOに $4$または$8$バイト ($1$または$2$要素) キャッシュされたことと, $M_{unif}$が$1$であったことより,以下のことがわかる.

$M_{unif}$と$\ceil{H_{unif} / n}$が一致したことより,以下のことがわかる.

$H_{L2}$ が$0$であったにも関わらず $M_{L2}$ が非$0$であったことから,以下のことがわかる.

$M_{L2}$ が $\ceil{H_{inst} / 8} + 1$ と一致したが, これは $M_{L2}$ が $\ceil{H_{inst} / 8} + \ceil{H_{unif} / n}$と 一致したと考えられる. このことから,以下のことがわかる.

Copyright notice

© 2016,2018 Yukimasa Sugizaki. All rights reserved.

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