Intel i860

テクノロジー



Intel i860, by Wikipedia https://ja.wikipedia.org/wiki?curid=336241 / CC BY SA 3.0

#インテルのマイクロプロセッサ
Intel i860

Intel i860(または80860)はインテルのRISCマイクロプロセッサであり、1989年にリリースされた。i860(とi960)は、インテルにとって1980年代のi432以来の完全に新しいハイエンドISAについての試みであった。i860は鳴り物入りで登場し、多くの人が設計が優れていると考えていたi960のリリースを覆い隠したほどだったが、i960が組み込みシステムに活路を見出したのに対して、i860は商業的には全く成功せず、プロジェクトは1990年代中ごろに終結させられた。

アンドルー・グローヴはi860の市場での失敗の原因はインテルにあるとして、次のように述べている。

i860は当時ではユニークだったいくつかの特徴を備えている。特にVLIWアーキテクチャと高速浮動小数点数演算が挙げられる。ひとつの32ビットALUとひとつの64ビットFPUを備えており、FPUは3つの部分(加算器、乗算器、グラフィックスプロセッサ)から成っている。ALUと乗算器、加算器に対してそれぞれ命令パイプラインを備えていて、最大3命令を1クロックサイクルで実行することができる。

バスは64ビットかそれ以上であった。キャッシュを結ぶ内部メモリバスは128ビット幅である。CPUもFPUも32本の32ビットレジスタを持ち(うち1つは必ず0を返すゼロレジスタ)、それをFPUは16本の64ビットレジスタとして使った。ALUに対する命令は一度にふたつフェッチして外部バスをフルに使っている。このため、IEEEとインテルはこのデザインを「i860 64ビット マイクロプロセッサ」と称した。

i860の命令は8ビットから128ビットまでのデータサイズを扱うことができる。

グラフィックスユニットをマイクロプロセッサチップに内蔵するのは当時としては珍しかった。これは基本的にはFPUレジスタを8本の128ビットレジスタとして使った64ビット整数演算ユニットである。様々なSIMD的な命令と基本的な64ビット整数演算機能を持っていた。このi860での経験が後のPentiumプロセッサのMMX機能に影響を与えた。

i860の非常にユニークな機能のひとつとして、各機能ユニットのパイプラインに対してプログラムからアクセス可能であったことが挙げられる。そのため、コンパイラが注意深く命令を並べてパイプラインが満たされた状態にする必要があった。一般的なアーキテクチャではCPU上のスケジューラがその役割を担うが、初期のRISC設計ではシステムの複雑さが用途を限定してしまう。i860はこれを丸ごとチップからコンパイラへ移してしまった。これによりコアが単純になり、他の機能をチップに組み込むことができるようになるため、性能向上につながる。結果としてi860はグラフィックスと浮動小数点については高速に実行できたが、一般的な用途では満足できる性能を出すようなプログラムを書くのが困難だった(後述)。

紙上の性能はシングルチップとしては非常に印象的なものだったが、実際の性能は全く違っていた。何が問題なのか当時は不明だったが、実行時のコードの流れを予測することが難しかったためと思われる。つまり、コンパイル時に命令を正しく並べることが非常に困難だったのである。例えば、ふたつの数値の加算命令はその数値がキャッシュ上になければ非常に時間がかかる。しかし、プログラマにはその数値がキャッシュにあるかどうかは分からないのである。もし予想が外れれば、データを待つためにパイプラインが停止する。i860のデザインはこういったことをコンパイラが効果的に行うことを前提としていて、それは不可能だったことが実証されている。XP版では理論上単精度でも倍精度でも60から80MFLOPSの性能が見込まれたが、アセンブリ言語で書いたプログラムでもせいぜい40MFLOPSで、コンパイラを使うと10MFLOPSも難しかった。

もうひとつの重大な問題はコンテキストスイッチを高速に行う手段がなかったことである。i860はいくつかのパイプラインを持っていて、割り込みによってそれを壊すので、復帰時に元に戻さなければならなかった。この処理には最低でも62クロックサイクルを要し、最悪の場合2,000クロックサイクルにもなった。これはクロック周波数40 MHzでは2万分の1秒(50μ秒)であり、CPUにとってはとてつもなく長い。このためi860は汎用CPUになれなかったのである。

このチップにはふたつのバージョンがあ…

Comments

Copied title and URL