3

発行幅がNに等しいVLIW プロセッサを考えてみましょう。これは、 N 個の操作を同時に開始できることを意味します。したがって、非常に長い各命令は、最大N 個の操作で構成できます。

VLIW プロセッサが、さまざまな待ち時間の操作で構成される非常に長い命令をロードするとします。同じ非常に長い命令に属する操作は、異なる時点で終了する可能性があります。同じ非常に長い命令に属する他の操作の前に操作が実行を終了するとどうなりますか? 後続の操作 (つまり、次の非常に長い命令に属する操作) は、現在の非常に長い命令の残りの操作が実行される前に実行を開始できますか? または、非常に長い命令は、現在の非常に長い命令に属するすべての操作の完了を待機しますか?

4

2 に答える 2

2

私が見たほとんどの VLIW プロセッサは、さまざまなレイテンシの操作をサポートしています。

これらの命令をスケジュールし、操作が実行される前にオペランドが使用可能であることを確認するのは、コンパイラ次第です。VLIW プロセッサは愚かで、操作間の依存関係をチェックしません。長い命令ワードが実行されると、ワード内の各操作は単純に入力データをレジスタ ファイルから読み取り、同じサイクルの最後に、または操作に 2 ~ 3 サイクルかかる場合は後で結果を書き込みます。

これは、命令が決定論的であり、常に同じサイクル数を使用する場合にのみ機能します。私が見たすべての VLIW アーキテクチャには、一定数のサイクルを必要とする操作があり、それ以下でもそれ以上でもありません。たとえば、外部メモリのフェッチのように、時間がかかる場合は、マシン全体が単純に停止します。

ここで、レイテンシが異なる命令のスケジューリングを制限する重要な要素が 1 つあります。それは、レジスタ ファイルへのポート数です。ポートは、レジスタ ファイルと操作の実行ユニット間の接続です。VLIW プロセッサでは、各操作は発行スロットで実行され、各発行スロットにはレジスタ ファイルへの独自のポートがあります。ポートは、ハードウェアの点で高価です。ポートが多いほど、レジスタ ファイルを実装するためにより多くのシリコンが必要になります。

ここで、2 サイクル操作が、その直後にスケジュールされた 1 サイクル操作と同時に、その結​​果をレジスタ ファイルに書き込もうとしている次の状況を考えてみます。両方の操作が同じポートを介して同じレジスタ ファイルに書き込みたいため、競合が発生しています。繰り返しますが、これが起こらないようにするのはコンパイラの仕事です。多くの VLIW アーキテクチャでは、同じ発行スロットで実行されるオペランドのレイテンシはすべて同じです。これにより、この競合が回避されます。

あなたの質問に答えるために:

「同じ非常に長い命令に属する他の操作よりも前に、ある操作が実行を終了するとどうなりますか?」とあなたは言いました。

特別なことは何も起こりません。プロセッサは、次の非常に長い命令語を実行し続けます。

「後続の操作 (つまり、次の非常に長い命令に属する操作) は、現在の非常に長い命令の残りの操作が実行される前に実行を開始できますか?」

はい。ただし、後でレジスタ ポートの競合が発生する可能性があります。この状況を防ぐのはコンパイラ次第です。

あなたは言った:「または、非常に長い命令は、現在の非常に長い命令に属するすべての操作の完了を待ちますか?」

いいえ。プロセッサはサイクルごとに次の非常に長い命令語に移動します。例外があり、それは、たとえばキャッシュ ミスがあり、その後パイプラインが停止し、マシンが次の長い命令ワードを進めないために、通常よりも操作に時間がかかる場合です。

于 2012-07-16T19:45:59.300 に答える
1

VLIW の背後にある考え方は、コンパイラが、プロセッサが並行して実行する多くのことを理解し、それらを「非常に長い命令語」と呼ばれるバンドルにパッケージ化することです。

アムダールの法則は、並列プログラム (たとえば、VLIW 命令の並列部分) の高速化は、最も遅い部分 (たとえば、最長期間のサブ命令) によって制約されることを示しています。

VLIW と「長いレイテンシー」の簡単な答えは、「異なるレイテンシーを持つサブ命令を混在させない」ことです。実用的な答えは、VLIW マシンが異なるレイテンシーのサブ命令を持たないようにすることです。むしろ理想的には、「1 クロック」のサブ命令が必要です。通常、メモリフェッチでさえ、コンパイラが可能な限り多くの他の計算を実行して、メモリ フェッチ レイテンシが他の命令によってカバーされるようにします。

于 2012-07-11T16:02:41.283 に答える