忍者ブログ
コンピュータ将棋など…。
[11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

来年の選手権に向けてソースをいじる時間を増やさないと!
いつかは保木さんに恩返ししないと…。

箱田色紙
※画像は会社で受けた研修でいただいた色紙
PR
Windows 32bit環境で cygwin 上の gcc で開発していて、64bit演算の一部を MMX 組み込み関数に置き換えてみたところ、かえって遅くなってしまいました。
MMX より通常の32bit演算を2回やるほうがレイテンシやスループットが少ないからか? と思って、アセンブリ出力を見てみると、MMX を使わないときはなんとSSE2を使って、128bit演算していました!!

で、簡単なテストプログラムを、
 ・ VC6 + プロセッサパック
 ・ VC8(Visual Studio 2005)
 ・ gcc-4.5.0
でコンパイルして比較してみました。
プログラムが簡単すぎたせい(?)か 32bit×2 と 64bit は同じコードが出力されていて、gcc は SSE2 を使って128bitで演算していました(vc6 / vc8 は 32bit で演算していました)。

ただ、vc6 は律儀にループしていましたが、vc8 では 4回分まとめていて、ループ回数が1/4 になっていました。
また、MMX 部分では vc6 と vc8 とで、ループの演算位置が異なり、メモリリードのレイテンシに重ねていた vc6 のほうが速い結果となりました(これは予想外)。

ということで、実行環境、プログラムやコンパイラによって変わってくると思いますが、うちの環境では速い順に、
  gcc(通常=SSE2) < gcc(MMX) < vc6(MMX) < vc8(通常) < vc8(MMX) < vc6(通常)
となりました。

一応、32bit環境下で64bit演算するのに MMX のほうが速くなる可能性があるということがわかりましたが、浮動小数を使うときには emms を入れなければいけないし、64bit 環境だったら汎用レジスタでいいし、もういらないかもしれないですねw

コンパイルオプション:
  vc6 : cl -Ox mmx.cpp
  vc8 : cl -Ox -arch:SSE2 mmx.cpp
  gcc : g++ -O3 -msse2 mmx.cpp

ソースファイルとアセンブリ出力 : ダウンロード(mmx_test.zip)
市の図書館の蔵書検索をしたらいろいろあるようなので、図書館に行ってきました。
借りてきたのは
・ 門脇芳雄 解説:詰むや詰まざるや
・ 門脇芳雄 編:続詰むや詰まざるや
・ 米長邦雄:一手・三手の詰将棋
・ 若島正:盤上のファンタジア
・ 上田吉一:極光21 詰将棋作品集
・ 梅田望夫:どうして羽生さんだけが、そんなに強いんですか?
の6冊。
詰むや詰まざるやと続は奥(?)にしまってあり、カウンターで借りたいと言ったときに、なかなか題名が伝わらず、文字で書く羽目になりましたw

他にも蔵書検索してみましたが、さすがに「OpenGL」、「DirectX」や「MikuMikuDance」はヒットしませんでしたw
当選したM/BでようやくPCが組みあがったので、ベンチ結果を。
今まで使っていたHDDを繋いでセットアップしたら、構成が大きく変わったので認証してくださいと、再悪知ベーション要求されました。まぁ、M/BとCPUとメモリが替わっているのでそうだろうなとwww

装置構成は PhenomII X4 940 は3.2GHzにOCしていて 780GでDDR2 4GB/WindowsXP(x64)、Athlon64 X2 4600+ は定格動作 690GでDDR2 4GB/WindowsXP(x64)、Pentium G620 は定格動作 H61 で DDR3 8GB/WindowsXP(x64)。
ローエンドの G620 を選択した理由は、将来CPUを上位に変更することがあったときに余る CPU はしょぼいほうがいいだろうと思っただけです。

で、実行した内容は、定番のYSSベンチと東大将棋6と新・東大将棋無双IIでの詰将棋の回答時間(グラフはAthlon64を100%として短いほうが速い)。

ここはまぁ、YSSベンチと近い傾向の結果となりました。
  YSSベンチ 東大6
寿
東大6
ミクロコスモス
無双II
寿
無双II
ミクロコスモス
Athlon64 X2 4600+ 9.6 0:00:18 0:51:36 26.5  544.4 
Pentium G620 8.3 0:00:16 0:43:49 20.5  402.8 
Phenom2 X4 940 6.8 0:00:13 0:39:10 18.0  371.7 

110812bench1

今度は Bonanza のノード数。VS2005でコンパイルして、2スレッドでのノード数。x86 はバイナリ形式はx86ですが、実行環境はx64です。
上と同様にAthlon64を100%としたグラフで参考にYSSベンチの逆数も載せています(長いほうが速い)。

ここで、なんとあろうことか、G620 は PhenomII より高速に実行しています。
他の 2CPU が Athlon64 より大幅に上昇しているのは、Athlon64 は L2 が512KBでL3なしという構成のため、Bonaの3駒関係の評価関数ではキャッシュに収まりきれず、キャッシュミスによる速度低下が起きているものと思います(と思ったら、PhenomII  の Bona6 は YSSベンチと同様の結果ですね。評価関数の差分化の効果でしょうか? だとすると G620 の結果の理由がよくわかりませんが…)。
G620 は L3 3MB、PhenomII は L3 6MBというところで、とりあえず3MBあれば入るのかと思われます。
結果からすると PhenoimII の L3 アクセスより G620 の L3 アクセスが速いんでしょうか?

あと、64bit 化は一部遅くなっているところがありますが、とりあえず速くはなりそうですね。

ちょっと悔しかったので、4スレッドでのノード数も載せておきましたwww
しかし、Bulldozer はちゃんと性能が出てくるのかなぁ…。
ダメなら、i7 2600あたりにして選手権に出てしまうかも?!
  YSSベンチ
逆数
Bona Feliz
(x86)
Bona Feliz
(x64)
Bona6
(x86)
Bona6
(x64)
Bona6(x64) 4threads
Athlon64X2 4600+ 0.1042  138.64 130.47 195.99 214.85 N/A
Pentium G620 0.1205  224.53 234.01 336.51 352.87 N/A
Phenom2X4 940 0.1471  220.87 209.11 271.13 314.74 627.54

110812bench2.PNG

 
もうなんか今までの進捗と残りの期間からいって危機的状況のような気がしますが、いろいろリストアップしてひとつひとつ潰していくしかないですね。

とりあえず、SSE 関連の文書を読みながら
 ・ パックされたデータを個別に(右)シフトする手段がないな
 ・ AVX は Win7SP1 以降じゃないと使えないらしいけど、XMM 関連だけでも使えないか?
 ・ AVX をC/C++から使うには VS2010 が必要みたいだなぁ
 ・ AMD の AVX 対応は遅くなきゃいいな…
なんてことを思っていました。

あと、「MikuMikuDanceセカンドパック」を買ってしまいました。
買うことで安心してしまって、あまり読まない/使わないというクセが出ないようにしないと。。。


きのう、アマゾンから Pentium G620 の「発送しましたメール」が来ていたので、あしたあたり届くかな?
Dual Pentium III 以来の Intel プラットフォームでの自作。
Sandy Bridge 系ローエンド CPU だけど、うちのマシンでは一番のメモリ容量となるし、パフォーマンスもよさそうなんでちょっと期待。
でも、本命はがんばってもらわないと困るw


忍者ブログ [PR]
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
フリーエリア
なのはの応援をしていただき、かつ協力いただける方は、アマゾンでの買い物は下のリンクからお願いします
最新CM
[04/27 とおりすがり]
[10/21 おてだま]
[10/20 おてだま]
[01/24 なのはminiふぁん]
[01/08 sakura]
最新TB
プロフィール
HN:
かず
性別:
非公開
バーコード
ブログ内検索
最古記事
カウンター
アクセス解析