[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:19682] Re: make -jについて



よしだ@京都です。

この手の話になるとしゃしゃり出てきてしまう。(^^;
どこのスレッドに繋げればいいのやら…(^^;;;;

> > > パイプラインを縦に長くするのとでは、どっちが効くんでしょうね。おそらく
> > > 一長一短だとは思うのですが、分岐予測まわりも絡めて考察すると、かなり奥
> > > が深そう。

この手の話で本一冊かけますねー
> 
> >   個人的には短いパイプラインを横にしたほうが速いんじゃないかなあ、って思
> > っています。ベンチマークのような単調な命令をこなすのならばやっぱり深い
> > パイプラインのほうが有効なんでしょうけど。

実行されるコードで得意不得意がでますねぃ
長距離走で例えるなら、ピッチ走法かロングストライド走法みたいなものです。

> > # 将来的には大量のパイプラインを並列にして、分岐予測をするのではな
> > # く、全て (は無理にしても多く) の場合を計算し、正解だけを使う、なんて
> > # アプローチがでてきたりして。
> > # それとももうやってるんでしたっけ?

すでに「アウト オブ オーダ」という機構で実現されてますぅ
また「投機実行」てのもあります。

「投機実行」は「ここの分岐はこっちだろう」という「分岐予測」から
「とりあえず実行しちゃえ」ってな方法で、予測正解時は効果抜群なんですが。
予測失敗したときにはパイプラインストールを起こして、パイプラインをフラッシュ
(いわゆるにペナルティ)しなくてはいけない技です。
これは分岐予測の精度が要求されますが、プログラムの基本構造「逐次」「分岐」「繰返し」から
スパゲティプログラムでないかぎり、大抵はヒットします。

「アウト オブ オーダ」は分岐も含めて、とりあえず命令を放込んで実行しちゃいます。
そして、命令を実行しつつ命令の依存関係を把握し、出てきた結果を並び変えて出力します。
これはCPUで命令の自分で動的に並び変えをしてしまうので、アホなコードでもそれなりに
効果的に実行してしまいます。「投機実行」の進歩版ともいえなくもない。

「アウト オブ オーダ」を補助する機構に「レジスタリネーミング」というのもあり、これは
CPUが「計算結果出したいけど、入れるA箱が使用中で入れられないよー」という場合とかに
「とりあえず、このT箱は空きだから入れちゃえ」とやって、「ん、A箱が空いた、ラッキー」
「ぢゃあT箱をA箱に移すんだけど、ぢゃまくさいからT箱をA箱ということにしちゃお♪」という
機構です。
この機構はX86系のようにレジスタが少ないアーキテクチャのCPUでレジスタの数を仮想的に
増やせるので命令実行の並列度を上げられるというメリットがあります。

とりあえず、こんなところで(ぉ
最近CPUアーキテクチャを追っかけてないので、最新ではどうなってるかしりません(マテ
初代Athlonまでなら分かるんですが…(^^;;;;;;;

ちなみに、初代Athlonでは命令キューから3並列2段のデコーダを通して、一度ディスパッチユニットで
命令を整理してから3組の整数演算ユニットと浮動小数演算ユニットに渡され実行されます。
15段のスーパーパイプラインに上記の機構を搭載しています。

-- 
吉田憲司(Kenji Yoshida)  E-mail:marine@mbox.kyoto-inet.or.jp

Follow-Ups
[plamo:19684] Re: make-jについて, Shun-ichi TAHARA (田原 俊一)
References
[plamo:19665] Re: make-jについて, Hiroki ISHIHARA
[plamo:19668] Re: make-jについて, Shun-ichi TAHARA (田原 俊一)
[plamo:19670] Re: make -jについて, OHNO Tetsuji
[plamo:19672] Re: make-jについて, Shun-ichi TAHARA (田原 俊一)

[検索ページ] [メール一覧]
Plamo ML 公開システム