FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Zynq Cortex-A9 ARMでお手軽にサイクル計測する手法を調査する(1)

f:id:msyksphinz:20160601001536p:plain

Zynq FPGAにはARMプロセッサが搭載されているため、もちろんタイマなどのレジスタ群も用意されている。 なかでも、性能評価屋さんが非常によく使うのが、サイクルカウンタだ。サイクルカウンタは現在までのサイクル数を計測し、レジスタに格納している。 これは性能計測をするのに非常に良く使われるレジスタだ。

ARMアーキテクチャにも、PMCCNTRというサイクルカウンタレジスタが定義されていた。

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0388fj/CIHJEEFA.html

このレジスタを使って性能評価環境を作ってみたいのだが、どのように実装すれば良いのだろうか。

コプロセッサレジスタを扱うための命令MRC, MCR

MRC命令はコプロセッサから汎用レジスタへの転送命令だ。Move to Register from Coprocessor の略かな?

op1{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}
op2{cond} coproc, #opcode3, Rt, Rt2, CRm

一方、MCR命令は汎用レジスタからコプロセッサへの転送命令だ。こちらは Move to Coprocessor from Register の略なんだろうか。

op1{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}
op2{cond} coproc, #opcode3, Rt, Rt2, CRm

これらの命令を使ったサイクルカウンタの使用方法が、以下のブログに載っていた。

KMC Staff Blog:Cortex-A9のサイクルカウンタを利用した簡単な実行時間の計測方法

asm volatile("mrc    p15, 0, %0, c9, c13, 0" : "=r" (x));

CP15 c9レジスタがサイクルカウンタらしい。

ARM Information Center

f:id:msyksphinz:20160901223257p:plain

これを使ってZynq ZedBoardのPS/PLの基本プログラムを使ってサイクル数を計測してみよう。

関連記事

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com