QPU: VPM を使用したメモリ読み込みのオーバーヘッド

概要

VPM を使用したメモリ読み込みに関する操作 (以下,単に「操作」とする) を以下のように定義する.

操作1
VPM DMA Load (VDR) basic setup (VPMVCD_RD_SETUP, id=1)
操作2
LD_ADDR のセット
操作3
LD_WAIT の読み込み
操作4
VPM generic block read setup (VPMVCD_RD_SETUP, id=0)
操作5
VPM_READ の読み込み (複数回行う)

特定の操作後の nop の数を変化させ, その他の操作後に十分な数の nop を入れたとき, 操作2と操作4の後の nop の数を変化させたときに命令実行効率の変化が大きかった.

特定の操作後の nop の数を変化させ, その他の操作後に nop を入れなかったとき, 操作2と操作5の後の nop の数を変化させたときに命令実行効率の変化が大きかった.

上記より,各操作の後に十分な数の nop があるときは操作2と操作4の後の nop を増やし, 各操作が隣接しているときは操作2と操作5の後の nop を増やせば全体の命令実行効率が上がることがわかった.

実験環境

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

プログラムの流れ

事前実験として,各操作後に nop を $ndelay$ 個入れ,これを変化させた. VPM で $32$ bit $\times$ $16$ elements $\times$ $4$ vectors $\times$ $1000$ の要素を読み込み, 時間測定誤差を防ぐため,これを $519$ 回繰り返した. これを実験1とする.

まず,特定の操作後の nop の数 $ndelay$ を変化させ, その他の操作後に十分な数の nop を入れた. 実験1の結果より,この数を $40$ とした. この数で十分であることは,$ndelay$ が大きいとき, 命令実行効率がほぼ $1$ になることからもわかる. VPM で $32$ bit $\times$ $16$ elements $\times$ $4$ vectors $\times$ $1000$ の要素を読み込み, 時間測定誤差を防ぐため,これを $180$ 回繰り返した. これを実験2とする.

特定の操作後の nop の数 $ndelay$ を変化させ, その他の操作後には nop を入れなかった. VPM で $32$ bit $\times$ $16$ elements $\times$ $4$ vectors $\times$ $1000$ の要素を読み込み, 時間測定誤差を防ぐため,これを $180$ 回繰り返した. これを実験3とする.

結果

実験1において,$ndelay = 30$ 程度以上で命令実行効率がほぼ1になった. 実験1の命令実行効率をFig. 1に示す.

実験2において, 命令実行効率がほぼ $1$ である, つまり命令実行のストールがほとんどないときを オーバーヘッドがみられない場合とした. 実験2の命令実行効率をFig. 2に示す. 実験2において,

次に,実験3の命令実行効率をFig. 3に示す. 実験3において,

実験1における命令実行効率
Fig. 1: 実験1における命令実行効率

実験2における命令実行効率
Fig. 2: 実験2における命令実行効率

実験3における命令実行効率
Fig. 3: 実験3における命令実行効率

Copyright notice

© 2016 Yukimasa Sugizaki. All rights reserved.

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