CPUとソフトウェア開発に関する疑問です。


2008年現在、CPUは、クォドコアが主流だと思います。今後もCPUのコア数が増えることが予測されていますが、そのようなインテル社やAMD社が出すCPUが、メニーコア(10、16、32、64....)の時代に入ると、ソフトウェア開発者は、①「CPUのコアの速度を享受するためには」②「必ず」メニーコア対応したソフトウェアを開発しなければならないのでしょうか? それとも、メニーコアの時代でも、OS層の会社(マイクロソフトやREDHAT社)が、メニーコア対応してくれるので、その上で動くソフトウェアやミドルウェアは、特に「メニーコア対応」しなくとも良いのでしょうか?

どちらか、マルチコアやメニーコアに造詣の深い方教えていただけると助かります。

参照:
マイクロソフト HPC ニュースレター:特集 「メニーコア シフト」
http://www.microsoft.com/japan/windowsserver2003/ccs/newsletters/20080125.htm

第7回:CPUはMany Core時代へ
http://www.hpc.co.jp/news/ceotopics/070309_ceotopics.html

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/05/06 14:20:02

回答3件)

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント27pt

コメントが無効なので、回答で失礼します。


簡単な GUI やシンプルな処理を行うアプリケーション、現在でもユーザがストレスなく処理できる

レベルのもの、は特にManyCore に対応していく必要はないと思います。


また、ManyCore とはいっても、基本的なアーキテクチャは大分昔からあるマルチプロセッサに

かかわる問題がそのまま当てはまると思います。

複数の Core を利用してその性能を発揮するには、プログラムがデータと処理を分割しそれを管理

する仕組みが必要でしょう。


この目的に適した処理は、画像処理や音声処理など、シンプルな処理を大量に繰り返し処理する

タイプのアプリケーションです。

とはいってもこのためにはプログラム側での対応、もしくは提示されたURL にもありましたが、

これを活用するためのライブラリの整備が必要です。


この部分は未知ですが、少なくともManyCoreが提供され始めてから技術が習熟するまでは、

たとえOS層がManyCoreに対応したライブラリを提供しても、それを制御する部分をアプリ

ケーション側が制御しなければ、パフォーマンスは出ないと思います。


このあたりは、スーパーコンピュータで実現されてきた科学技術計算が参考になるでしょうか。

プログラムやコンパイラの最適化により、効率のよりプロセッサの利用が図られています。


マルチプロセッシング、SIMD、MIMD といったキーワードで検索するといろいろ見つかると思います。

いくつかの検索結果ですが、下記が参照にならないでしょうか。

マルチプロセッシング - Wikipedia

ストリーム・プロセッシング - Wikipedia

id:naokiatsanfrancisco

回答ありがとうございます。

しばらく考えていたのですが、貴殿のおっしゃる「 ManyCore とはいっても、基本的なアーキテクチャは大分昔からあるマルチプロセッサにそのまま当てはまる」というところで、会話をさせてください。(...よろしければ)。

確かに、SGI社のような「スパコン」の世界では、既に、メニーコア・マルチCPUを実践しています。(INTEL、AMDなどの一般人向けの汎用プロセッサではない分野では当たり前の状況、のように見えます)

日本SGI、1ラックあたり512コア搭載可能なHPC向けブレードクラスタシステム(2007年)

http://enterprise.watch.impress.co.jp/cda/hardware/2007/07/10/10...

  2048CPU構成のLinuxスパコンを導入(2004年)

  http://www.itmedia.co.jp/enterprise/articles/0410/21/news019.htm...

こういった世界では、並列処理が当たり前であり、並列化を補助するツールも多種多様に揃っている思います。(具体的にどのようなものがあるのか押さえておりませんが)

