CPU設計

**CPU設計**の記事では、コンピュータのプロセッサの設計（デザイン）について解説する。

## 概要
以下のような要素（一例）がある。
# 命令セットアーキテクチャ（ISA）の策定
# データパス設計（演算装置とパイプラインなど。実行ユニットを、流れるデータの観点から見たものが「データパス」である）
# 制御装置の設計（データパスを制御する論理回路）
# レジスタの構成や命令との関係の設計
# メモリの構成（キャッシュ）やメモリインタフェース
# クロック周辺（クロックドライバ、PLL、クロック供給ネットワーク）
# パッドトランシーバ回路
# 論理ゲートセルのライブラリ（論理回路の実装に使う）

高性能だが高価格でよいプロセッサでは、動作周波数、消費電力、チップ面積の目標を達成するため、これら全てを独自に設計する必要が生じる場合もある。

低価格を求められるプロセッサでは、以下のようにして実装負担を減らす場合がある。
* 一部を、IP（知的財産のこと）と呼ばれる既存の設計を購入する形で入手する。
* 制御用論理回路の実装技法（CADツールによる論理合成）を他の部分（データパス、レジスタファイル、クロックなど）の実装にも利用する。

いずれにせよ、適切な取捨選択を行い、必要な性能や仕様（「仕様」には性能外の要素も含まれる）、高い性能対価格比、等を達成した設計を、期日までに完了して製造・生産に向け送り出し、最終製品をそれが必要なタイミングでリリースさせること、が最終目標である。

ブロセッサの制御方式には以下がある（実際には綺麗に二分できるものではない）。
* マイクロプログラム方式
* ワイヤードロジック方式

論理回路をハードウェアとして実装するには、以下のようなテクノロジがある。
* ディスクリート、回路モジュール - 初期（1960年代前半頃迄）のコンピュータは独立した部品か、小さな基板にせいぜい数十程度の部品を集積・モジュール化したもので作られていた
* 汎用ロジックIC
** TTL
** ECL
** CMOS
* LSI - 専用に設計を起こしたもの。マイクロプロセッサ以降ではこれが一般的
** TTL, ECL - TTLやECLによるLSIもあった
** CMOS - 最近では最も一般的
* ASIC - ASICという語は専用設計のLSIを指す総称であるが、マイクロプロセッサ用のチップセットとして周辺機能を集積したものなども多い。それ自身にプロセッサコアを内蔵しているASICもある（システムLSIやSoCなどと言った語もある）
* プログラマブルロジックデバイス（PLD）- ASICとは対照的に、任意のロジックをユーザがプログラムできるLSI。こちらは、プロトタイピングや、ASICを設計するほどの数が出ない製品や、ソフトプロセッサの実装に使われる

一般に以下のような作業（一例）がある。
* コンピュータ・アーキテクチャの設計、あるいは選択
** プログラマから見える命令セットアーキテクチャの設計。これについては既存のものからの選択が「設計」であることもある
** 「命令セットアーキテクチャ」に対して、プログラマには直接は見えない、内部実装のことをマイクロアーキテクチャと言う。これも大枠については「選択」であることもある
* アーキテクチャ研究と性能モデリング
* RTL設計と検証
* 性能上重要な部分の回路設計（キャッシュ、レジスタ、ALU）
* 論理合成または論理ゲートレベルの設計
* タイミング分析（各部分が指定した周波数で動作することの確認）
* 論理ゲートの配置と配線などの物理設計
* RTL、ゲートレベル、トランジスタレベル、物理レベル、それぞれの等価性を検証
* デザインルールチェックとシグナルインテグリティのチェック

多くの複雑な論理回路の設計と同様、論理の検証（設計にバグが含まれていないことの証明）がスケジュール上、重要な位置を占めている。

歴史上、アーキテクチャに関する重要な概念や用語を挙げると、キャッシュメモリ、仮想記憶、パイプライン、スーパースケーラ、CISC、RISC、仮想マシン、エミュレータ、マイクロプログラム方式、スタックなどがある。

## 目標
設計の際に目標とするものとしては、以下のようなものがある。
* 単一のプログラムまたはスレッドの性能を強化する。
* 複数プログラム/スレッドのスループット性能を強化する。
* 同じ性能レベルをより低消費電力で達成する。
* 同じ性能レベルをより低価格で達成する。
* 接続性を強化し、より大規模な並列システムを構築できるようにする。
* 特定市場をターゲットとして、より特化したものにする。
基本的な再設計を無しとしたまま、製造プロセスの更新と単にパターンを縮小（シュリンク）するのみで、これらの目標のいくつかを達成できる場合もある。
* 全てを縮小すると（フォトマスクの縮小）、より小さいダイに同じ個数のトランジスタが実装されることになり、性能が向上し（トランジスタが小さいとスイッチ時間が速くなる）、電力消費が少なくなり（配線が小さくなると寄生容量が小さくなる）、コストが削減される（同じシリコンウェハで、より多くのチップを製造できる）。
* 同じダイサイズで、プロセッサコアを縮小すると、製造コストはほぼ同じになるが、空いた面積に様々なものを集積でき（キャッシュ追加、複数プロセッサコアなど）、性能が向上し、システム全体のコストが削減できる。

