パスワードを忘れた? アカウント作成
16126 story

AMD、マルチコアでの処理性能最適化仕様を発表 25

ストーリー by GetSet
もっと上手にマルチコアと付き合うために 部門より

あるAnonymous Coward 曰く、

ITmediaの記事によると、 AMDがソフトウエアの処理性能をリアルタイムに評価するための命令セット拡張である 「 Light-Weight Profiling」を発表した、とのことだ。
LWPの発表は、 「Hardware Extensions for Software Parallelism」とAMDが呼ぶ取り組みの最初の成果で、 今後は高速コンテキスト切替、トランザクショナル・メモリー関連のサポートが計画されているようだ。 LWPに関しては、同時実行のタスクパフォーマンスをどのように最適化するかを、 オーバーヘッドを最小限に抑えつつ、リアルタイムで決定できるよう設計されているとのことで、 Javaや.NETなどのランタイム環境には特に有効になるらしい。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • タレコミからリンクが貼られているpdfの冒頭にあるように


    The lightweight profiling (LWP) proposal extends the AMD64 architecture (in both legacy and long mode) to allow user mode (CPL=3) processes to gather performance data about themselves>with very low overhead.


    (キャッシュのヒット率とか分岐予測の成功率などの)プロセッサの性能測定を行うために命令セットを用意しますよ.という話らしいのですが,intelのCPUに搭載されているパフォーマンス計測用のカウンタ群とは何が違うのでしょうか?

    intelだとVTuneやoprofileのような開発ツールまで整備されていますが,AMDもそれにやっと追い付いたってことでしょうか?
    • この手のパフォーマンス・モニタ・ユニット(PMU)は 計測したいイベントが起きる度にイベント回数やイベント量をカウントアップして行きますが、 カウンタがオーバーフローした時に割り込みを起こして、 そのハンドラ内でデータの収集をするというのが普通です。

      一方 LWP の場合は、 カウントアップしてオーバフローあるいはカウントダウンしてゼロになった時に、 CPU 内の PMU が自動的にメモリにイベントレコードを書き出します。 これは表側のプログラムの実行とは(ほぼ)平行に動作するようです。

      LWP を使うと、プログラムが起こしたキャッシュミスの(命令アドレス,データアドレス)の組をバッファにずんずん書き出したり、N回目の分岐命令の実行の度に(命令アドレス,分岐先アドレス)の組を書き出したりできます。これはすごく強力だと思いますよ。

      --
      コンタミは発見の母
      親コメント
    • by Anonymous Coward on 2007年08月16日 7時49分 (#1205659)
      AMDはカウンタ群はもちろん、実測に基づいたパイプラインのシミュレートまでサポートされてますよ。
      親コメント
    • by Anonymous Coward on 2007年08月16日 8時30分 (#1205668)
      >intelのCPUに搭載されているパフォーマンス計測用のカウンタ群とは何が違うのでしょうか?

      現状では、MSRに入っているため、カーネルモード(CPL=0)で無いと、モニタすらできないので、
      >to allow user mode (CPL=3) processes
      とあるように、ユーザモードでもモニタできるようにしましょう。
      あ~んど、MSR等というCPU固有のものではなく、命令として明確に定義しましょう。

      という話では?
      #なので、「Intelも付いてきてね」という話まで含むかどうかは知らない

      >intelだとVTuneやoprofileのような開発ツールまで整備されていますが,AMDもそれにやっと追い付いたってことでしょうか?

      oprofileならAthlonでも動きますが…。
      親コメント
      • by Anonymous Coward on 2007年08月16日 10時15分 (#1205716)
        AC曰く
        現状では、MSRに入っているため、カーネルモード(CPL=0)で無いと、モニタすらできないので、
        >to allow user mode (CPL=3) processes
        とあるように、ユーザモードでもモニタできるようにしましょう。

        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コンパイラ)が
        この情報を使って、生成する機械語を最適化することも可能かもね。
        と言うぐらいの意味でしょう。
        親コメント
    • >intelだとVTuneやoprofileのような開発ツールまで整備されていますが

      結構前からCodeAnalyst [amd.com]ってツールがありますよ。
      パイプラインシミュレートは面白いと思いました。
  • オフトピだけど (スコア:1, 参考になる)

    by Anonymous Coward on 2007年08月16日 9時32分 (#1205693)
    SunのRock [itmedia.co.jp]について誰か解説とかポインタとか教えてくれない?
  • by Anonymous Coward on 2007年08月16日 1時18分 (#1205602)
    専門外な上にPDFのIntroductionを読んだだけだけど、JAVA環境にあるような、動的コンパイル(でいいんだっけ?)/最適化を高いレベルの精度と粒度で実現できるようにすることが目的とあるんで、通常のアプリケーションではあまり意味がない、と言うことかな?

    別の言い方をすれば、perlやrubyのようなスクリプト言語の処理なんかでも使えそうな気がする。昨今の軽量言語や中間言語で構築されたアプリケーションだと効果高そうですね。

    で、これって実装されているんでしょうか? "proposal"だからまだ発表しただけ、な感じですけど。

    # IT Mediaの記事は意味がよくわからんかった。私が馬鹿なのか記事の書き方が悪いのか……
    # 後者だと信じたい(^^;

    • by Anonymous Coward on 2007年08月16日 3時09分 (#1205634)
      私もPDFの最初のページを拾い読みしただけですが、ユーザーモードプロセスに関してマルチプロセッサ処理の効率化に役立つ情報を収集するハードウェアを搭載してOSに拾わせる仕組みのようです。専用ハードウェアで処理を行うのでソフト側の処理にオーバーヘッドを生じさせないと。

      OSがデータを活用してくれるだけでそれなりの効果があるのでしょうが、アプリケーションの側でも、そのような処理を前提にリクエストを出したり「今プロセッサが2つ空くよ」「じゃあこれお願い」みたいなやりくりをしてやるとより効果的で、そういうやりくりは.NETなどのフレームワークにやってもらうとラクだよね、ということのようです。

      そういう意味で、フレームワークやインタプリタをかまして実行するプログラムの方が恩恵が大きいのだと思いますが、BSD系のマルチスレッド処理などではOSがその辺まで踏み込む傾向がある(のだと思う、多分)ので、素のCプログラムなどもご利益にあずかれるかもしれません。
      親コメント
      • by ef (25263) on 2007年08月16日 8時19分 (#1205667)
        > BSD系のマルチスレッド処理などではOSがその辺まで踏み込む傾向がある(のだと思う、多分)ので、素のCプログラムなどもご利益にあずかれるかもしれません。

        Hipervisor への言及も観られるので、VMM 上の OS すべてに恩恵があれば、間接的に C で書かれたようなプログラムも恩恵にあずかれる可能性はありそうです。
        親コメント
      • by shojin (28072) on 2007年08月16日 13時33分 (#1205793) 日記
        > BSD系のマルチスレッド処理などではOSがその辺まで踏み込む傾向がある
        *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]
        親コメント
    • 別の言い方をすれば、perlやrubyのようなスクリプト言語の処理なんかでも使えそうな気がする。昨今の軽量言語や中間言語で構築されたアプリケーションだと効果高そうですね。

      今の実装のままじゃムリじゃないですか?
      javaやら.netの場合ネイティブスレッドで、しかもスレッドを活用されてる先がservletやaspだったりするため恩恵に預かりやすいって事であってperlやrubyはそういう実装にはなっていませんよね?(最新のperlのvmについてはどうなのかわからんけど)
      と言うか普通のプログラムでもスレッドを活用していればOS側の対応によって効率が上がるんじゃないかしらん?
  • by Anonymous Coward on 2007年08月16日 3時51分 (#1205635)
    元ソースを読まず第一印象で、、、これはプログラマーは意識しないで使えるのかな?
    例えばJavaなら6以上にあげないとダメとか、将来の7でないとダメとかだと美味しくない。
    1.4を使っていても問題なければ、サーバ方面でのアドバンテージになりそうだけど。
    • バージョンの古い環境にこんなドラスティックな最適化が追加されたら不安定になって、古い環境を使う意味がありません。
      よってJavaなら入るとしたら8くらい。
    • 実行時コンパイルで生成されたバイナリの配置最適化などに利用できるそうなので、
      JavaVMが対応すれば、特にJavaのバージョンを問うことは無いでしょう。

      AMDだけの為に実装するほどSunに余力があるとは思えないけど、
      まあ、IBMとかどこかが対応してくれるでしょう。
  • by Anonymous Coward on 2007年08月16日 4時18分 (#1205643)
    LWP(LightWeightProcess) [e-words.jp]と紛らわしいです・・・

    # 似た分野の用語だし・・・
  • by Anonymous Coward on 2007年08月16日 8時02分 (#1205661)
    何で最適でもないのに最適化とか言うんでしょう?
typodupeerror

192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり

読み込み中...