
AMDのCPU/APU向けスーパーπ高速化パッチが公開 52
ストーリー by hylom
AMD派へ 部門より
AMD派へ 部門より
ymitsu 曰く、
AMDのCPU/APUにおいて、円周率計算ソフト「スーパーπ」を高速化するパッチ「Bulldozer Conditioner」が有志によって公開された(TechPowerupの記事、上田新聞の記事、パッチ作者のコメント)。
スーパーπとは東京大学の金田研究室が開発し1995年に公開された円周率計算ソフトで、さすがに古いソフトだけあってメニーコアには対応していないながらも、単コアあたりのCPUの性能の差がよく解るベンチマークとしてデファクトスタンダードだと考える人が未だに世界的に多くいる。そんなスーパーπの結果が現行のAMDのCPU/APUでは残念なものになる傾向があるが、その理由はスーパーπで多用されているx87命令セットへのBIOSの最適化の不備によるもので、このパッチを当てることで改善が可能とのこと。
スーパーπはx87命令にほぼ完全に依存しているため特に顕著な効果が出るが、x87命令セットを利用しているソフトなら基本的に何でも高速化されるようだ。
スーパーπとx87命令セットへの最適化など「今更何の意味があるのか解らない。もっといいベンチあるだろ」とのコメントがTechPowerupのページにもついているが、意味の解る方々や、あくまでスーパーπで最速を狙う方々はインストールしてみるのもいいかもしれない。
残念な結果 (スコア:2)
走らせてみたところ、同じ動作周波数のCore i7だと、スーパーπのパフォーマンスはAMDのAPUの倍以上なわけで。
まさか、ここまで差が有るとは思いもしなかった。
ベンチの為のパッチって意味があるのかな (スコア:1)
べっちマークの為のパッチはあまり意味が無いような気がします。それどころか利用者をだましているような気すらします。
どうなんでしょう?
Re:ベンチの為のパッチって意味があるのかな (スコア:1)
BIOSの一部を書き換えちゃうのか、BIOSの何かのスイッチ(起動時のBIOSセットアップ画面からいじれないなにか?)をON/OFFしてるだけなのか、OSに対するパッチとかなのか。
効果としてはx87命令を多用する任意のソフトウェアが高速化されそうに見える一方で、意味がないというツッコミも入ってるし。 今現在x87命令を多用するようなソフトはもうないから、実用上ほぼ無意味、ぐらいの事なのかな?
Re: (スコア:0)
>今現在x87命令を多用するようなソフトはもうないから、実用上ほぼ無意味、
FFTの素朴な実装とか、多用しそうな気がするのですが。
あとはExcelとかで計算速くなったりしないのかな?
Re:ベンチの為のパッチって意味があるのかな (スコア:2)
コンパイラもそういう最適化はするでしょうから、昔にコンパイルされたツールか、わざわざアセンブラで書かれたものか以外ではそもそもx87系の命令は出てこないというのも、あり得るのかな、と。
# SSEの更に次の次ぐらいまで出ていたんですね、当たり前の技術になってしまってて話題にならないので名前も知りませんでした・・・。
Re:ベンチの為のパッチって意味があるのかな (スコア:3, 参考になる)
ええ、実際そういう流れになっています。
特に、64ビット(x86-64)だとSSE2(単精度・倍精度のスカラ演算ができる)が標準装備なので、どこのコンパイラもx87ではなくSSE2を使ったコードを出力します。
32ビットでも、たとえばVisual C++ 2012はx87ではなくSSE2を使うオプションがデフォルトになっています。
/arch (x86) [microsoft.com]
Re: (スコア:0)
MinGWはmathライブラリはFPUを使うコードになってるみたいです。
Re: (スコア:0)
コンパイル時のオプションで,
コンパイラが直接SSEを出力するか
FPUを使うライブラリをリンクするかが
切り替わるようになっていませんか?
Re: (スコア:0)
Bulldozerアーキテクチャの特徴 [ascii.jp]として、2つのCPUコアでFPUを共有する構成になっているそうです。
SuperPIはシングルスレッドでFPUをぶん回すアプリなので、このFPUを共有する仕組みがオーバーヘッドになって性能が低下する、という理屈のようです。
件のパッチは、FPUを共有する片方のコアを停止させて、共有のオーバーヘッドをなくすという仕組みなのかな? だとすると、シングルスレッドで高FPU負荷なアプリであれば同様に性能が上がる一方で、マルチスレッドアプリでは逆に性能が低下するという結果になるんじゃないでしょうか。
Re:ベンチの為のパッチって意味があるのかな (スコア:2)
違います。スラッシュドット記事からもリンクされている hwbot.org フォーラムへの投稿 [hwbot.org]中で引用されている、パッチ(?)作者の The Stilt さんのコメントには次のように書かれています。
訳ではないけれど僕の理解できる範囲でまとめると:
でも速度低下の原因が何だと書いているのかは、僕の背景知識が足りなくて読み取れませんでした。
Re: (スコア:0)
「原因がなんだ」というのは書いてない様に見えますね…、CPUの(?)レジスタをいじったら速くなったと言っていますが、そのレジスタがなんであるかはAMDのドキュメントにない(仕様が非公開)なのでわからないらしいです。
非公開のレジスタをいじりまくって偶然発見した…のでしょうか?
Re:ベンチの為のパッチって意味があるのかな (スコア:2)
情報ありがとうございます。確かにそう書いてありますね。 (#2407576 を書いた時点ではいろいろ見間違えていたせいで理解できていませんでした。)
The Stilt さんのその後のコメントもちょっと読んでみました。このコメント [hwbot.org]には、「技術的な背景は調査中」としながら、「予想」として、デフォルトでは x87 命令の一つが無効化 (block) または部分的に無効化されていて、スーパーπではこの命令を多用するので、この命令を有効にすると速くなるということかも、と書いてあるように見えます。でも僕は意味がよくわかっていないので気になる人は原文を読んでください (投げた)。
僕の予想では、この命令を有効にすると CPU が賢くなりすぎて人間に対し反逆を企てることがわかったので、無効にして CPU を出荷したのだと思います。つまり The Stilt さんのせいで人類滅亡の危機…!
Re:ベンチの為のパッチって意味があるのかな (スコア:1)
一番の大本のスレッドはここですね。
http://www.xtremesystems.org/forums/showthread.php?286448-The-Book-of-... [xtremesystems.org]
ここでは、作者がAMDのconfidentialなドキュメントも参照していることが示唆されています。
(社内のドキュメントなのか、NDA下で契約先に開示されているドキュメントなのかは不明ですが…、Programmer's Guideだから社外向けのモノかな)
このレジスタはデフォルトでon(=blocked)になっていて旧来のBIOS他からは誰もoffにしにきていない、そのため特定のerrata修正で後天的にblockされたわけではなさそう(HWの工場出荷時の設定のまま動いている)…、などとは書かれていますが結局このblockされている機能が何なのかは書かれていないですね。
NDA下で契約先に開示されているドキュメント (スコア:0)
Microsoft か Sony の関係者なんだと思いますよ。
とりあえず言えるのはここまで。
Re:ベンチの為のパッチって意味があるのかな (スコア:2)
リンクありがとうございます。元の掲示板まで調べていませんでした。
ところで、紹介していただいた元掲示板での The Stilt さんのコメント [xtremesystems.org]で、
と、「confidential (?)」だから提供できないと書かれているドキュメント、検索したら support.amd.com に普通に PDF ファイルが置いてあるようなのですが…。
Re:ベンチの為のパッチって意味があるのかな (スコア:1)
そのことをそのまま連絡すれば反応が返ってくるのではないでしょうか?
Re:ベンチの為のパッチって意味があるのかな (スコア:2)
そうかもしれませんが、べつに反応が欲しいわけでもないので。 shibuya さん (でも誰でも) が連絡したければご自由にどうぞ。
Re: (スコア:0)
非公開のレジスタを偶然いじって高速化できた、は流石に信じられないな
知ってた以外に考えられない
Re: (スコア:0)
残り3セットのCPUコア対+FPUユニッツで、OS等の残りスレッドを走らせれば良いのでは?
Re:ベンチの為のパッチって意味があるのかな (スコア:1)
特定の製品が有利になるための贔屓パッチではなく、
特定の製品が本気を出せない不備を取り除くためのパッチなら、むしろ公平でしょう。
Re: (スコア:0)
x87命令セット最適化の結果スーパーπの計算が速くなるなら問題無いんじゃない?
スーパーPi クラウド対応できませんかね? (スコア:0)
毎回ひとけた目から計算って、なんかもったいない。
前回結果をサーバーにアップロードし、次回はそこから400万桁を計算とかすると
未知の領域までいけるんじゃないでしょうか。
Re:スーパーPi クラウド対応できませんかね? (スコア:2, 参考になる)
P.10に「nを1つ進めるごとに約14桁精度が上がる」とあるので、大ざっぱには、X/14個の小数点以下X桁の値を計算し、
それらを全部を足したら、X桁目まで正確なπになるとかそういう感じ。
表で考えると、縦がX/14行、横がX列の表を作って、その各枠に入る数字を全部求めれば良いことになる。
例えば、この方法で140桁の円周率を求めたとすると、縦10行、横140列の表が完成する。
次の140桁まで正しい280桁の円周率を求めようとすると、必要となる表は縦20行、横280列。
最初の表を使い回せたとしても、それが出来る部分は割と少なくなる。
ついでに、「表のある行の左半分は使い回せるから、右半分だけ新たに計算する」と言うのが原理的に難しい。
それは、各行を求める際に必要となる掛け算やらにあれこれと特殊な方法を使ってるからで、
そこを頑張るよりは、新たに計算し直した方が早い。
あるいは右半分だけ計算するような高速化法があったとしても、
そもそも、表のサイズがばかでかくて覚えておくべきデータ量が大きすぎるので、
その工夫をしない方がトータルとしては安く仕上がる。
なにしろ、使い回しをしないのなら、上で言ったような表の全体が一度に揃っている必要は実はなくて、
1行分の計算が終わったら、その行のデータは棄ててしまっても問題無い。
そうすると、表の1行分に当たるメモリかハードディスク容量だけで事足りる。
と言う辺りが最前線だと思う。
Re:スーパーPi クラウド対応できませんかね? (スコア:2)
それがそうでも無いんですよ。
binary splitting を使うと、過去の計算結果を有効利用することは可能です。
挙げられた資料中にもありますが、円周率の計算は最終結果が出るまで分数の形式で保存しているわけですが、
10兆桁の計算をする時には、前半5兆桁の計算結果と後半5兆桁分の計算結果から計算するような形になります。
(厳密にはもうちょっと複雑ですけど)
データ量がたくさん必要なのは確かにそうなのですが、最終結果の直前のデータだけ取っておけばいいので、
大体求めた円周率のデータの5倍くらいです。
なので、ゼロから計算し直すのに比べると、三分の一位の時間は節約できるんじゃないですかね。
Re:スーパーPi クラウド対応できませんかね? (スコア:1)
Re:スーパーPi クラウド対応できませんかね? (スコア:1)
実際のところ結果をまとめる一か所で行う計算が結構時間がかかるので、あまり分散には向かないですけどね。
再帰的にある程度の塊に分割して結果をやり取りすることは可能ですけど、ネットワーク越しにデータをやり取りするコストを考えると、手元で計算したほうが早い感じです。
#世界記録級の円周率の計算なんて、CPU のベンチマークというよりも、メモリやディスクI/O のベンチマークをしているようなものですけど。
Re:スーパーPi クラウド対応できませんかね? (スコア:1)
それ(前回結果をサーバーにアップロードし、次回はそこから)で効率の良いアルゴリズムだったら検討に値するのでしょうが、現状は考慮に値しないアイディアということで雑談終了になるのではないかと思います。
Re:スーパーPi クラウド対応できませんかね? (スコア:1, おもしろおかしい)
著作権侵害で逮捕されますよ
Re: (スコア:0)
素朴な疑問なのですけれども。
自動生成された数字の羅列について、著作権は成立するのですか?(著作者は誰ですか?)
しかも、いつも同じ値になる(同じ値にならなければならない)数字なのに。
Re: (スコア:0)
http://www.faireal.net/articles/4/23/#d60401 [faireal.net]
数年前に出たエイプリルフールネタなのだけどな。
マイナスモデした人も知らんのだろうな。
Re:スーパーPi クラウド対応できませんかね? (スコア:1)
名誉回復コメントおつ。(#2407378) [srad.jp]に(#2407582)で示したリンクがあればオフトピックはまだしも荒らしの評価は避けられたと思うよ。広く紹介されて記憶に長くとどまるほどウケたジョークでなかったわかりにくかったんじゃないでしょうか。
Re:スーパーPi クラウド対応できませんかね? (スコア:1)
スーチーパイの方を連想した。
BIOS関係ない (スコア:0)
マイクロコードの問題であってBIOSは関係ないような
なんらかのエラッタ対策でわざと遅くしていると考えた方がよさそう
Re: (スコア:0)
πの作者がIntelだっただけでは?
Re:BIOS関係ない (スコア:1)
Σえっ!? πの作者って、数学の神様とか古代ギリシャ人とかその手の人(?)達じゃないの?
Re: (スコア:0)
Σえっ!? πの作者って、数学の神様とか古代ギリシャ人とかその手の人(?)達じゃないの?
πを含むギリシア文字は、古代エジプトのヒエログリフに端を発しますから、πの作者ってアラブ人侵入以前エジプト原始王朝時代の古代エジプト人では?
Re:BIOS関係ない (スコア:1)
フェニキア文字が、ギリシャ文字および現在のアルファベットの元になったと世界史の授業で教わったのですが……。
ギリシャ文字 [wikipedia.org]
640GBはすべての人にとって未来永劫充分なメモリだ。
Re:BIOS関係ない (スコア:1)
ウィキペディア(日本語版)の記述をその項から辿って遊ぶと
ギリシャ文字⇒フェニキア文字⇒原カナン文字⇒ヒエログリフ
まで辿れるんで省略部分が違うだけでどっちも合っている。
楔形文字が登場しないのが残念。
Re: (スコア:0)
カール・セーガンによると、どこぞの宇宙人が数値をいじったりしているようで。
Re:BIOS関係ない (スコア:2)
Re:BIOS関係ない (スコア:1)
探せば萌えAAとか隠れてそうだなあ。
ちょっと何言ってるんだか分からん (スコア:0)
何の話ですか?
Re: (スコア:0)
タレコミ者が「パッチ」という言葉を誤用してて意味不明な文章になってる様子
Re: (スコア:0)
いや、リンクされてる「上田新聞」でパッチという言葉がすでに使われているのでタレコミ者の責任ではない。
Re: (スコア:0)
用語の意味も知らずに使ってる馬鹿なタレコミ者の責任でしょ、記事内容がその上田新聞とやらの転載とかじゃない限りはさ。
Re: (スコア:0)
上田新聞以前に作者がPATCHじゃない物をPATCHと書いているという惨状
Re: (スコア:0)
AGESA同様の方法でCPU内部のuCodeにパッチを当てているから誤用ではない模様。
BKDGに載ってるよーなMSR/PCIConfigSpaceレベルの改変ではない。
LN2使ってOCするよーなハードコアな人はuCode解析にまで手をだしているのかと感心するわ。
インテル (スコア:0)
やみちくり~(挑発)
最適化しちゃベンチの意味がないだろ (スコア:0)
ベンチは性能差を比較するための物差しなのに
特定の対象に有利になるような物差しに改造して何の意味があるわけ?
結局のこのパッチは何? (スコア:0)
気になったので、パッチ作者の投稿を流れ読みしてまとめてみました。
(英語は苦手なので、認識違いは指摘して頂けると助かります)
「Bulldozer Conditioner」の適用先
→CPU自体(推測 一般には公開されていない手法でCPUの設定を変更している?)
→Patchを展開するとWinRing0.dllが含まれており、特権命令を使って制御を
行っている様に思える。
何が問題でPiledriver系/Bulldozer系CPUで「スーパーπ」が遅いのか?
→投稿には明確な記載がないが、「AMDが内部で検出した不具合回避策として盛り込んだ、
errata修正が処理速度を低下させてるのでは」とは記載されている。
画面キャプチャにある"x87 instruction (NRAC) block"とは?
→この情報だけでは、残念ながら何を指しているのか推測不能です。