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