QPU: DMA読み込みの性能およびwaitの特性

概要

DMA読み込みを,VCDおよびVCMを用いてVPMに読み込むこと, つまりvpm_ld_addrレジスタに読み込むメモリのアドレスを書き込むことと定義する. また,DMA読み込みのwaitを,vpm_ld_waitレジスタを読むことと定義する. DMA読み込みのwaitでストールする命令数を$I_{wait}$とする.

VPMのDMA読み込みの性能は,最大約$690$MB/sだった.

また,DMA読み込みのwaitについて,DMA読み込み発行とwait発行の間の命令数と $I_{wait}$の合計は, 読み込むメモリの縦,横のサイズの組み合わせに関して一定になることがわかった. ただし,この合計値は読み込むメモリのサイズとは関係しないことが予想される.

実験環境

実験環境として Raspberry Pi 2 Model B を使用した. QPUの1コアは $250 / 4 = 62.5$ MHz で動作する.

プログラムの動作

$nrows$,$rowlen$ を $1 \le nrows \le 16$ かつ $1 \le rowlen \le 16$ とし,変化させた. $1$回のDMA読み込みで$nrows \times rowlen \times (32 / 8)$バイトを読み込んだ.

DMA読み込み発行とwait発行の間にcond_add=neverかつ cond_mul=neverALU命令を$ndelay$個入れた. $512$命令分の容量をもつ命令キャッシュを溢れさせないようにするために, $ndelay$は$512$より十分小さい,$0 \le ndelay \le 300$として変化させた..

実行時間測定の誤差を抑えるため, DMA読み込み発行とwait発行は$1234567$回繰り返した.

プログラムは$3$回実行し,中央値を測定値とした.

結果

$nrows = 16$ かつ $rowlen = 16$ のときの DMA読み込みのスループットをFig. 1に示す. 最大で約$690$MB/sの性能が出た.

nrows = 16 かつ rowlen = 16 におけるスループット
Fig. 1: $nrows = 16$ かつ $rowlen = 16$ におけるスループット

$nrows = 1, 2, 4, 8, 16$,$rowlen = 1, 8, 16$ における$ndelay$と, $I_{wait}$の関係をFig. 2Fig. 3およびFig. 4に示す. 多少のズレがあるものの,$ndelay$と$I_{wait}$は傾き$-1$の直線関係にあることがわかる (この表現は最悪なので直したい). つまり,DMA読み込みのwaitについて,DMA読み込み発行とwait発行の間の命令数と $I_{wait}$の合計は,$nrows$と$rowlen$の組み合わせに関して 一定になることがわかる. ここで,例えば$rowlen = 1$かつ$nrows = 16$の場合と $rowlen = 8$かつ$nrows = 2$の場合では読み込むメモリのサイズは同じであるが, $y$切片の値が異なるので, DMA読み込み発行とwait発行の間の命令数と$I_{wait}$の合計は, 読み込むメモリのサイズには関係しないことが予想できる.

rowlen = 1 におけるndelayとIwaitの関係
Fig. 2: $rowlen = 1$ における$ndelay$と$I_{wait}$の関係

rowlen = 8 におけるndelayとIwaitの関係
Fig. 3: $rowlen = 8$ における$ndelay$と$I_{wait}$の関係

rowlen = 16 におけるndelayとIwaitの関係
Fig. 4: $rowlen = 16$ における$ndelay$と$I_{wait}$の関係

Copyright notice

© 2016 Yukimasa Sugizaki. All rights reserved.

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