
コプロセッサとは、メインプロセッサ( CPU )の機能を補完するために使用されるコンピュータプロセッサです。コプロセッサが実行する処理には、浮動小数点演算、グラフィックス、信号処理、文字列処理、暗号化、周辺機器とのI/Oインターフェースなどがあります。コプロセッサは、メインプロセッサから処理負荷の高いタスクをオフロードすることで、システムのパフォーマンスを向上させることができます。コプロセッサを使用することで、コンピュータのラインナップをカスタマイズできるため、追加のパフォーマンスを必要としない顧客は、その分の費用を支払う必要がありません。
コプロセッサは、自律性の度合いが様々です。FPUのように、CPUの命令ストリームに組み込まれたコプロセッサ命令による直接制御に依存するものもあります。一方、非同期動作が可能な独立したプロセッサもありますが、汎用コード向けに最適化されていないか、特定のタスクの高速化に特化した限られた命令セットのため、汎用コードには対応していません。これらのコプロセッサは、ホストプロセッサ(CPU)がコマンドリストを作成するダイレクトメモリアクセス(DMA)によって駆動されるのが一般的です。PlayStation 2のEmotion Engineには、両方の動作モードに対応できる、珍しいDSPのようなSIMDベクトルユニットが搭載されていました。
メインフレームコンピュータのプロセッサ時間を最大限に活用するため、入出力処理はチャネルI/Oと呼ばれる別システムに委任されました。メインフレーム自体は入出力処理を一切必要とせず、入出力操作のパラメータを設定した後、チャネルプロセッサに操作全体を実行するよう指示するだけでした。時間のかかる入出力フォーマットや処理を比較的単純なサブプロセッサに任せることで、システム全体のパフォーマンスが向上しました。
浮動小数点演算用のコプロセッサは、1970年代にデスクトップコンピュータに初めて登場し、1980年代から1990年代初頭にかけて普及しました。初期の8ビットおよび16ビットプロセッサは、ソフトウェアを使用して浮動小数点演算を実行していました。コプロセッサがサポートされている場合、浮動小数点計算ははるかに高速に実行できました。数学コプロセッサは、コンピュータ支援設計(CAD)ソフトウェアや科学技術計算のユーザーにとって人気のある製品でした。AMD 9511、Intel 8231/8232、Weitek FPUなどの一部の浮動小数点演算ユニットは周辺機器として扱われましたが、Intel 8087、Motorola 68881、National 32081などの他の浮動小数点演算ユニットはCPUとより密接に統合されていました。
コプロセッサのもう一つの形態は、Atari 8ビットコンピュータ、TI-99/4A、MSXホームコンピュータなどで使用されていたビデオディスプレイコプロセッサで、「ビデオディスプレイコントローラ」と呼ばれていました。Amigaのカスタムチップセットには、 Copperと呼ばれるユニットに加え、メモリ内のビットマップ操作を高速化するブリッターも搭載されています。
マイクロプロセッサの発展に伴い、浮動小数点演算機能をプロセッサに統合するコストは低下した。また、プロセッサの高速化により、緊密に統合されたコプロセッサの実装も困難になった。現在、デスクトップコンピュータにおいて、独立したパッケージの数学コプロセッサは一般的ではない。しかしながら、特にコンピュータゲームにおけるリアルな3Dグラフィックスへの需要の高まりにより、専用のグラフィックスコプロセッサの需要は増加している。


