CPUアーキテクチャは手続き型ランタイムに偏っていますか?


12

Rustのような同時実行時のパフォーマンスを向上させるためにCPUに変更を加えることはできますか?たとえば、同時実行に役立つ分岐予測の実装またはキャッシュサイズに変更はありますか?

現在のCPU設計は、Cのような手続き型ランタイムに対してより最適化されるかもしれないという印象を持っています。

例示のために、手続き予測コードを分析する研究論文に描かれた一般化に基づいて、分岐予測が実装されました。並行性の抽象化により、既存の分岐予測アルゴリズムに悪影響を与える重要なワーキングセットがランタイムに追加されるのではないかと思っています。たとえば、forループでの予測は1つのことですが、ブランチのターゲットが常にメモリの新しい部分(グラフィック、テキストなど)である場合、常にキャッシュミスであり、ブランチはありません。それの歴史-どちらもまだ触れていないからです。

これはおそらく馬鹿げた質問です。なぜなら、コンテンツは常にRAMにあるかもしれませんが、使用されるよりも小さい桁に分岐するからです(キャッシュに読み込まれたら)。手続き型ランタイムのキャッシュおよび分岐予測子に保存されているコンテキストの観察可能な時間境界である必要があります。これは、より並列化された環境で抽象化境界として明示されます。だから私は疑問に思う...これらの境界は観察されましたか?これを分析した研究論文はありますか?

CPUアーキテクチャは、同時実行コードよりも手続き型コードに偏っていますか?または、最新のCPUは汎用性が高く、高度な同時実行言語が問題になりませんか?


2
Itanium(IA-64)アーキテクチャに関する文献を見ましたか?それは超並列性の壮大な夢で設計されましたが、人々はCPUの機能を利用するコンパイラを作ることに失敗し、結局ソフトウェアはそれほどうまく機能しませんでした。
ジル「SO-悪であるのをやめる」

@Gillesはい。別の質問ではありますが、実際には興味深い観察結果です。おそらく、Itaniumに組み込まれた並列処理は、現代の並行言語により適しているのでしょうか。
paIncrease

@Gilles:同様に、新しいMillアーキテクチャは、並列性と低コストのスイッチを念頭に置いて構築されたようです。たとえば、すべての「プロセス」に単一の仮想アドレス空間を使用することにより、最後のキャッシュレベルとデバイスコントローラー間でTLBをプッシュバックします(millcomputing.com/docs/memoryのスライド49を参照)。
マチューM.

1
@pedAntic錆がランタイムを必要と作るのは簡単だという誤解です:chat.stackoverflow.com/transcript/message/24171983#24171983。あなたの質問はこの誤解を支持しているようですが、これはRustにとっては良いことではありません。
-ArtemGr

1
@pedAnticご存知のように、Rustに同時実行ランタイム(グリーンスレッド用)がありましたが、もうありません。現在、同時実行のパフォーマンスプロファイルに関して、RustはCとほぼ同じリーグにいます。Cとの唯一の違いは、Rustの静的分析により、並行性がほぼ安全になることです。
-ArtemGr

回答:


1

おそらく、最新のコンピューターアーキテクチャーは、ダイ領域のコストと使用される電力の予算に対して、コンパイラーによって生成されるコードの品質を改善することを目的として設計されている場合が多いでしょう。ランタイムライブラリは、効率的な方法で実行する必要があるコンパイル済みコードの特定のインスタンスです。

非常に長い間、ほとんどのアーキテクチャのターゲット言語は「C」言語でした。これは、その言語がハードウェア上で行う控えめな要求と、ほぼ普遍的なシステムプログラミング言語になっているという事実を反映しています(Sorry Rust and Go、Cに勝つには長い道のりがあります)。

この結果、新しい言語はC言語の同等のセマンティクスの観点から定義されることが多く、現在のコンピューターにはない可能性が高いプロセッサー機能が不要になります。

最新のコンパイラーとよく一致するプロセッサーの見返りは、それらのコンパイラーからのコードが適切に実行され、プロセッサーが少なくとも競争力を持つチャンスがあることです。ここでの障害のコストは、プロセッサを開始する前に破滅をもたらします。ネガティブの2つの例には、IntelのiAPX-432とItaniumがあります。どちらもコンパイラ(AdaとC)と非常に貧弱な関係にあり、製品の失敗はシリコンとソフトウェアの間の非難のゲームになりました。


0

間違いなく、はい。

特に、C99が意味する通信モデルは共有メモリです。より高度な並行言語には、メッセージパッシングチャネル(Rustなど)など、より豊富な通信モデルがあります。

最新のCPUアーキテクチャには、共有メモリ用の明示的なハードウェアサポートがあります。特に、MESIのようなキャッシュコヒーレンシプロトコルは、実際のゲートとワイヤに実装されています。メッセージの受け渡しのアイデアはCPUにとって異質ではありませんが、プロセス間のメッセージの受け渡しに対する実際のサポートはありません。最新のPCI-eバスはメッセージパッシングを使用して共有メモリをエミュレートしますが、CPUプロセスは共有メモリを使用してメッセージパッシングをエミュレートする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.