- ベストアンサー
ハイパースレッディングとVC
VC6にて開発する際、ハイパースレッディングに対応したCPUと非対応のCPUで開発時に何か特別な意識が必要でしょうか? 私の認識では、これらはOS、コンパイラが対応しているか否か?という問題だけであり、開発者としては特に何も必要ないと思っています。またそのような記述は本、ネット上で何度か見た記憶があるのですが、それらを公式に(?)記述したページが見つからずに困っています。 一応、Googleにて調べてみたのですが、該当するようなページがなかなか見つかりません。 それらを記載しているようなページがありましたら教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#2です。 意図してCPUの情報を得ようとしない範囲で、OSのAPIにCPUが何であるか、数が幾つあるかに関連するエントリが幾つありますか? そのエントリが意識しなければならいものです。 どうしても権威主義者を納得させたいのでしたら、インシデント使用してMSDNに質問を出せばいいのでは?
その他の回答 (5)
- terra5
- ベストアンサー率34% (574/1662)
デュアルでも正常に動作すれば十分かと、 デュアルの性能を生かす必要があるかではプログラムの作りが違ってきますね。 今の所正常に動作するかどうかという点しかあがっていませんが、 それだとできたアプリケーションはシングルと同程度の速度でしか動かない可能性が高いと思います。 意図的にマルチスレッドを使い、複数のスレッドが本当の意味で同時に動作できるつくりにしないと 速度はでないと思います。 例えば、膨大な計算量を必要とするビデオのエンコーディングや 3D CGの計算などはデュアルで性能が出せる作りになっていないと真の意味ではデュアル非対応と言うべきでしょう。 また、ハイパースレッディングとデュアルでは実際いろいろと違いがありますから、 HTで性能だす場合もそれに向いた作りにする必要があるように思えます。 あと、Windowsだと1CPUでCPU占有する作りにしてもそれほど問題無く動くことは動きます。 リアルタイムプライオリティ使えば別ですが。 で、元の質問の回答としては、違いは意識する必要があると考えます。 意図しないとまともに動かない可能性があること、マルチCPUの性能を生かすならそういう作りにする必要があることです。 まあ、何も考えなくても正常に動くプログラムは多いとは思いますが、内容によりけりでしょう。
お礼
回答有難うございます。 とりあえず締めます。 >意図しないとまともに動かない可能性があること この件についてはNo5の方へのお礼の件で書いた内容と理解しました。 なお今回の件に関しては「パフォーマンスが十分に発揮できない(可能性がある)」と言う事については考慮していません。動く動かないというレベルの話でした(質問に書いてないと言われるかもしれないですが(^^;)) そういう訳で、それに伴い「デュアルで性能が出せる作りになっていないと真の意味ではデュアル非対応」という点については考慮しません(Spin-wait loop問題等でパフォーマンスが著しく悪化する等については考慮の対象ですが・・・)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>貴殿が言われている問題は、結局の所、No2の方の言われている1の問題、という認識でよろしいですか 同期だけとは限りません。複数のスレッドやプロセスが非同期であれ発生します。 シングルCPUでもマルチスレッドのプログラムでは同様の障害は起こりえることですが、マルチCPUでは異なる症状になる可能性もあります。
お礼
何度も回答有難うございます。m(__)m とりあえず締めます。 「元々抱えていた(であろう)問題が、同期、非同期等にかかわらず顕著になる可能性は秘めている。 さらに起こった際に、シングルCPU、マルチCPUで現象が異なる可能性も秘めている」と理解しました。 ありがとうございました。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>すなわち質問は「デュアルCPUにしたPCを対象にしたプログラムを開発する際、シングルCPUを対象にした場合と比べ、開発時に何か違いがあるか? 最初からそのように質問すべきでは? teiou68kさんの質問文ですと、物理的なデュアルCPUとHT時におけるプログラミングの違いという風にしか読み取られても仕方ありません。 結論から言うとあります。 1つのCPUを占有するような処理をさせた場合でも、残りのCPUは使用可能なので他のスレッド、プロセスは問題なく動作します。逆にシングルCPUの場合は明示的に明け渡すことが必要になります。このため、複数スレッド間の同期、優先順位がよりシビアになります。 マルチCPU対応のソフトをうたうなら、マルチCPU上でのテストは必須です。
補足
回答有難うございます。 私の書き方が悪くて誤解させてしまったようで申し訳ないです。 貴殿が言われている問題は、結局の所、No2の方の言われている1の問題、という認識でよろしいですか?
特別な意識は不要だと思います。 しいて挙げれば 1.同期の不具合が、シングルCPUでは表面化しなくてもデュアルCPUでは表面化する事がある。 2.CPUの数を考慮してスレッドを作成するような場合、ハイパースレッディングを数に含めてしまうとパフォーマンスが低下する事がある。
補足
回答有難うございます。 しかし(くどいようですが)求めている答えはそういう事ではありません。 >特別な意識は不要だと思います。 私もそのように考えています。 ただ、そう言いきるための根拠が欲しいのです。その根拠のために出来れば公式ページ、そうでなくても技術的に解説したページが知りたいのです。 私も様々なBBS等で「(マルチCPUであっても)特別な意識は不要」とは考えていたのですが、ではそれが本当なのか?何の根拠に基づいて言い切れるのか?と言われれば答えに窮してしまいました。
- sha-girl
- ベストアンサー率52% (430/816)
Hyper-Threading技術は 仮想的にデュアルCPUにするものなので マルチスレッドで走らせれば、その差がでるかと思います。 勿論、OSがデュアルCPUに対応している必要があります。(Windows2000等)
補足
回答有難うございます。 しかし求めている答えはそういう事ではありません。 私>それらを記載しているようなページがありましたら教えてください。 というのが質問です。 貴殿>仮想的にデュアルCPUにするものなので と言う事も既に調査済みです。 すなわち質問は「デュアルCPUにしたPCを対象にしたプログラムを開発する際、シングルCPUを対象にした場合と比べ、開発時に何か違いがあるか?私はないと思うが、それを明記するページ(出来ればIntel、MicroSoft)を教えて欲しい」という質問とニアリイコールです。(ただし物理的に2CPUのマシンとハイパースレッディングに対応したCPUを搭載したマシンとで挙動が変わらない前提。)
お礼
何度も回答有難うございます。m(__)m >意図してCPUの情報を得ようとしない範囲で、OSのAPIにCPUが何であるか、数が幾つあるかに関連するエントリが幾つありますか? >そのエントリが意識しなければならいものです。 なるほど。そういう考え方も出来ますね。 >どうしても権威主義者を納得させたいのでしたら、インシデント使用してMSDNに質問を出せばいいのでは? これも最終的には考えています。