この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の8日目の記事です。
Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。。(弱音)
今日はRISC-Vから少し離れて、CPUの性能を測定するための一般的な性能指標、ベンチマークについていくつか紹介したいと思う。
- 1. そもそもマイクロプロセッサの性能を測定する基準とは
- 2. 一般的に用いられているベンチマークプログラムとは何なのか
- 4. RISC-Vの各種ハードウェア実装では、Coremarkスコアはどのくらいだ?
- 5. 終わりに
1. そもそもマイクロプロセッサの性能を測定する基準とは
まず、単純なカタログスペックでCPUを比較することを考えると、例えば「動作周波数」「キャッシュサイズ」「メモリバンド幅」「命令リピートレート」などのパラメータがあるだろう。
しかしそれだけではCPUの性能を把握するには十分ではない。いくつかの「一般的な」ベンチマークプログラムを走らせ、実際のアプリケーションにてどの程度の性能が得られるか、測定してみる必要があるだろう。 プログラムを流して性能を測定する場合、プログラムの特徴が把握されてしまえば、そのプログラムに最適化することで「ベンチマークプログラムのみ高速」なCPUとなってしまう。 これを(ある程度)防ぐため、ベンチマークプログラムは通常いくつかの異なる種類の処理を行わせているか、「ベンチマークセット」として、異なるプラグラムセットを動作させ、各々の結果を見て複合的に判断することが多い。
2. 一般的に用いられているベンチマークプログラムとは何なのか
では、一般的に、どのようなベンチマークプログラムが用いられているのだろうか?こういうことを調べるためには、有名どころ書籍を読んでみるのが一番だ。
- Computer Architecture: Quantitative Approach
- 作者: David A. Patterson
- 出版社/メーカー: Morgan Kaufmann
- 発売日: 2011/09/30
- メディア: ペーパーバック
- 購入: 1人 クリック: 4回
- この商品を含むブログ (2件) を見る
通称ヘネパタ本。コンピュータアーキテクチャを専攻する研究室ではまずこれを読まされることが多い。
- Superscalar Microprocessor Design
Superscalar Microprocessors Design (Prentice Hall Series in Innovative Technology)
- 作者: William M. Johnson
- 出版社/メーカー: Prentice Hall
- 発売日: 1990/12/01
- メディア: ペーパーバック
- この商品を含むブログを見る
通称は良く知らないが、スーパスカラプロセッサについて調査するときは大体この本を参照することが多い。
- Modern Processor Design: Fundamentals of Supersacalar Processor
Modern Processor Design: Fundamentals of Superscalar Processors
- 作者: John Paul Shen,Mikko H. Lipasti
- 出版社/メーカー: Waveland Press, Inc.
- 発売日: 2013/12/17
- メディア: Kindle版
- この商品を含むブログを見る
あまりモダンな内容では無いが基礎となる部分はしっかり解説してある。ただし内容が古い。
それぞれ、どのようなベンチマークプログラムが、性能測定に利用されているのだろうか?
SPEC Benchmarks
おそらく、ベンチマークプログラムの最も有名なもの。ただし有料。SPEC 2006では以下のようなプログラムがベンチマークセットとして登録されている。整数系のベンチマークセットであるSPECINT, 浮動小数点系のベンチマークであるSPECFPが存在している。以下の画像はComputer Architecture: Quantitative Approach P.39より抜粋。
なお、同書には、サーバ向けベンチマークとして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のベンチマークプログラムが存在する。組み込み向けのマイクロプロセッサについては、こちらのベンチマークセットを使うことが多い。
EEMBCは様々な用途のベンチマークセットを公開しており、主要なところで言うと(私が大好きな)Coremark, Coremark-Pro, Floating-Point Benchmark, Automotive Benchmarkなど、さらにはAndEBenchなどというAndroid向け?のベンチマークまで公開されている。
ちなみに、Coremark, Coremark-Proは無料だが、FPMarkやAutoBenchなどは有料だ。ただし、AndEBenchは無料のようなので、Androidのスマートフォンをお持ちの方は、試してみては如何だろうか?
Coremark
最後にEEMBCの中で最も有名なベンチマークプログラム、Coremarkについて紹介する。
その名の通り、CPUコアのベンチマーキングのために開発されたプログラムで、ベンチマークプログラムとしては1つのバイナリで提供されているが、実際には複数のプログラム(関数)によって構成されており、スタートポイントからストップポイントまでの性能を測定する。
ちなみに、殆ど多くの商用プロセッサでは、このCoremarkスコアが公開されており、CPUの性能を測定するための基準となっている。
このCoremarkを参照する場合、大きく分けて2つの基準がある。
- 周波数まで考慮した実時間性能を測定したもの "Coremarkスコア"
- 1サイクルあたりの命令実行性能を測定したもの "Coremark/MHzスコア"
つまりいくらパイプラインの効率が悪くても、動作周波数が高ければCoremarkスコアは伸びやすくなるし、一方で周波数を考慮しない、Coremark/MHzのスコアは悪くなる。
また、組み込み向けのCPUではあまり周波数が高くなくても、命令実行効率が良ければ良い場合もある。この場合、Coremark/MHzの指標の方が大事になる。
4. RISC-Vの各種ハードウェア実装では、Coremarkスコアはどのくらいだ?
既に前の日記でまとめている。
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のスコア一覧で確かめてみよう。
一昔前のデスクトップPCのCPUコアの名前が並んでいる。また、マイコンで言うならば、ルネサス社のRXマイコンが同程度の効率を持っている。BOOMの最高性能のものと、RXマイコンが同程度の性能効率ということは、RXマイコンはかなり効率的であると考えることが出来るのだろうか?
こんな感じで、CPUコアの性能比較をするのも、なかなか楽しいので、自作CPUを作られる方は、是非自分のCPUのCoremarkスコアを公表して欲しい。
5. 終わりに
CPUコアを設計、評価するにあたり、一般的なベンチマークプログラムについて取り上げてみた。
また、これはあくまで筆者の個人的な経験とか、インターネット上での検索結果とか、さまざまな書籍を調査した結果ではあるが、誤りが含まれている可能性もあるので、「間違っている」とか「もっといろいろあるぞ!」という方のツッコミも大歓迎です。