FPGA開発日記

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

CPUの性能を測る基準、ベンチマークについて

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の8日目の記事です。

Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。。(弱音)

今日はRISC-Vから少し離れて、CPUの性能を測定するための一般的な性能指標、ベンチマークについていくつか紹介したいと思う。

1. そもそもマイクロプロセッサの性能を測定する基準とは

まず、単純なカタログスペックでCPUを比較することを考えると、例えば「動作周波数」「キャッシュサイズ」「メモリバンド幅」「命令リピートレート」などのパラメータがあるだろう。

しかしそれだけではCPUの性能を把握するには十分ではない。いくつかの「一般的な」ベンチマークプログラムを走らせ、実際のアプリケーションにてどの程度の性能が得られるか、測定してみる必要があるだろう。 プログラムを流して性能を測定する場合、プログラムの特徴が把握されてしまえば、そのプログラムに最適化することで「ベンチマークプログラムのみ高速」なCPUとなってしまう。 これを(ある程度)防ぐため、ベンチマークプログラムは通常いくつかの異なる種類の処理を行わせているか、「ベンチマークセット」として、異なるプラグラムセットを動作させ、各々の結果を見て複合的に判断することが多い。

2. 一般的に用いられているベンチマークプログラムとは何なのか

では、一般的に、どのようなベンチマークプログラムが用いられているのだろうか?こういうことを調べるためには、有名どころ書籍を読んでみるのが一番だ。

  • Computer Architecture: Quantitative Approach

Computer Architecture, Fifth Edition: A Quantitative Approach (The Morgan Kaufmann Series in Computer Architecture and Design)

Computer Architecture, Fifth Edition: A Quantitative Approach (The Morgan Kaufmann Series in Computer Architecture and Design)

通称ヘネパタ本。コンピュータアーキテクチャを専攻する研究室ではまずこれを読まされることが多い。

  • Superscalar Microprocessor Design

Superscalar Microprocessors Design (Prentice Hall Series in Innovative Technology)

Superscalar Microprocessors Design (Prentice Hall Series in Innovative Technology)

通称は良く知らないが、スーパスカラプロセッサについて調査するときは大体この本を参照することが多い。

  • Modern Processor Design: Fundamentals of Supersacalar Processor

Modern Processor Design: Fundamentals of Superscalar Processors

Modern Processor Design: Fundamentals of Superscalar Processors

あまりモダンな内容では無いが基礎となる部分はしっかり解説してある。ただし内容が古い。

それぞれ、どのようなベンチマークプログラムが、性能測定に利用されているのだろうか?

SPEC Benchmarks

SPEC Benchmarks

おそらく、ベンチマークプログラムの最も有名なもの。ただし有料。SPEC 2006では以下のようなプログラムがベンチマークセットとして登録されている。整数系のベンチマークセットであるSPECINT, 浮動小数点系のベンチマークであるSPECFPが存在している。以下の画像はComputer Architecture: Quantitative Approach P.39より抜粋。

f:id:msyksphinz:20161207004914p:plain

なお、同書には、サーバ向けベンチマークとしてSPECSFS、ウェブサーバ向けとしてSPECWeb、さらにトランザクションのベンチマーキングプログラムとしてTPC Benchmarksなども紹介されている。

Mike Johnson本で扱われているベンチマーク

次に、Superscalar Microprocessor Design で扱われているベンチマークは、SPECで扱われているベンチマークとセットが少し異なる。 しかしどちらにしても基本的な考え方は変わっておらず、様々な処理に対応したベンチマークを揃えることで、より公平なベンチマークを取ろうとしている。

Benchmark Name Description
5diff text file comparison
awk pattern scanning and processing
ccom optimizing C compiler
compress file compressing
doduc Monte-Carlo simulation,
espresso logic minimization
gnuchess computer chess program
grep reports occurences of a string in one or more text files
irsim delay simulator for VLIS layouts
latex document preparation system
linpack linear equation solver, double precision floating point
nroff text formatter for a typewritter-like device
simple hyrodynamics code
spice2g6 circuit simulator
troff text formatter for typesetting device
wolf standard-cell placement using simulated annealing
whetstone standard floating point benchmark, double precision floating point
yacc compiles a context-free grammar into LR 1 parser tables