## 性能分析とベンチマーク
初期のコンピュータの時代は、加算に何マイクロ秒、乗算に何マイクロ秒、除算に何マイクロ秒、といったように、1命令を発行してから完了するまでの時間を性能の目安としていた。しかし、オペコードやオペランドをメモリから読み書きする時間やその待ち時間なども考慮されるべきであることから、各命令を毎秒何回というようにして評価されるようになり、これはMIPS値に代表される「毎秒何回、何かを実行できる」というタイプの指標の発祥とも言える。続いて、実際のプログラムで実行されている命令の種別の比率に応じて、その速度が合計（ミックス）されるべきだという発想から、何々ミックスという名前の指標が生まれた。最も有名なものはギブソンミックスであろう。現代でも各種試験などで用語問題に出されることがあるようだが、1972年に石田晴久が D. H. Gibson に問い合わせた結果を紹介した記事「ギブソン・ミックスの起源について」中に紹介されている提案者 Jack Clark Gibson の言に「今日，どういう理由か分らないが，すでに時代遅れと思われるこの方法」とある通り、1972年の時点で既に「時代遅れ」であった概念である。そして結局、何らかのプログラムを走らせて測定するのが最も良い指標なのではないかということで、ベンチマークプログラムを利用した計測が行われるようになった。

箴言として「信頼できるベンチマークが欲しいなら、あなたが実際に使いたいアプリケーションソフトウェアそのものを実行することだ」などと言われたり、ジャーゴンファイルのbenchmarkの項には“In the computer industry, there are three kinds of lies: lies, damn lies, and benchmarks.”などとあったりするように、各種のベンチマークプログラムは絶対的にあてにできるものではない。しかし、定量的な比較のためにはベンチマークプログラムしか方法がないのも確かであり、より良い（何を良いとするかという観点は主観的だが）あるいは、各種の目的に応じたベンチマークが提案されている。

以下にだいたい時代順で、主要なベンチマークの名前を挙げ、一部は解説を付ける。詳細は記事のあるものは各記事を参照のこと。

* Whetstone（ウェットストーン、1972年） - 主に浮動小数点数計算を評価する。「湿った石」（wet stone）ではなく地名に由来する
* Dhrystone（ドライストーン、1984年） - 主に整数計算や文字列処理を評価する。ウェットストーンに対して「乾いた石」というダジャレだが、綴りに「h」が入るヒネりはウェットストーンの綴りから持ってきたもの。ベストセラーのミニコンピュータ VAX 11/780（通称「MIPS原器」）におけるこのベンチマークの値を基準とした、いわゆるVAX MIPS（DMIPS）は現代でもしばしば見る
* SPECシリーズ（1988年〜）
* 高性能計算（HPC）とベンチマーク
** HPLとHPCG（HPLもHPCGも、倍精度浮動小数点演算を多用し、行列の乗算により大規模な連立一次方程式を解くコードによるものであり、計算科学（科学・技術・工学の各分野で必要な大規模計算）向けの良いベンチマークとなっている。HPLは密行列（配列）の計算が、HPCGでは粗行列の計算が重要であり、ドンガラ曰く「HPLとHPCGはブックエンドの片方ともう片方」（その他のアプリケーションは、このブックエンドの両端の間に入る、という意））
*** HPL（LINPACK） - LINPACK自体は線型代数数値演算ライブラリで、近年はLAPACKなどに取って代わられているが、HPC分野の標準ベンチマークとして、HPLが使われている（TOP500発足以来集計が続けられている）
*** HPCG（:en:HPCG benchmark） - 共役勾配法（**c**onjugate **g**radient method）の計算によるベンチマーク
** Green500では計算性能を消費電力で割って、効率の値として算出している
** Graph500では、Traversed Edges Per Second（TEPS）という値を評価している
** HPC分野についてはHPCチャレンジベンチマークの記事も参照
* EEMBC (Embedded Microprocessor Benchmark Consortium、:en:EEMBC) の ConsumerMark

