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

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

|  |  |  |
| --- | --- | --- |
| 「 | 我々は同時期に登場した2つの非常に強力なチップを手にしていた。486は主にCISCテクノロジーに基づき、それまでのPCソフトウェアと互換性があった。i860はRISCテクノロジーに基づき、非常に高速だが何とも互換性がなかった。我々はどうすべきかわからなかった。だから両方を市場に投入し、市場に決めさせようとした。...我々の曖昧な態度のせいで、顧客はインテルが486を押しているのか、i860を押しているのか、いぶかしく思うことになった。 | 」 |
| —アンドルー・グローヴ | | |

## 技術的特性

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

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

## バージョンと実際の使用例

このチップにはふたつのバージョンがあった。コードネームN10のXRとコードネームN11のXPである。XPには大きなキャッシュ、二次キャッシュ、より高速なバスと、並列計算のためのバススヌーピング機能とキャッシュ・コンシステンシ機能を持っていた。XRは25 MHzか40 MHzであったが、XPはプロセスを縮小したため(1 μm→0.8 μm)40 MHzか50 MHzで動作。どちらも同じ命令セットが動作する。

まず、i860はロスアラモス国立研究所のiPSC/860のようないくつかの大規模マシンで使われた。コンパイラが強化されたためi860の性能もそれなりに強化されたが、当時のi860の性能は他のRISCには及ばなかった。他には、i860XRを28個またはi860XPを14個搭載したアライアント・コンピュータのFX/2800シリーズがある。

インテルはi860をワークステーションのCPUとして使えないか、MIPSアーキテクチャのチップなどと対抗できないか試したことがある。マイクロソフトは内部で設計したi860ベースのワークステーション(コードネームは Dazzle)で後に Windows NT と呼ばれるようになるOSの開発を行っていたが、最終的に NT が実際に動作したのはMIPSと Intel 386 で、その後他のプロセッサにも移植されたが i860 には移植されなかった。NTという名称は、i860XR のコード名が "N-Ten" だったことに由来するとも言われている。

i860をメインCPUとして持つUNIXワークステーションも存在し、沖電気のOKI station 7300と、それをベースにグラフィックスサブシステムに2個のi860を搭載したクボタコンピュータの Titan VISTRA がある。

i860はワークステーション市場でグラフィックスアクセラレータとしても使われた。例えばNeXTDimensionで使われた。このマシンはMachの機能削減版が動作し、完全なPostScriptスタックを実装していた。ただし、PostScript部分が完全に仕上げられることはなく、単に色ピクセルを動かすぐらいしかできなかった。このような環境ではi860はかなりよく動作した。主なプログラムはキャッシュに収まるサイズで、完全に予測通りに動くようにコーディングできたからである。Truevisionは同社のフレームバッファカード Targa と Vista と共に使うことを意図したi860ベースのアクセラレータカードを作り、ピクサーがそれを使って動作するバージョンのRenderManを開発。これは386ホストの4倍の性能を発揮した。他の採用例は、ジオメトリエンジン内に複数個のi860XPを使った SGI RealityEngine がある。SPARCstation330/470などのデスクサイド型のVMEスロットに装備するVX/MVXグラフィックスアクセラレータには40MHzの i860 が搭載され(VXには1個、MVXには4個)、VXは40MIPS/60MFLOPS、MVXは160MIPS/240MFLOPSの性能を持つとされた。このような使用法も徐々に減っていき、多くの汎用CPUがi860の性能に追いついて、インテルもPentiumを主力とするようになった。

Mercury Computer Systems はi860を並列計算機に採用した。ファットツリー型ネットワークで2個から360個の計算ノードを相互接続したもので、各ノードのローカルメモリに他ノードからもアクセスできる。ノード毎に異なるシステムを採用でき、i860の他にPowerPCや SHARC DSP を3個組合わせたノードがある。i860向けにアセンブリ言語で書かれた信号処理ライブラリを提供したため、よい性能が得られた。19インチラック 9U の筐体に360個の計算ノードを詰め込めるため、軍用機上でのレーダー処理などに適していた。

また1990年代前半、ストラタスがi860ベースの無停止コンピュータ XA/R シリーズを開発している。

1990年代後半、インテルはARMベースのXScaleでRISCビジネス全体を置き換えた。また、インテルのXeonシステム用のマザーボードのチップセットとしてi860という名前が再利用されているため混乱を招くこともある。