- ベストアンサー
マルチスレッドへの対応について
- グアドコアの登場により、最適なロードバランシングやソフトのマルチスレッド対応が重要視されています。
- 一部の高額ソフトを除いて、マルチスレッド対応度は低いままであり、マルチスレッド化の一般化への課題が残っています。
- マルチスレッド対応が進むことで、趣味程度のソフト開発者でもマルチスレッド対応ソフトが簡単に生成できるようになると期待されています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
1.現在において、1つのスレッドに対する処理能力は、十分あると思いますし。マルチコアが普及しつつある現状では、現状より重たいソフトはマルチ化に進みますので。1つのコアの処理能力を上げる方向に注力することにはならないと思います。これは、上げないという意味ではなく、プロセスルールの進歩に合わせて無理をしないという意味です。 …プレスコットは、無理しすぎてああなりました。 2.基本的に現在のWindowsは、マルチタスク型のOSで、複数のソフトを走らせることができます。とっくに「マルチスレッド対応」なわけです。それだけでもマルチコアの恩恵はあります。 また、マルチCPUを有効利用するプログラミング手法は、サーバーレベルではすでに確立しているものです。あとは、プログラマーがそれを使うか使わないかの選択だけです。 3.将来的には当然でしょう。マルチコア/シングルコアと分けて生産するだけでもむだが多いですから。現在、Celeronは、プレスコットのあまりの消費状態ですし。 Core2Duoの片肺状態のコア(片方が動かないものをこちらに回すか、わざと殺すか…)を出す可能性がありますが。これをするしないは完全にマーケティングによるもので、技術的なものではありません。 4.例えばブラウザソフトで。複数の窓を開けたときに、それぞれが別スレッドとして動く…ということは、コンパイラが自動的にマルチ化しています。これは、コンパイラの性能というより、Windowsの仕様です。そういう意味では、とっくにYesです。 しかし、エンコードのようなシリアル処理をマルチ化するには、プログラマーによる工夫が必要です(1秒ずつ分割して処理させるとか)。そういう意味ではNoです。 ただ、従来では、いくらWindowsがマルチスレッド対応OSとはいえ、マルチCPUでないシステムでシリアル処理を分割しても無駄でしたが。現在ではマルチCPUが当たり前なのですから、プログラマーもそれに合わせたプログラミングをするようになるでしょう。 あるものなら使います。それだけの話です。 ってことで。参考になりましたでしょうか?。
その他の回答 (3)
- NAZ0001
- ベストアンサー率29% (508/1743)
複数のプロセスが入っているとき、それぞれのプロセスがどれだけの処理能力を必要としているかどう判断するのか?。CPUが2つでは、プロセス間の処理能力必要量に格差があっても、無理やり1vs1の分配になってはしまわないか? ということを心配されているのでしょうか?。 タスクマネージャーのプロセスのところで、なんかのプログラムを右クリックしていただければ、「プログラムの優先度」が設定できます。もっと優先的に動いて欲しいと感じたのなら、それで優先度を上げればOKです(内部的には、もっと詳細にコントロールが可能です)。 このように、特定プロセスのロードバランスを設定するのは、プログラマー、またはユーザーです。CPUやOSが自動的に判別することはありません。 HDへの書き込みのように「軽くてもすぐに終えて欲しい」、TVのリアルタイムエンコード録画のように「重くても一定以上早く終える必要は無い」 等、プロセスの性質については、それぞれです。 性能を引き出すといっても、CPU使用率が100%以下の時には、CPUの能力がが十分足りているということですので。グラフのでこぼこを見て「ロードバランスが取れていない」というのは、違うと思います。前にも書きましたが。CPU使用率が余っているからとCDを高速再生しても無駄です。CPUとOSは、やるべきことをやるべきときに、淡々とこなしていくだけです。 >いや、無策では54以上のプロセスが共存していようとも >最適なロードバランスは望むべきもなさそうです。 1つのプロセスを、ハード的/ソフト的に自動的に分解して複数のCPUで動かすということは、考えられていません。前にも書いたように、「プログラマー/ユーザー」が決めることだからです。 近い将来に出てくるメニィコアプロセッサでは、必要ないCPUは休止するだけのことです。現在は未実装ですが、DualCoreのCPUでも、片方を休止するモードはノートPCで採用されるでしょう。従来のマルチスレッド処理をもって少数CPUでこなせるのなら、全部を動かす必要が無いです。 どうも質問の意図が、「常に全部のCPU使用率を100%でソフトを動かす方法はあるのか?」または「総てのCPUをつねに均等に動かす方法はあるのか」ということに読めてしまうのですが。「そんなことはしない」が回答となります。 1つのCPUを占有するようなプロセスなら、プログラマーがマルチ化して、CPUを増やす。マルチ化するほどではないプロセスはそのままで、使わないCPUは休む。 >利用されなければ絵に描いた餅同然ですよね? 使う使わないを決めるのは、プログラマーとユーザーですし、無理してフルタイムで使う必要は無いですし。使える使えないは、また別の話です。 この辺で、質問と回答で齟齬が出てしまったようですね。 >AMDは2CPU構成を選択したとか 選択なんてたいそうな物ではないです。IntelだってXENONでやっていますし。サーバーの世界では当たり前の手法です。4つとか8つというのは、バス幅の問題でやらないだけの話です。言ってしまえば「Intelがやっているから、対抗のために私も。でないとサーバー市場に食い込めない」程度の選択です。 以下、参考まで http://pc.watch.impress.co.jp/docs/2006/0822/kaigai297.htm http://pc.watch.impress.co.jp/docs/2006/0818/kaigai295.htm この人の記事は、ハード面で非常に有益ですので。バックナンバーを追っかけることをお奨めします、 http://pc.watch.impress.co.jp/docs/article/backno/kaigai.htm
補足
>「常に全部のCPU使用率を100%でソフトを動かす方法はあるのか?」 インターフェースの余力を除いて考えた場合 処理がある限りは全力で終わらすべきだと考えています >「総てのCPUをつねに均等に動かす方法はあるのか」 処理が手空きになってどうしてもアイドルが入る場合があるでしょう なので常に100%を実現するには 無負荷のスレッドの選別という相当高度な(?)先読み技術が必要でしょうから 現状として100%稼働は無理なのかも知れません 同様に作業量の均衡も難しいのかも知れませんね しかし資源対効果を考えると コアとしては実装個分の資源を費やしているわけですから それなりのパフォーマンスを期待したくなるのは信条じゃないですか? 出来れば100%稼働で早く終わって欲しいし その為には「作業量の偏りがあっては駄目」と言うことになりますよね? 2個コアがあっても稼働率が60%と30%では コア1個の95%で構わないのでは? となるでしょ? 2コアが広く一般に受け入れられるには 「ほぼどんな時もその良さを感じる」 と言う要素がなければ 「使ったら病みつきになる」という受入条件が満たされなくなり兼ねないと感じます そうなると世論が「不必要」のレッテルを押し 折角の素晴らしい技術が風化するのでは? と、心配するのです
- NAZ0001
- ベストアンサー率29% (508/1743)
「8コアになったから何かやろう」ではなく、「8コアでないと出来ないことがあるから8コア買おう」になるでしょう。 現状のWindowsの使い道で、そこまでの処理能力を必要とすることは、そうそうありません。「ファイルなるファンタジーが三倍速で動く!」とか「CDを100倍速で再生できるぜ!」は、意味がないですからね。 CPUの開発は、ソフトが世の要求にかかわらず進められていきます。時には、ソフトの要求をオーバーし、または要求に応えられないでしょうが。足りないときに急に開発できることでもないですので、コンスタントに性能は向上するでしょう。また、8コア等を有効に使うための「ソフトウェア技術」は、すでに存在します。 あとは、それを必要とする使い方が出てくるのを待つだけ。 3Dゲームとかエンコードとかしないのなら、4年前のPCでも十分です。 …次期WindowsのVistaは、見た目は豪華になって、処理能力も必要としますが。…こんなんが答えじゃ、しょうがないですけどね。
お礼
度々のお運び一層感謝いたします。 ちょっと調べてみたのですが タスクトレーに15~16個ほどアイコンが並ぶ私の環境では 現段階でアイドルを含め59個のプロセス数を数えました。 しかし一方でロードバランスは芳しくないようなグラフラインを示します。 たった2個のCPUでこれなのです… 一方で 今トピックスを目にしたとこなのですが、 http://plusd.itmedia.co.jp/pcuser/articles/0611/29/news038.html AMDは2CPU構成を選択したとか 今はまだ2コア×2CPUですが極近い将来に4コア×2CPUの可能性についても示唆されていました。 本当に無策で大丈夫なのかと心配になったのはこの為なのです。
補足
ご指摘頂いた「不必要では?」という点ですが、 此について過去を紐解くと、 i386時代に高名な学者が今後の予想として 「I386以上のCPU性能がなぜ必要なのか?」 と、馬鹿げたことを某地上波有料放送事業体の番組で力説していました (~ ~;)ヾ なぜそんなことになったかと想像するに、 今我々が謳歌しているマシン環境と 今日の超重たいソフトの恩恵による素晴らしい環境を、 当時の我々は、経験できていなかったからだと思います。 ハイスペックマシンを使わなければ FM-TOWNSIIでも十分だと感じるでしょうし もちろんPEN3 1GHz 3GBメモリー構成など奢った仕様だと感じるでしょう しかし此は今となっては「妄想だ」とまで言えそうですよね。 詰まりこれらのことから導き出される回答としては 案ぜずとも1度使えば病みつきになる、必要かどうかは論ずるに値しない、 それよりも、性能を引き出すには何が必要で、何が障壁となり、解決は為されるのか? こそをむしろ論じるべきだ。 ということだと私は考えています。 具体的な話ですが、 8つもコアがあるということは マルチスレッド非対応ソフトの場合 プロセス数がOSを含め8つでは平均化が図れないことから 16… いや24ないし32個は同時走行が求められると思います、 いや、無策では54以上のプロセスが共存していようとも 最適なロードバランスは望むべきもなさそうです。 実際に最適化を実現する手だては 既にご回答いただいた通り確かにありますが、 利用されなければ絵に描いた餅同然ですよね? このスレッドの意図はそこなのです 何ら意識を向けなくても高いロードバランスを常に示すマルチな環境を誰もが謳歌する… このことの実現には 現段階では一部の環境のみに限定されている マルチスレッドプログラミングの大衆化・一般化が避けて通れないと感じるのです この点については如何お考えでしょうか?
- NAZ0001
- ベストアンサー率29% (508/1743)
>アプリケーションがマルチスレッド非対応型でも >現状として1つのソフト単体でのシステム稼働が考えられない以上 >ロードバランスは高水準に保たれる >というご意見と受け取ったのですが はい。それでけっこうです。同時に、「非対応ソフトはこれ以上重くしない」という暗黙のルールで進むことになると思います。
お礼
有り難う御座います ご意見頂戴致しました このご意見は例えば もし今後グアドコア2CPU構成や、グアドにHyper thresdが搭載される等して 見かけ8コアとなっても適応されるでしょうか? もし8コアとなった場合にも 特段の方策は労じずとも良いということでしょうか?
お礼
早速のご回答有り難う御座います アプリケーションがマルチスレッド非対応型でも 現状として1つのソフト単体でのシステム稼働が考えられない以上 ロードバランスは高水準に保たれる というご意見と受け取ったのですが 相違ないでしょうか?