i860(または80860)はインテルのRISCマイクロプロセッサであり、1989年にリリースされた。i860(とi960)は、インテルにとって1980年代のi432以来の完全に新しいハイエンドISAについての試みであった。i860は鳴り物入りで登場し、多くの人が設計が優れていると考えていたi960のリリースを覆い隠したほどだったが、i960が組み込みシステムに活路を見出したのに対して、i860は商業的には全く成功せず、プロジェクトは1990年代中ごろに終結させられた。アンドルー・グローヴはi860の市場での失敗の原因はインテルにあるとして、次のように述べている。我々は同時期に登場した2つの非常に強力なチップを手にしていた。486は主にCISCテクノロジーに基づき、それまでのPCソフトウェアと互換性があった。i860はRISCテクノロジーに基づき、非常に高速だが何とも互換性がなかった。我々はどうすべきかわからなかった。両方を市場に投入し、市場に決めさせようとした。...我々の曖昧な態度のせいで、顧客はインテルが486を押しているのか、i860を押しているのか、いぶかしく思うことになった。外部リンク技術的特性[編集]i860は当時ではユニークだったいくつかの特徴を備えている[2]。ひとつの32ビットALUとひとつの64ビットFPUを備えており、FPUは3つの部分(加算器、乗算器、グラフィックスプロセッサ)から成っている。ALUと乗算器、加算器に対してそれぞれ命令パイプラインを備えていて、最大3命令を1クロックサイクルで実行することができる。バスは64ビットかそれ以上であった。キャッシュを結ぶ内部メモリバスは128ビット幅である。CPUもFPUも32本の32ビットレジスタを持ち(うち1つは必ず0を返すゼロレジスタ)、それをFPUは16本の64ビットレジスタとして使った。ALUに対する命令は一度にふたつフェッチして外部バスをフルに使っている。マイクロプロセッサ」と称した。i860の命令は8ビットから128ビットまでのデータサイズを扱うことができる[4]。グラフィックスユニットをマイクロプロセッサチップに内蔵するのは当時としては珍しかった。これは基本的にはFPUレジスタを8本の128ビットレジスタとして使った64ビット整数演算ユニットである。様々なSIMD的な命令と基本的な64ビット整数演算機能を持っていた。このi860での経験が後のPentiumプロセッサのMMX機能に影響を与えた。i860の非常にユニークな機能のひとつとして、各機能ユニットのパイプラインに対してプログラムからアクセス可能であったことが挙げられる。そのため、コンパイラが注意深く命令を並べてパイプラインが満たされた状態にする必要があった。一般的なアーキテクチャではCPU上のスケジューラがその役割を担うが、初期のRISC設計ではシステムの複雑さが用途を限定してしまう。i860はこれを丸ごとチップからコンパイラへ移してしまった。これによりコアが単純になり、他の機能をチップに組み込むことができるようになるため、性能向上につながる。結果としてi860はグラフィックスと浮動小数点については高速に実行できたが、一般的な用途では満足できる性能を出すようなプログラムを書くのが困難だった(後述)。(問題)[編集]紙上の性能はシングルチップとしては非常に印象的なものだったが、実際の性能は全く違っていた。何が問題なのか当時は不明だったが、実行時のコードの流れを予測することが難しかったためと思われる。コンパイル時に命令を正しく並べることが非常に困難だったのである。ふたつの数値の加算命令はその数値がキャッシュ上になければ非常に時間がかかる。プログラマにはその数値がキャッシュにあるかどうかは分からないのである。予想が外れれば、データを待つためにパイプラインが停止する。i860のデザインはこういったことをコンパイラが効果的に行うことを前提としていて、それは不可能だったことが実証されている。XP版では理論上単精度でも倍精度でも60から80MFLOPS[5]の性能が見込まれたが、アセンブリ言語で書いたプログラムでもせいぜい40MFLOPSで、コンパイラを使うと10MFLOPSも難しかった。ひとつの重大な問題はコンテキストスイッチを高速に行う手段がなかったことである。i860はいくつかのパイプラインを持っていて、割り込みによってそれを壊すので、復帰時に元に戻さなければならなかった。この処理には最低でも62クロックサイクルを要し、最悪の場合2,000クロックサイクルにもなった。MHzでは2万分の1秒(50μ秒)であり、CPUにとってはとてつもなく長い。このためi860は汎用CPUになれなかったのである。