AMD、マルチコアでの処理性能最適化仕様を発表 25
ストーリー by GetSet
もっと上手にマルチコアと付き合うために 部門より
もっと上手にマルチコアと付き合うために 部門より
あるAnonymous Coward 曰く、
ITmediaの記事によると、 AMDがソフトウエアの処理性能をリアルタイムに評価するための命令セット拡張である 「 Light-Weight Profiling」を発表した、とのことだ。
LWPの発表は、 「Hardware Extensions for Software Parallelism」とAMDが呼ぶ取り組みの最初の成果で、 今後は高速コンテキスト切替、トランザクショナル・メモリー関連のサポートが計画されているようだ。 LWPに関しては、同時実行のタスクパフォーマンスをどのように最適化するかを、 オーバーヘッドを最小限に抑えつつ、リアルタイムで決定できるよう設計されているとのことで、 Javaや.NETなどのランタイム環境には特に有効になるらしい。
だだのプロファイル機能では? (スコア:3, 興味深い)
(キャッシュのヒット率とか分岐予測の成功率などの)プロセッサの性能測定を行うために命令セットを用意しますよ.という話らしいのですが,intelのCPUに搭載されているパフォーマンス計測用のカウンタ群とは何が違うのでしょうか?
intelだとVTuneやoprofileのような開発ツールまで整備されていますが,AMDもそれにやっと追い付いたってことでしょうか?
すごく強力だと思う (スコア:5, 参考になる)
一方 LWP の場合は、 カウントアップしてオーバフローあるいはカウントダウンしてゼロになった時に、 CPU 内の PMU が自動的にメモリにイベントレコードを書き出します。 これは表側のプログラムの実行とは(ほぼ)平行に動作するようです。
LWP を使うと、プログラムが起こしたキャッシュミスの(命令アドレス,データアドレス)の組をバッファにずんずん書き出したり、N回目の分岐命令の実行の度に(命令アドレス,分岐先アドレス)の組を書き出したりできます。これはすごく強力だと思いますよ。
コンタミは発見の母
Re:だだのプロファイル機能では? (スコア:1, 参考になる)
Re:だだのプロファイル機能では? (スコア:1, 参考になる)
現状では、MSRに入っているため、カーネルモード(CPL=0)で無いと、モニタすらできないので、
>to allow user mode (CPL=3) processes
とあるように、ユーザモードでもモニタできるようにしましょう。
あ~んど、MSR等というCPU固有のものではなく、命令として明確に定義しましょう。
という話では?
#なので、「Intelも付いてきてね」という話まで含むかどうかは知らない
>intelだとVTuneやoprofileのような開発ツールまで整備されていますが,AMDもそれにやっと追い付いたってことでしょうか?
oprofileならAthlonでも動きますが…。
Re:だだのプロファイル機能では? (スコア:3, 参考になる)
MSRに入っているレジスタを設定しないと、モニタするイベントを変更できな
いというのは正しいけど、カウンタを読み出すだけなら、RDPMCと言う命令を
使えば(OSがCR4レジスタを設定して禁止していない限り)userモード(CPL=3)で
読めると思います。
その場合でも問題となるのは、、
自分のプログラム以外にそのCPUで(TSSの意味で)同時に走っている他のプログ
ラムのイベントも数えてしまう。だから、OS のサポートを受けてタスク切替
と共にカウンタの切替も行わないと意味無しって事になるわけです。
これは、ユーザレベルではどうしようもない。
更に、今回の発表には、イベントカウンタをデクリメントして、0になったら
その時の種々の情報をCPUがメモリ採取する機構を用意するって事が含まれて
います。
これと同様のものですが、IntelのPentium4にPrecise Event Base Samplingと
言う同様の機構が入っていました。
結局、目新しい話ではないけど、標準化するってのは良いことだと思います。
ただし、IntelとAMDが共通化するのは難しいかも。既に仮想化機構では差があ
りますしね。
最後に、もう一つ
この話はLWP(Light Weight Process)と言う言葉から想像されるスレッド処理
とかとは、無関係だと思います。
Javaとか.NETが出てくるのは、実行時コンパイラ(Just In Timeコンパイラ)が
この情報を使って、生成する機械語を最適化することも可能かもね。
と言うぐらいの意味でしょう。
Re:だだのプロファイル機能では? (スコア:0)
結構前からCodeAnalyst [amd.com]ってツールがありますよ。
パイプラインシミュレートは面白いと思いました。
オフトピだけど (スコア:1, 参考になる)
Re:オフトピだけど (スコア:1)
このへん [sun.com]でしょうかね。
Re:オフトピだけど (スコア:0)
"proposal"ってことはまだ未実装? (スコア:0)
別の言い方をすれば、perlやrubyのようなスクリプト言語の処理なんかでも使えそうな気がする。昨今の軽量言語や中間言語で構築されたアプリケーションだと効果高そうですね。
で、これって実装されているんでしょうか? "proposal"だからまだ発表しただけ、な感じですけど。
# IT Mediaの記事は意味がよくわからんかった。私が馬鹿なのか記事の書き方が悪いのか……
# 後者だと信じたい(^^;
Re:"proposal"ってことはまだ未実装? (スコア:5, 参考になる)
OSがデータを活用してくれるだけでそれなりの効果があるのでしょうが、アプリケーションの側でも、そのような処理を前提にリクエストを出したり「今プロセッサが2つ空くよ」「じゃあこれお願い」みたいなやりくりをしてやるとより効果的で、そういうやりくりは.NETなどのフレームワークにやってもらうとラクだよね、ということのようです。
そういう意味で、フレームワークやインタプリタをかまして実行するプログラムの方が恩恵が大きいのだと思いますが、BSD系のマルチスレッド処理などではOSがその辺まで踏み込む傾向がある(のだと思う、多分)ので、素のCプログラムなどもご利益にあずかれるかもしれません。
Re:"proposal"ってことはまだ未実装? (スコア:4, 興味深い)
Hipervisor への言及も観られるので、VMM 上の OS すべてに恩恵があれば、間接的に C で書かれたようなプログラムも恩恵にあずかれる可能性はありそうです。
Re:"proposal"ってことはまだ未実装? (スコア:4, 興味深い)
*BSDではScheduler Activations (*1) (以下、SA) を使っていることが多いということでしょうか。
自分が知る範囲ではFreeBSD、NetBSDがSAを使っていて (*2,*3)、DragonFly BSDもAPIとして同じのを使っている (*4) という時点でSAを使っている可能性が高そうです。
ちなみに、SAは効率的なM:Nスレッドの実装方法で、各々のアプリケーションが幾つプロセッサを使えるかを知り、どのスレッドをそれらのプロセッサで動かすかを完全に制御できるようにするため、アプリケーションに影響を与えるカーネルイベントをカーネルからアプリケーションに通知 (upcall) します。例えば、あるスレッドを実行していてブロックが起きた場合は、それを通知して他のスレッドを実行できるようにします。
(*1)
Scheduler activations: effective kernel support for the user-level management of parallelism
Thomas E. Anderson, Brian N. Bershad, Edward D. Lazowska, and Henry M. Levy
ACM Transactions on Computer Systems (TOCS)
Volume 10, Issue 1 (February 1992), Pages: 53 - 79
(*2) http://www.freebsd.org/features.html [freebsd.org]
(*3) http://www.netbsd.org/changes/changes-2.0.html#pthreads [netbsd.org]
(*4) http://leaf.dragonflybsd.org/mailarchive/kernel/2005-02/msg00048.html [dragonflybsd.org]
Re:"proposal"ってことはまだ未実装? (スコア:0)
今の実装のままじゃムリじゃないですか?
javaやら.netの場合ネイティブスレッドで、しかもスレッドを活用されてる先がservletやaspだったりするため恩恵に預かりやすいって事であってperlやrubyはそういう実装にはなっていませんよね?(最新のperlのvmについてはどうなのかわからんけど)
と言うか普通のプログラムでもスレッドを活用していればOS側の対応によって効率が上がるんじゃないかしらん?
Re:"proposal"ってことはまだ未実装? (スコア:0)
:wq
Javaや.NETなどのランタイム環境には特に有効 (スコア:0)
例えばJavaなら6以上にあげないとダメとか、将来の7でないとダメとかだと美味しくない。
1.4を使っていても問題なければ、サーバ方面でのアドバンテージになりそうだけど。
Re:Javaや.NETなどのランタイム環境には特に有効 (スコア:0)
よってJavaなら入るとしたら8くらい。
Re:Javaや.NETなどのランタイム環境には特に有効 (スコア:0)
JavaVMが対応すれば、特にJavaのバージョンを問うことは無いでしょう。
AMDだけの為に実装するほどSunに余力があるとは思えないけど、
まあ、IBMとかどこかが対応してくれるでしょう。
紛らわしい・・・ (スコア:0)
# 似た分野の用語だし・・・
Re:紛らわしい・・・ (スコア:0)
http://ftp.ics.uci.edu/pub/websoft/libwww-perl/ [uci.edu]
最適化? (スコア:0)
Re:最適化? (スコア:3, おもしろおかしい)
=-=-= The Inelegance(無粋な人) =-=-=
Re:最適化? (スコア:1)
実情に則して言えば「努力化」あたりが良いのかも.
結果に反映されるとは必ずしも保証されないし, にもかかわらず労力が消費されることは確実ですから.
Re:最適化? (スコア:0)
たとえ高速化した結果が平均より遅かったとしても。