2009年11月29日日曜日

11/29(日) 多分解決ヽ(´ー`)ノ不思議ちゃん

今日も16Mパイ焼きの『不思議ちゃん』について、特にL3キャッシュの中で起きている(かもしれない)ことに思いを馳せていました。


L3が悪さをするというのであれば、何が不思議ペナルティを引き起こしているのでしょうか?


・ キャッシュデータのFragmenntation?
・ それともContamination?

まあ、いずれにせよL3を綺麗にして上げなくてはいけないような気がします。
あくまで想像ですが、、

PhenomIIのL3キャッシュについては詳細に理解していなかったので、ちょっとググってみると、
以下のような記事を見つけました。

DOS/Vパワレポ

『PhenomIIのキャッシュは排他式で、L3のカバー範囲には各コアのL1、L2も含まれる』

とのこと。

ほほぉ~、実際に演算していないコアのL1、L2も含まれるのか・・・
この辺が関係しているのかな??

他にも考えていたことがあったので、とりあえず回してみることに。
環境は、M/BがCrosshairIII、CPUが955BEでありますが、それ以外はこれまでとほぼ同等です。


【追加検証①】
L3に余分な情報を入れないよう、パイで一杯にして上げればいいのかな?と考え、

・ まず8Mを走らせ、
・ 続いて、16Mを走らせる

というのをやってみました。で、なんと1回目は『不思議ちゃん』ゼロ!

不思議ちゃんゼロ : 1Loop 約19秒、7m31.344s

これまでで最速です。

これはっ!

と再起動して、2回目を試みたのですが、、、


不思議ちゃん5回 orz : 1Loop 約19秒、7m36.282s

5回発生し、5秒遅くなっています。。。

まあ、最初がまぐれだったのですね '`,、(゚∀゚) '`,、


【追加検証②】
L3が各コアのL1、L2キャッシュも含んでしまい、その分汚れているのだとすれば、演算するコア以外を止めてしまえばいいわけです。
パイ焼き計算を特定のコアにやらせるだけなら、タスクマネージャから選択すればいいのですが、今回の狙いは、

・ 演算しないコアにL1、L2を汚染させない

ということなので、boot.iniのオプションで起動時からシングルコアとなるよう設定します。
やり方は簡単で、

/numproc=1

を加えるだけです。さあ、どうでしょうか?

・・・

1回目 : 不思議ちゃんエラーゼロです。

ただ、まぐれかもしれないからなぁ・・・

2回目 : おっ!

不思議ちゃんゼロ : 1Loop 約19.05秒、7m32.531s

2回連続、不思議ちゃん発生無し!
ただし、微妙に速度が落ちています。これは無理矢理シングル化した弊害なのでしょう。

その後、3回目OK、4回目OKと不思議ちゃん出てきません!

そして5回目、、、

不思議ちゃんゼロヽ(´ー`)ノ

しかも、これまでと違い、同じパイで連続して焼いても問題ありません!

よし!技掛けたるっ!

で、、、


技有り 7m30.828s 不思議ちゃんゼロ!

これまでで最速ですヽ(´ー`)ノ

シングルコア化しての速度低下のペナルティも、技を掛けることで相殺されます。


ヨシッ!克服したぞっ! ヽ(´ー`)ノ


まとめると、

・ PhenomIIではL3の影響で、16Mパイ焼き時に速度低下が発生(1Loop約1秒)
・ これはboot.ini編集でのシングル化(/numproc=1)で回避出来る
・ シングル化により多少パイ焼き速度が低下するが、技を掛けることで挽回可能

てな感じですか。

ちなみに、今回の仮説が正しいとすれば、IntelのCore i7で、『不思議ちゃん』が発生しないのは、i7のキャッシュがPhenomIIと違いL3キャッシュ範囲にL1、L2を含まないためだと思われます。

まだ、ぶっかけ時の挙動が確認出来ていませんが、多分上手く行くような気が・・・

今晩試してみます!


2 件のコメント:

tsubasa さんのコメント...

やりましたね~おめでとう御座いますw

でもなんで16MだけL3絡みのバグがあるのか・・・

それが本当の不思議ちゃんかもですねぇ

アタクシもまだ、うpしてないデータなんですが

①強制シングル
②taskmgrで1コア
③2コアのままRealtimeのみ

と各5回ずつデータ取ったんですが

タイム的には

③>②>① の順位でした

差は約2秒間隔位です(av)

そもそもL1,L2のキャッシュが溢れた時点でL3を使用する訳ですから

魚六さん(?)の説が正しいとすると・・・

データプリフェッチのエラッタが16Mだけに起ると言う事が考えられますねぇ

XSのπ_MODがコンパイラーを何使ってるか解りませんが

INTELで起らないとするならば・・・

「例」のINTELC++絡みの・・・(ry

かもしれませんね・・・

ともあれお疲れ様でした~

WR獲れる様頑張って下さいw

Gyrock さんのコメント...

tsubasaさん、こんばんは~!

何とか克服出来たようです。
検証など色々お手伝いしていただき、ありがとうございます<(_ _)>

シングル化による速度ペナルティは、正にtsubasaさんの検証結果の通りですよね。パイ焼きはシングルタスクなのにマルチコアが速い、、、これも不思議ちゃん??

16Mだけ不思議ちゃんなのは、ホント不思議ですね~
16Mだけアルゴリズムがちょっと違うのか、計算で扱うデータ量がちょうどPhenomIIのL3サイズと相性が悪いのか、tsubasaさんの言われるようにデータプリフェッチが上手く行っていないのか??

あと、コンパイラーですか・・・
確かに色んなのでコンパイルしてみたら面白いかもしれませんね!

(プチ)WRは、先ほど狙いに行って撃沈しました。。。
本日2度目の極例で、母板が乾ききっていなかったようです。。。

次回、頑張ってみます!

ではでは~

hwbot signature