FC2ブログ


何か創りたい。
http://toshirr.blog13.fc2.com/
* Toshi's Recess Room - Toshi Creates. - マルチコア時代のプログラミング
<< 2018/10 - 2018/11 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 - 2018/12 >>

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[ No. ]
[ 日時 : --/--/-- (--.) --:--:-- ]
[ カテゴリ : スポンサー広告 ]


マルチコア時代のプログラミング

大層なタイトルを付けた感じがしますが、そこまで高度な知識は持っていません。
ただ単に、マルチコアなプロセッサを利用するようになって今までと考えを改めなければならなくなったことがあっただけです。
これは主に StatusFlag などのような情報表示系ツールが関係してきます。

4 コアで Hyper-Threading Technology 有効な Intel Core i7-860 上での話として読み進めてください。
ここでは、私が持っていた "前提" を崩していきます。

前提その 1 : システムに存在するプロセッサは 1 つで、実行されるスレッドも 1 つである

はい、もうこれ通用しません。
過去 Pentium M というシングルコアで Hyper-Threading Technology もないプロセッサを使っていたので、
プロセッサの情報を得たいと思ったときにそれが 1 つだけであるという前提をコーディング時に持ってしまっていました。
ですので、「プロセッサの情報をくれ、バッファは 1 つ持ってるから」と今現在のシステムに頼むと、
「わかった、まあ実はコアもっとあるんだけど 1 個目のヤツの情報返すから」と言われて成功するか、
「え?足んねーよ」と言われて失敗するかします。
StatusFlag においては、CPU 使用率に関しては前者、CPU クロックに関しては後者のリアクションになります。
これは使用している API の仕様ですので、いかんともしがたいところがあります。

ということでマルチコアに対応させようとするならば、システムに存在するコア数を得れば万事解決ですね。

前提その 2 : システムに存在するプロセッサは 1 つだが、コアは 4 つで、実行されるスレッドも 4 つである

そう、この前提、正しそうですよね。でも違う場合があります。
Hyper-Threading Technology です。これがあると実行スレッド数が倍になりますね。
これによって、CPU 使用率は論理コアごと、CPU クロックは物理コアごとに全く別々となります。
CPU クロックが物理コアごとに異なる場合が出てくるのは、Turbo Boost Technology によるものです。
ここまで考えないと正確なプロセッサの情報は得られません。

さらに「システムに存在するプロセッサは 1 つである」という前提が...となりますがそれは置いときます。
今はコンシューマ向け PC についてはプロセッサではなくコアが複数なのがトレンドのようですし、
そこまで考えるとアプリケーションというレイヤーから見るには荷が重くなりそうですし、
何より私がそういう環境を持っていないためです。
↑このセリフ、Pentium M だった頃も「マルチじゃねぇよ」って意味で言ってましたね...。
でもこれからは

(nNumberOfPhysicalCores != 1 && nNumberOfPhysicalCores != nNumberOfLogicalCores)

という前提を持つことができます。
それだけで感慨深いものがあります...。

さて、試しに Turbo Boost Technology が効いてるかどうか確かめようと思って、
CPU-Z とかで確認もしてたんですが、これを自分でコード書いてできないもんかと思い立ってみたんです。
それで Microsoft Visual C# 2010 Express を落としてきて、StatusFlag と同じ手法でやってみたんですが、
どうにもうまく取得できません。3 GHz 超えしてるはずなのに定格 2.8 GHz にしかならないんです。
いろいろ調べたら、こんなページを見つけました。

4Gamer.net ― 特徴を徹底的に掘り下げるLynnfield基礎テスト。キモは「Turbo Boost」だ(Core i7&i5(LGA1156,クアッドコア))

以下、そのページからの引用です。


 従来のIntel製CPUでは,動作クロックに同期している内部パフォーマンスカウンタを,「RDTSC」命令を使って取得することにより,例えば「1秒間のカウント数」などから,動作クロック(=クロック周波数)を得ることができた。しかし,Core i7では,Turbo BoostやEISTがどのような動作状態にあっても,内部パフォーマンスカウンタは,必ず規定のクロックでカウントアップする仕様に切り替えられた。その結果,従来の方法を使うクロック計測ソフトを起動すると,TBが利いていても規定クロックしか得られなくなったのだ。これが,Core i7のクロックモニタリングツールが(少なくとも筆者の知る限り)ほとんど存在しないことの理由である。

 ではどうするのかだが,Intelは,Nehalemアーキテクチャのプロセッサにおける動作クロックを計測法を,「Intel Turbo Boost Technology in Intel Core Microarchitecture(Nehalem) Based Processors」というドキュメントで公開している(※リンクをクリックするとpdfファイルのダウンロードが始まります)。そこで今回は,このドキュメントに従い,1秒に1回のペースで動作クロックを計り,ログとして計測できるツールを自作することにした。プログラムの知識があれば制作はそれほど難しくないので,興味のある人には,一度ドキュメントに目を通すことをお勧めしておきたい。



文中の Intel のドキュメントはこのリンクから。PDF なので HDD の方はガリガリに注意。

Intel® Turbo Boost Technology in Intel® Core™ Microarchitecture (Nehalem) Based Processors

つまり、今までのように OS の API を呼ぶだけとかそういう手段では正確なクロック周波数は得られない、そう解釈できます。
なんとパフォーマンス モニタでも得られませんでした。
Processor Information も Processor Performance も Processor Frequency というカウンタを持っていますが、
どちらも 2800 (MHz) で頭打ちになります。
結局のところユーザー モードからではどうにもならないっぽいです。
なお、コアの温度を取得する大変さも基本的には同じだと思っていいです。
(でも論理コアごとの使用率は普通に得られると思うので誤解なきよう)

というわけで、情報表示系ツールがマルチコアに本気で対応するのはキツイ部分も確かにあるのですが、
そんな需要にも対応できるライブラリがあります。WinRing0 です。

OpenLibSys.org

プロセッサの情報を得るための普通には発行できない命令を発行してくれます。
探せばあるものですね。ちなみにかの有名な CrystalMark などのツールの開発者の方です。
スポンサーサイト

[ No. 941 ]
[ 日時 : 2010/06/20 (Sun.) 23:17:01 ]
[ カテゴリ : プログラミング ]
[ コメント : 0 ]
[ トラック バック : 0 ]


コメント


コメントの投稿









トラック バック


トラック バック URI

http://toshirr.blog13.fc2.com/tb.php/941-cca93941


前後の記事

これ以降に書かれた記事 : リアクション(BlogPet)
これ以前に書かれた記事 : ――きっと、戦える。Windows 7 マシン購入雑感(BlogPet)

プロフィール

Toshi

  • Author:Toshi
  • 何かを創りたい Toshi の記録


ブログ内の検索


最近の記事


最近のコメント


最近のトラック バック


カレンダー

10 | 2018/11 | 12
- - - - 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 -


月別の記事


カテゴリ別の記事


RSS フィード


<< 2018/10 - 2018/11 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 - 2018/12 >>
* Toshi's Recess Room - Toshi Creates. - マルチコア時代のプログラミング
http://toshirr.blog13.fc2.com/
(C) 2005 - 2009 Toshi, All Rights Reserved.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。