他に、以下のような評価の観点（一例）がある。
* 性能対価格比 - 誰だって損な買い物をしたくはない。
* 1秒当たりの命令実行数 - 多くの消費者は既存の多数あるソフトウェアをそのまま実行できるアーキテクチャを選ぶ傾向にある（通常、インテルのIA-32アーキテクチャ）。また、そのような大多数の人々はベンチマークについて知識を持たず、クロック周波数でCPUを選ぶ傾向がある。
* FLOPS - 1秒当たりの浮動小数点演算回数。科学技術計算で重視される。
* 1ワット当たりの性能 - 組込み機器や、PCでもノート型などでは航続時間に直結するわけだから重要である。さらに2010年代にはスーパーコンピュータにおいても、性能向上のための大規模化を妨げる一番の要因が電力供給になりつつあるため重要になりつつある。
* リアルタイムシステムでは、最悪ケースの応答時間の保証が重要である。これはつまり、CPUの割り込みレイテンシが予測可能でなければならず、また、必要なだけの小ささでなければならない。なお、たいていのCPUはOSによって割り込みを禁止できる。つまり、CPUの設計だけからはこの問題については全てを言うことはできない。
* アセンブリ言語でプログラムを書く場合、命令セットが重視される。
* 組込み機器では、大きさや質量が重要な場合もある。
* 近年、環境への影響が小さいこと（製造時、使用時、廃棄時）が重視されつつある（グリーンコンピューティング）。

これらの一部は共存できない。特にとにかく高速に動作することを目標として設計したCPUでは、「1ワット当たりの性能」や「1円当たりの性能」や「応答時間の保証」などは良くない（逆も同様）。

## 市場
（マイクロ）プロセッサの市場はいくつかある。それぞれの市場がプロセッサに求めるものは異なるため、ある市場向けに設計したプロセッサは、他の市場には不適当なことが多い。

### 汎用コンピューティング
マイクロプロセッサの収益の大部分は、汎用コンピューティング向けの販売から得られている（あるいは過去形で、得られていた）。すなわち、ビジネスや家庭で使用するパーソナルコンピュータやサーバである。この市場は、インテルのIA-32アーキテクチャの寡占状態にあり、PowerPCやSPARCがだいぶ引き離されてそれに続いている。毎年、数億個のIA-32アーキテクチャのCPUがこの市場向けに販売されている。その数よりも（数だけで言えば組込み用途も大きい）高付加価値にともなう利幅の大きな市場という点が重要だった。
#### ハイエンドプロセッサの経済
新たなハイエンドCPUの開発には、多大なコストを要する。論理的複雑性（論理設計および論理検証に大人数が必要であり、シミュレーションにも多数のコンピュータを利用する）と高い動作周波数（大規模な回路設計チームを必要とし、最新の製造プロセスを利用する必要がある）によって、この種のチップの設計は高くつくことになる。ハイエンドCPUの設計コストは1億ドルのオーダーになる。ハイエンドCPUの設計には約5年を要するため、他社との競争力を維持するには最低でも2つの開発チームを並行して運営する必要がある。これはPC向けよりも高性能なレンジであったワークステーション向けプロセッサの市場のほうが参考になるかもしれない。出荷数で見れば少ないが、より利幅の大きい市場としてワークステーション向けプロセッサの市場は存在していた（そして、最終的には消滅した）。

例えば、アメリカでのコンピュータ技術者1人を雇用するのにかかるコストは一年で25万ドルと言われている。これには、給料だけでなく、各種手当て、CADツール、コンピュータ、オフィススペースの賃貸料などが含まれる。100人の技術者でCPUを設計し、4年かかるとすると、総コストは1億ドルになる。これは単なる一例である。実際の設計チームは最近では数百人と言われている。

2004年現在、最新技術を使った汎用コンピューティング向けCPUを設計しているのは、4社だけになっている（インテル、AMD、IBM、富士通）。モトローラは、金食い虫と化していた半導体部門をフリースケール・セミコンダクタとしてスピンオフさせた。他社からCPU設計を請け負っている企業として、GLOBALFOUNDRIES、テキサス・インスツルメンツ、TSMC、東芝がある。

### 科学技術計算

金額的にも出荷台数的にも小さい科学技術計算市場は、研究機関や大学が顧客である。かつてはこの市場向けにCPU設計が盛んに行われていたが、より大きな市場向けに設計したCPUを流用した方が効率的であることから、専用CPUの設計はほとんどなされなくなった。ハードウェア設計や研究が続いている分野としては、高速なシステム間接続に関する分野がある。

### 組み込み向け設計

出荷台数ベースで言えば、マイクロプロセッサのほとんどは各種機械（電話機、時計、航空機、自動車、その他）に組み込まれている。いわゆるマイクロコントローラとか**ワンチップマイコン**とも呼ばれる製品群である。汎用プロセッサよりずっと低価格だが、毎年数十億個が販売されている。

汎用プロセッサとの違いは、以下のような点である。
* 低価格が最重視される。
* ファンを装備できない機器が多いため、低消費電力（低発熱量）も重要である。
* システム全体のコストを低減するため、チップ内に周辺機能を組み込む。
* メモリもチップ内に組み込むことが多い。
* 割り込みレイテンシを小さく抑えることが重視される。
* 汎用プロセッサよりも長期間製造（あるいはストック）される（10年程度）。

#### ソフトプロセッサ

## 注


## 関連項目
* CPU
* マイクロプロセッサ
* マイクロアーキテクチャ
* ムーアの法則
* アムダールの法則
* RISC
* CISC

## 参考文献
*