Dhrystone

これも有名なベンチマークセットだ。

dhrystone 2.1 - Download, Browsing & More | Fossies Archive

しかし、dhrystoneは昔から存在したベンチマークで内容も比較的単純であり、各ベンタによりDhrystone対策が進んでしまい、ほぼベンチマークとしての意味を成さなくなってしまっている。 公平なベンチマークプログラムとして用いるのには、少し力不足だ。

EEMBC

もう一つ、上記の書籍ではあまり登場しないのだが、個人的に良くお世話になっているベンチマークセットについて紹介しようと思う。

組み込み向けのベンチマークプログラムの有名所として、EEMBCのベンチマークプログラムが存在する。組み込み向けのマイクロプロセッサについては、こちらのベンチマークセットを使うことが多い。

www.eembc.org

EEMBCは様々な用途のベンチマークセットを公開しており、主要なところで言うと(私が大好きな)Coremark, Coremark-Pro, Floating-Point Benchmark, Automotive Benchmarkなど、さらにはAndEBenchなどというAndroid向け?のベンチマークまで公開されている。

ちなみに、Coremark, Coremark-Proは無料だが、FPMarkやAutoBenchなどは有料だ。ただし、AndEBenchは無料のようなので、Androidスマートフォンをお持ちの方は、試してみては如何だろうか?

www.eembc.org

Coremark

最後にEEMBCの中で最も有名なベンチマークプログラム、Coremarkについて紹介する。

www.eembc.org

その名の通り、CPUコアのベンチマーキングのために開発されたプログラムで、ベンチマークプログラムとしては1つのバイナリで提供されているが、実際には複数のプログラム(関数)によって構成されており、スタートポイントからストップポイントまでの性能を測定する。

ちなみに、殆ど多くの商用プロセッサでは、このCoremarkスコアが公開されており、CPUの性能を測定するための基準となっている。

このCoremarkを参照する場合、大きく分けて2つの基準がある。

  • 周波数まで考慮した実時間性能を測定したもの "Coremarkスコア"
  • 1サイクルあたりの命令実行性能を測定したもの "Coremark/MHzスコア"

つまりいくらパイプラインの効率が悪くても、動作周波数が高ければCoremarkスコアは伸びやすくなるし、一方で周波数を考慮しない、Coremark/MHzのスコアは悪くなる。

また、組み込み向けのCPUではあまり周波数が高くなくても、命令実行効率が良ければ良い場合もある。この場合、Coremark/MHzの指標の方が大事になる。

4. RISC-Vの各種ハードウェア実装では、Coremarkスコアはどのくらいだ?

既に前の日記でまとめている。

msyksphinz.hatenablog.com

Rocket Chip BOOM 2-wide BOOM 4-wide Z-scale
CoreMark[CMK/MHz] 2.32 3.91 4.7 -

ここでは、動作周波数を考えない、CMK/MHzで表示されている。Rocket Chipが一番CMK/MHz値は小さいが、BOOMの4-way版になると4.7程度のスコアとなる。4.7っていうと一般的なプロセッサで言うとどのあたりだろう? 先程のCoremarkのスコア一覧で確かめてみよう。

f:id:msyksphinz:20161207013740p:plain

一昔前のデスクトップPCのCPUコアの名前が並んでいる。また、マイコンで言うならば、ルネサス社のRXマイコンが同程度の効率を持っている。BOOMの最高性能のものと、RXマイコンが同程度の性能効率ということは、RXマイコンはかなり効率的であると考えることが出来るのだろうか?

こんな感じで、CPUコアの性能比較をするのも、なかなか楽しいので、自作CPUを作られる方は、是非自分のCPUのCoremarkスコアを公表して欲しい。

5. 終わりに

CPUコアを設計、評価するにあたり、一般的なベンチマークプログラムについて取り上げてみた。

また、これはあくまで筆者の個人的な経験とか、インターネット上での検索結果とか、さまざまな書籍を調査した結果ではあるが、誤りが含まれている可能性もあるので、「間違っている」とか「もっといろいろあるぞ!」という方のツッコミも大歓迎です。