ということは、まず、OSレベル(上記例は、LINUX)は、メニーコアへの準備が整っているように見えます。しかし、一方でこんな記事もあります(http://jeffr-tech.livejournal.com/6268.html:LINUXのメニーコア性能評価)。そして、Windowsでは、(http://www.news.com/8301-10784_3-9722524-7.html:次世代Windowsは根本的に変わる)→つまり、OSレベルで、「メニーコア準備OK」なのか、「そうでないのか」2008年現時点不明確なのです。(ここが悩みどころ)

また、ミドル層もそうです。オラクル、IBM(WEBソフィア)、BEAといったミドルウェア製品は、メニーコア対応する必要がないのでしょうか? 2008年現在は、どれも対応しているかどうか、不明です。WINDOWSくらいが、声を上げ始めた程度のように見えます。(http://www.serverwatch.com/trends/article.php/3657451)。ミドル陣営は寡黙です。

最期に、アプリ層です。回答者の wdy さんの通り、並列処理機能を盛り込んだJAVAやRUBYが登場してくると思います。アプリレベルでは、ミドルよりも活発な意見が交わされています。

そうすると、「一般の(どこにでもいる)開発者」も「並列処理」を意識しはじめ、メニーコアが当たり前の世界(今から5年後あたり)では、「並列処理」が常識になるのでしょうねきっと。。。(と私は思うのですが)

一方で、このような意見があることも確かです。「将来的に、OSやミドルがメニーコア対応するから、アプリケーションは何もしなくて良い。現在のアプリに対して、並列処理的な改善を加えなくても、OSたちが、うまく、メニーコアに処理分散さる仕組みを考えるはず。。。」

果たして物事そのようにうまくいくのでしょうか? メニーコアへの疑問は尽きません。

2008/05/02 06:44:51
id:masaboz No.2

回答回数122ベストアンサー獲得回数6

ポイント27pt

①「CPUのコアの速度を享受するためには」

やはりCPUのクロック数を限界突破するしかないと思いますが、複数の処理を並列処理するように分散化するといったような、それに対応したソフトウェアを作らなければならないと思います。C言語のメモリを管理するポインタ操作と似たようなものです。やがては、それを面倒だと思う開発者も続出するのも否定できませんね。


②「必ず」メニーコア対応したソフトウェアを開発しなければならないのでしょうか?

そうです。必ずメニーコアに対応したソフトウェアを開発しなければならない。今まで特に業界の間ではよく使われるレンダリングを使うソフトウェアはデュアルCPUあるいはクァッドCPUに対応しているところが多いのも事実です。個人でレンダリングを使うとしたらビデオ編集ソフトですね。特にカノープス製のEDIUSとかですね。


しかし、必ずしも全てのソフトウェアがメニーコア(あるいはデュアル、クァッド)すら対応していないと思いますが、複数にアプリケーションを起動しながら、それぞれのアプリケーションにあらゆる処理を与えるような"並列処理"なら可能です。軽いソフトウェアですと2000年の発売された廉価版のCeleronでさえ複数のソフトウェアを並列処理しても不自由さが感じられないのが本音ですが、重たいソフトウェアを複数動かしたり、1つの重たいソフトウェアの処理を分散化するような並列処理(やはりマルチCPUに対応する必要がある)であればデュアルCPUやクァッドCPUの意味があるかも知れません。


それとも、メニーコアの時代でも、OS層の会社(マイクロソフトやREDHAT社)が、メニーコア対応してくれるので、その上で動くソフトウェアやミドルウェアは、特に「メニーコア対応」しなくとも良いのでしょうか?

いやいや、マイクロソフトは普及しないモノはあっさり捨てるので、実際はそういうものを作るのかは分からないですね。あまり期待しない方が良いでしょうか。まぁ別にメニーコア対応でも最低動作環境がメニーコア対応でなければ現行のCPUでも使えますし、推奨動作環境がメニーコア対応であれば、そのCPUを使うことによって満足するパフォーマンスを約束(必ず約束とは言い切れないが…)するといったものでしょうか。


本当はゲームなど用途によってはクァッドCPUよりクロック数の高いデュアルCPUの方が有利だったりすることもあります。現在、CPU業界では5年前からクロック数が少しも上昇していないため、このクロック数の限界突破をしない限り、このまま売上に響くので、マルチCPUやキャッシュを引き上げるなど売上を少しでも伸ばそうといった戦略をやっていると思います。要するには…デュアルCPUもクァッドCPUもCPU会社にとっては、クロック数を上げられないから、そういうCPUを出したまで売上を伸ばさなければならないのが本音でしょうね。


私の個人的な意見としてはどうしても動作処理のパフォーマンスを上げるためにはクロック数を引き上げて欲しいし、デュアルCPUやクァッドCPUはアプリケーションを複数立ち上げて作業をするか、その対応した1つのソフトウェアの中にある複数の処理を分散化して作業をする限りではないと、あまり意味がないと思います。

id:naokiatsanfrancisco

回答ありがとうございます。

確かに「クロック数を引き上げて欲しい」ですよね。ですが、クロックスピード競争は終焉し、メニーコア競争へ入るんですよね。プロセッサに依存する産業(=ほぼすべてのIT産業)は、ジレンマを感じざるをえません。インテルは、80コアの実験(タイルプロセッサチップ:

http://journal.mycom.co.jp/articles/2007/02/13/isscc1/)をしましたが、このような実験を重ねることで、なんとか今後もハードウェアの進化だけで、ソフトウェアの速度向上が望める世の中が進んで欲しいものです。以上です。

2008/05/02 07:12:38
id:wdy No.3

回答回数5ベストアンサー獲得回数0

ポイント26pt

必然的に並列処理を意識したアプリケーションを開発していく必要が生じると思われます。

一時期話題になったErlangのような

http://www.atmarkit.co.jp/news/200704/27/erlang.html

http://www.atmarkit.co.jp/news/200705/08/tim2.html

並列処理に向いた言語による開発が主流になるかもしれません。

id:naokiatsanfrancisco

回答ありがとうございます。

「必然的に並列処理を意識したアプリケーションを開発していく必要が生じる」。「必然」ということですよね、やはり。メニーコアが主流になる時代(64、128コアが各人のPCに乗る時代、今から数年後くらいの2010-12年あたりでしょうか)になったとき、眠れるメニーコアの力を活かす、アプリ開発に関する多数のいろいろな話題(しかも非常に強いインパクトのある形で)が出てくるものと(私は)仮説を持ちます。

 The Free Lunch Is Over:並列プログラムへの抜本的な方向転換(2005年)

 http://www.gotw.ca/publications/concurrency-ddj.htm

 

 クアッドコアへの移行前に、対応アプリケーションの確認を

 http://techtarget.itmedia.co.jp/tt/news/0706/07/news01.html

以上です。

2008/05/02 07:01:53

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません