私たちが行う方法をプログラミングする代わりに、「ソート」などの一般的なタスクの仕様を作成し、環境にそれをコンパイルしてハードウェアを最大限に活用させてみませんか?このようにして、ソートネットワークなどの新しい専用ハードウェアを搭載したコンピューターを出荷でき、既存のコードで自動的に動作します。
まず、コンピュータには専用のハードウェアが付属しています。数年前から販売されているすべてのラップトップおよびデスクトップコンピューターには、ビデオやゲームアプリケーションなどに必要な視覚処理アルゴリズムを処理するグラフィックスプロセッシングユニットである特殊なコプロセッサーが搭載されています。非常に大規模なコンピュータ(eg、「スーパーコンピュータ」、IBMのSystem Zファミリ)には、数値処理(「ベクトル処理」)を処理するためのさまざまな専用プロセッサがあります。 etc。
第二に、ソートはコンピューティングの最もよく研究されている側面の1つであり、ハードウェアに組み込むには複雑すぎることがわかります最も単純なケース以上のものです。並べ替えとは、速度と正確さのすべてです。速度は、アルゴリズムの選択、データのタイプとバリエーション、およびデータの量によって異なります。正確さは、データのタイプとコンテキストによって異なります。 CPUのネイティブなワードサイズ(、たとえば、31または63ビットのプラス記号)に収まる中サイズの整数の配列を並べ替えることは簡単です。 ASCII値以外のものも含む)文字列の並べ替えは非常に複雑です。IBMは、国境や一般的な使用法の文脈で文字セットの問題について議論している20年前に500ページ以上の本を出版しました。そして、不連続データの問題があります-リンクされたリストのソートには、メモリ全体でポインタを追跡することが含まれます。
主な問題は、(1)ソートアルゴリズムに多くの柔軟性が必要であり、(2)とにかくハードウェアを使用して高速化することが非常に難しいことです。
1つは、並べ替えアルゴリズムは、プロセッサのメモリ帯域幅を使い尽くすのに十分な速度で既に簡単に実行できることです。プロセッサは、データがメインメモリに前後に移動するのを待つ時間の大部分を費やしています。ハードウェアアクセラレータを使用した並べ替えコプロセッサまたは特別な並べ替え命令でも同じ問題が発生します。
このメモリ帯域幅に対処する方法は、より優れた「局所性」を備えたより優れたアルゴリズムとデータ構造を使用することであり、特に「キャッシュ忘却アルゴリズム」(これらは動作するという意味では気づいていない)で、この分野ではまだ重要な作業が行われていますキャッシュの詳細に関係なく、「キャッシュ対応」アルゴリズムは特定のキャッシュページサイズなどに合わせて調整されます。
対照的に、メディアアプリケーション(オーディオとグラフィックス、特に3Dグラフィックス)は、非常に反復的な構造を利用しています。もちろん、柔軟性はありますが、非常によく構造化された大規模な基盤の上に構築されています。これにより、グラフィックアクセラレーションは、ブリッティング(構成可能ですが、非常に構造化されたブロックコピー操作)やライン/ポリゴンの描画などで簡単に開始できます。これは、グラフィックスとサウンドの処理がより高度になるにつれて、ベクター演算が最適化の明らかなターゲットになったことを意味します-最初のMMX(整数のベクター)、次にSSE(floatsのベクター)。古い固定機能の3Dグラフィックパイプラインが3Dグラフィックハードウェアに移動されたときの3Dグラフィックエンジンの動作のかなり明確な構造。
それでも3Dグラフィックスでは、ハードウェアで行われていたことがソフトウェアで行われ、柔軟性が生まれます。たとえば、シェーダーはソフトウェアです。つまり、さまざまなマテリアルの外観を提供するさまざまなシェーダーを幅広く利用できます。ただし、そのソフトウェアは、一般的なソフトウェアよりもはるかに構造化された方法で機能するため、より専門的なハードウェアプラットフォームを使用できます。そのため、グラフィックカードは物理からパスワードの解読まですべてを高速化できます。これは、同じモデルに適合し、最新のグラフィックプロセッサが提供する命令セットを使用して効率的に実装できるアプリケーションです。
現在、グラフィックスプロセッサは、デジタルシグナルプロセッサの精神的または実際の子孫です。これは、デジタルシグナル(オーディオなど)を処理するための一種の特殊なプロセッサでした(おそらく現在もそうです)。
これが最終的なポイントにつながります-ソートアルゴリズムできますハードウェアによって加速されます。データによっては、MMXまたはプロセッサでSSE(single-instruction-multiple-data)命令を使用してソートを処理できますが、メモリ帯域幅の問題のため、おそらくあまり意味がありません-多分ただし、グラフィックハードウェアを使用することもできます。これにより、グラフィックカードのメモリ帯域幅が大幅に向上するというメリットがあります。すべてを交換することはできません。この方法で並べ替えますが、それは確かに可能であり、おそらく適切な場所で行われます。
IOWはさまざまな経済的および実用的な問題があるため、ハードウェアの設計特にソートのような比較的狭いタスクを加速することは、実際には意味がありません。より広範囲のタスクを加速する機能、または既存の加速ハードウェアをより広範囲のタスクに適用可能にする機能は、多くの場合より理にかなっています。
しかし、そうです!それらは命令セット拡張と呼ばれます。 (SSEなど)のようなもの)
特定のタスクには、ソフトウェアでの非常に優れた実装があります。通常、これらの実装は十分に機能するため、特別なハードウェアは必要ありません。ある種の特殊なハードウェアを作成する場合、それを価値あるものにするためには、非常に幅広いアプリケーションが必要になります。
これを機能させることができるハードウェアを見ると、FPGAのようなものを見ていると思います。 FPGAでわかるように、チップは多くのアプリケーションには適用できませんが、はるかに高価になります。