Smile Engineering Blog

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

MIPSとMCPS

ソフトウェアの要件として、性能をMCPSでオーダーされたケースがありました。

f:id:jspnet:20191015234008p:plain:left 前記事の「MIPSとMCPS(?)、100MIPSは100MHzで動くか?」では、 ソフトウェアのベンチマークとして、MIPS【Million Instructions Per Second 】と、MCPS【Million Cycles Per Second 】について書きましたが、MCPSというキーワードがMIPSほど浸透してないのではないか?という個人的な見解も含めた内容でした。 ケースバイケースでMIPSとMCPSを使い分けていましたが、組込みの分野で求められるソフトウェアの処理量(演算量)の要求としては、事実上MIPSではなくMCPSを意味する場合が多く、MCPSも市民権を得たのではないでしょうか。

MIPS計算

そのソフトウェアが何命令か、Million Instructions Per Second なので1秒間に何百万命令か?ということですが、デジタル信号処理のソフトウェアを考えたとき、MIPS計算は次の式になります。この時のフレームサイズとはサンプル数です。

MIPS = 命令数 × サンプリング周波数 / フレームサイズ × 10^{-6}

MCPS計算

命令数では、1命令に何サイクルかかるかによって意味が変わります。また、SIMDVLIWのように、並列処理により信号処理が高速に行われる時代で、命令の単位で表現するには少し無理があると感じます。サイクル数の方がより現実的な指標といえるでしょう。

MCPS = サイクル数 × サンプリング周波数 / フレームサイズ × 10^{-6}

特にデジタル信号処理の分野では、フレームサイズ単位の処理を行うのに、ソフトウェアの処理量(演算量)がどれくらいかかるのか? が重要になります。 分かりやすくいうと、そのソフトウェアが動作するために必要なCPUのスペックを示す指標であり、言い換えると、動作クロックが○○MHzのCPUでは、単位時間(フレームサイズ)で実装できるソフトウェアは〇〇サイクル以内という指標になります (MCPSはこちら)。

MCPS測定

具体的にはサイクル数を測定することになります。高性能なシミュレータならば、ある程度の信頼性のあるサイクル数の取得が可能ですが、メモリのレイテンシー等を考慮すると、正確には実環境の測定になります(シミュレータの算出値が正確であると証明するよりも、実際のハードウェアで測定した方が説得力があります)。

サイクル数測定

例えば、評価ボード等のハードウェア環境でサイクル測定を行うとき、一般的にはCPUの動作クロックでカウントされているレジスタなどをリードする方法があります。

ARM DWT Cycle Count Register

有名なところで、ARMのCortex M4やM7のシリーズでは、DWT (Data Watchpoint and Trace) というサイクル数をカウントするレジスタを備えています。

Documentation – Arm Developer

// 初期化
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
DWT->CYCCNT = 0;
// サイクル数取得 開始
uint32_t cycle1 = DWT->CYCCNT;

// 測定対象 //////////

// サイクル数取得 終了
uint32_t cycle2 = DWT->CYCCNT;


MIPSについてはこちら
前編(信号処理とMIPS - Smile Engineering Blog
後編(信号処理とMIPS・後編 - Smile Engineering Blog