初代IBM PCには、Intel 8087浮動小数点コプロセッサ(FPUとも呼ばれる)用のソケットが搭載されていました。これは、コンピュータ支援設計(CAD)や数学的な計算を多用するユーザーにとって人気のオプションでした。このアーキテクチャでは、コプロセッサによって浮動小数点演算が約50倍高速化されます。例えば、PCをワープロ用途のみに使用していたユーザーは、テキスト操作のパフォーマンス向上にはつながらない高価なコプロセッサを節約することができました。
8087は8086/8088と密接に統合されており、8088命令ストリームに挿入された浮動小数点マシンコード演算コードに対応していました。8087を搭載していない8088プロセッサではこれらの命令を解釈できなかったため、FPU搭載システムと非搭載システムで別々のプログラムを用意するか、少なくとも実行時にFPUを検出して適切な数学ライブラリ関数を選択する必要がありました。
8086/8088中央処理装置用のもう一つのコプロセッサは、8089入出力コプロセッサでした。これは、メモリから周辺機器へのデータ転送などの入出力操作に8087と同じプログラミング手法を使用し、CPUの負荷を軽減しました。しかし、IBMはIBM PCの設計にこれを採用せず、Intelもこのタイプのコプロセッサの開発を中止しました。
Intel 80386マイクロプロセッサは、オプションの「算術」コプロセッサ ( 80387 ) を使用して、浮動小数点演算をハードウェアで直接実行しました。Intel 80486DX プロセッサは、チップ上に浮動小数点ハードウェアを搭載していました。Intel は、浮動小数点ハードウェアを搭載していないコスト削減版プロセッサ 80486SX をリリースし、また、80487SX コプロセッサも販売しました。80487SX は、ピン接続が異なるだけで実質的に 80486DX と同じであるため、インストールするとメインプロセッサが無効になります。[ 1 ]
Intelの80486以降のプロセッサは、メインプロセッサチップ上に浮動小数点ハードウェアを統合しました。統合技術の進歩により、浮動小数点プロセッサをオプション要素として販売するコスト上の利点はなくなりました。75MHzの プロセッサ速度で十分な回路基板技術を、ギガヘルツ帯のクロック速度で要求される時間遅延、消費電力、および無線周波数干渉の基準に適合させることは非常に困難でした。これらのオンチップ浮動小数点プロセッサは、メインCPUと並列に動作するため、今でもコプロセッサと呼ばれています。
8ビットおよび16ビットのデスクトップコンピュータの時代には、浮動小数点コプロセッサのもう1つの一般的な供給元はWeitekでした。これらのコプロセッサはIntelコプロセッサとは異なる命令セットを持ち、異なるソケットを使用していたため、すべてのマザーボードがサポートしていたわけではありませんでした。Weitekプロセッサは、Intel x87ファミリーのように超越数学関数(例えば、三角関数)を提供せず、それらの関数をサポートするために特定のソフトウェアライブラリが必要でした。[ 2 ]
Motorola 68000ファミリーには、 Intel プロセッサと同様の浮動小数点速度加速を提供する68881/68882コプロセッサが搭載されていました。68000 ファミリーを使用しているもののハードウェア浮動小数点プロセッサを搭載していないコンピュータは、ソフトウェアで浮動小数点命令をトラップしてエミュレートすることができ、速度は遅くなりますが、どちらの場合にも 1 つのバイナリ バージョンのプログラムを配布することができました。68451 メモリ管理コプロセッサは、68020 プロセッサと連携するように設計されていました。[ 3 ]
2001年現在グラフィックカードの形をした専用グラフィックス処理ユニット(GPU )は、現在では一般的です。サウンドカードの一部のモデルには、1990年から1994年という早い時期から、デジタルマルチチャンネルミキシングとリアルタイムDSPエフェクトを提供する専用プロセッサが搭載されていました(Gravis UltrasoundとSound Blaster AWE32が典型的な例です)。Sound Blaster AudigyとSound Blaster X-Fiは、より最近の例です。
2006年、AGEIAはPhysX PPUと呼ばれるコンピュータ用アドインカードを発表しました。PhysXは、CPUやGPUが時間のかかる複雑な物理演算を実行する必要がないように設計されていました。ビデオゲーム向けに設計されていましたが、理論的には他の数学的な用途にも応用できる可能性がありました。2008年、NvidiaがAGEIAを買収し、PhysXカードのラインナップを段階的に廃止しました。その後、Nvidia PhysXエンジンソフトウェアを使用して、通常グラフィックス処理に使用されるコア上でPhysXをレンダリングできるソフトウェアによって、その機能がGPUに追加されました。
2006年、BigFoot Systemsは、 400MHzで動作するFreeScale PowerQUICC上で独自のLinuxカーネルを実行するPCIアドインカード「KillerNIC」を発表した。同社は FreeScaleのチップをネットワーク処理ユニット(NPU)と呼んでいた。
SpursEngineは、Cellマイクロアーキテクチャに基づいたコプロセッサを搭載した、メディア指向のアドインカードです。SPU自体がベクトルコプロセッサです。
2008年、Khronos Groupは、汎用CPU、ATI/AMDおよびNvidia GPU(およびその他のアクセラレータ)を、計算カーネル用の単一の共通言語でサポートすることを目的としてOpenCLをリリースしました。
2010年代には、一部のモバイルコンピューティングデバイスがセンサーハブをコプロセッサとして実装しました。モバイルデバイスにおけるセンサー統合の処理に使用されるコプロセッサの例としては、 AppleのM7およびM8モーションコプロセッサ、Qualcomm Snapdragon Sensor CoreおよびQualcomm Hexagon、Microsoft HoloLens用のホログラフィック処理ユニットなどが挙げられます。
2012年、インテルはインテル Xeon Phiコプロセッサを発表した。[ 4 ]
2016年現在様々な企業が、視覚やその他の認知タスクのための人工ニューラルネットワークを高速化することを目的としたコプロセッサ(例えば、ビジョン処理ユニット、TrueNorth、Zerothなど)を開発しており、2018年現在、そのようなAIチップはAppleや複数のAndroidスマートフォンベンダーなどのスマートフォンに搭載されている。
CPUは、時を経て、最も普及しているコプロセッサの機能を吸収する形で進化してきた。FPUは現在、プロセッサのメインパイプラインに不可欠な要素とみなされている。SIMDユニットはマルチメディア処理の高速化を実現し、様々なDSPアクセラレータカードの役割を引き継いだ。そしてGPUさえもCPUダイに統合されるようになった。とはいえ、デスクトップマシン以外では、またさらなる処理能力を求める用途では、専用ユニットが依然として人気があり、メインプロセッサ製品ラインとは独立した進化を可能にしている。