• ベストアンサー

メニーコアアーキテクチャ

メニーコアアーキテクチャに必要なOSとアプリケーションは、どうあるべきかを互換性の問題を含めて、考察せよ。 という問題が大学で出ました。 丸投げなんですけど どうあるべきなのか、どんな答えでもいいので教えて下さい。 メニーコアアーキテクチャとは、CPUの数自体を増やすことによって性能の向上を図ることだそうです。(ネットで調べました。)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 まず先に、情報処理学会Fit2006のイベント企画「これからが面白いプロセッサアーキテクチャ」を先にgoogle検索して内容を確認して下さい。2年半前の見解によれば、「コアの数なんてどうでもいい」も十分説得力のある回答のようにも思われます(お粗末ですが)。 冗談はともかく、最近の見解では次のように考えられます。  many-coreはSONYとIBMが開発してゲーム機のプレイステーションに搭載してあるヘテロジニアスなものではなく、同じCPUを並べたホモジニアスなコアとなることが決まってきたようです。理由はいろいろあると思いますが、やはり同じCPUを並べた方がプログラミングし易いのは明らかで、癖がないことを理由に選んだ結果であろうと思われます。  昨年の9月末に、ネットのニュースで、many-coreを今年中半期には8個のmulti-coreの出荷が始まるが、データ並列は実現されているもののタスク並列が依然として解決されていない旨の報道が相次いでなされました(goole検索「止まらないメニーコアの流れと課題」)。今まで、Intelの宣伝によればhyper threadingの技術でmulti-coreなども問題なく対応できるかのごとくなされていたし、事実私たちもそう考えていました。この半年後のmulti-core出荷というときに「データ並列は対応できているが、タスク並列は実現されていない」との矢継ぎ早の報道は、寝耳に水といったところです。これが、情報処理学会Fit2006の見解が生まれた背景となっています。  では、「many-coreにソフトウェアがまだ対応していないのか?」と云えば、実は誰も知らないだけのことで、それがあるようです。英語版google.comで「unix scalar programming」を検索して下さい。そのトップページの最初のpdfファイルを見て下さい。そこの3ページ目にソフトウェアのあるべき姿が図示されています。すなわち、アプリケーションはC言語で作成し、各アプリケーション間のコミュニケーションはシグナルを使って同期をとって行うものです。すべての実行アプリケーションはセキュリティによって厳しく守られているため、ハードウェアの視点からみれば、アドレス線やデータ線(まとめてbusという)はOSによって制御されているため、一般ユーザからの制御は許されません。唯一残っているのはシグナル線だけなのです。Linuxでしたら「ctrl+c」、windowsでしたら、ウィンドウズが消えないため「閉じる」という表示をマウスでクリックする動作がシグナル線の操作に相当します。ついでに図を補足しますと、この事例の上の図がIntelのいうデータ並列に相当します。下の図がIntelなどが出来ないと騒いでいるタスク並列に相当します。  このような操作は、プログラミング環境が整っていなければなりません。google.comのpdfファイル最後の5ページを見て下さい。例えば、AとBという2つのアプリケーションを動かす場合を考えましょう。OSから見れば、AとBは実行形態としてプロセスという単位で管理しています。single CPUの場合、プロセスはCPUが1つであるため、round robinという巡回方式を採用して時間を細かく切って割り振って、わざわざA∩Bとならないように取りはからっています。例えば、割り当てられたプロセスはその割り当てられた0.05秒を実行したあと、さまざまなプロセスが実行された後、そのプロセスの実行まで待たねばなりません。その間、プロセスの実行は止められ、memory stackに退避させられて出番を待っています。many-coreになると、このround robinの次の順番待ちが解消され、常時CPUは稼働状態になります。もちろん、 プロセスAとBは、A∩Bではない関係を保持しています。singleの0.05秒のために待ちながら処理するか、それともmanyの常時稼働状態で処理するかのどちらが処理能力が高いかを考えると良いでしょう。  thread技術は、このmany-coreで割り当てられるプロセスをタスクとして占有して処理するハードウェア技術です。round robinでその都度、OSが実行時間を確認しているのですが、その都度、タスクが裏で実行されているタスクさえも切り替わってしまうことになり、single CPUでは問題にならなかった問題が目に付くようになってきたのです。そもそも、たった1つのプロセス(プログラムを走らせた状態)で内蔵coreすべてを稼働させることじたい、誤りなのです(utube 検索「3.14159」参照)。すなわち、thread技術はA∩Bという使い方をしているし、そうしていたということです。  したがって、ソフトウェアはAやBの実アプリケーションの真集合に対する補集合(A’、B’あるいは全体集合U)という考えが必要であり、全体をもとめる真に対する偽の排他的ソフトウェアが必要になるのです(virtual programming language)。互換性については、問題は何ら発生しません。また、OS(kernel)はモノシリックではmany-coreのシグナルを処理するには限界があるため、自ずとマイクロkernelになるでしょう。また、マイクロkernel自体もプロセス切り替えなどに1つのコアではとても対応できるものではありませんから、kernel自体が2つあるいは3つのコアと連動するsuper micro kernel(仮称)になるでしょう。  ただし、その前に難題が立ちはだかっています。busです。Multiple Instruction Multiple Data stream(MIMD)であるため、道幅を広めてやる必要があります。狭い路地に何万台もの自動車が一気に押し寄せてくるのです。many busをどう構築するか。とにかく、CPUと比べると亀と例えても間違いではないくらいメモリの書き込みに時間が費やされるため、ストレスなくメモりを稼働させるハードウェア技術が求められています。

jappy-
質問者

お礼

うおぉぉぉ!!! こんなにも丁寧な解説ありがとうございます!! とても助かりました。

その他の回答 (1)

回答No.2

Gustafson’s lawが日本ではほとんど知られていないようなので、出題背景を含めて、更に説明を追加しておきます。  確か、32ビットCPUのIntel 80386、30MHz(?)辺りから、CPUに比べてメモリの速度が遅いためCPU側に waitを挿入してメモリとのタイミングをはかっていました。このwaitという空いた時間はCPUは何もしていないため、CPUを有効利用しようということで kernelからは見えない小さなプロセスとして誕生しました(OSに影響を与えない)。90年代半ばには、主流のCPUの使い方となり、2000年以降は我先に見えないthreadから見えるマルチthreadと変貌をとげてきました。   ところがthreadは、デュアルコアではpdfファイル1ページ(前回答参照のこと)に示したように、1つのタスクで2つのCPU、すなわち全CPUを使っているのです。kernelは、タスクではなくプロセスとして管理し、プロセスを空いた1つのCPUに実行プロセスを割り当てます。また、このkernelの動きはコンピュータ・システム全体として見たとき、至極当然のことであり、最良の手段であると考えられます。しかし、このkernelの1つのCPUを管理という挙動は、threadのΣプロセス=タスクの挙動とは相容れないものとなっています。この背景から大学の出題となっています。  一方、仮想プログラミング言語では、「kernelがプロセスとして管理している環境下でプログラミングする」という背景から生まれています。したがって、threadのように「OSをどうしよう?」という難題は起きず、根本的にOS自体が大きく変わることはありません。ただ、実行プロセスが簡単に100を超えますから、kernelスケジューラの負担が比例して大きくなります。また、特にsignalを多用するため、瞬時の切り替えが必要になってきます。このとき、早急なスケジューラ反応となるようなkernelの機構改善は避けて通れないということです。  蛇足として、「なぜ、今、データ並列(data parallelism)とタスク並列(task parallelism)なのか?」の説明を加えておきます。その前に、参照URLは「タスクとデータの並列処理」をgoogle.jp検索し、Intel ディレクター James Reinders氏の字幕付きビデオを見て下さい。また、「Gustafson’s law」をgoogle.comで見て下さい。   あるシミュレーションとして、x,y,z の3次元空間を考えた場合、 ------------------------------------------- for (x = 0; x =< x_max, x++) {  for (y = 0; y =< y_max, y++) {   for (z = 0; z =< z_max, z++) {    式 f(x,y,z); } } } ------------------------------------------- のようなループ構造が考えられます。これを外側のxについてCPU数分分割して、CPUに分担させれば計算を早く済ませることができます。それが計算速度向上の第一段階であるデータ並列です。  ところで、forの中に記された式 f(x,y,z) は、偏微分方程式(長い式となる)が使われます。その計算は参照pdfファイル4ページに示したように Newton-Raphon法のような、1つのデータ群に対して多くの処理が重なるということです。それがタスク並列といわれているものです。  実現済みの外側ループのデータ並列と式f(x,y,z)のタスク並列が実現できれば、理想のコンピュータ計算環境が実現することになり、最速のスーパーコンピュータが出来上がるということになります。そのとき、見てわかるように vector型、scalar型という色分けはありません。

この投稿のマルチメディアは削除されているためご覧いただけません。

関連するQ&A

  • DualCPU 1つ故障したら?

    マルチプロセッサ対応OSでDualCPUとして動作していた場合、 1つのCPUが故障した場合、もう1つのCPUで正常に動作できるのでしょうか? それともOSもろともこけてしまうのでしょうか? というのも、DualCPUが性能向上とともに信頼性の向上があるかどうかを知りたいもので。 1CPUコケたら丸ごとコケる では信頼性が落ちてしまいますよね...。 #OSによって違うのかな?

  • ADSLについて初心者から質問、、

    ADSLにすればインターネット接続がとても速いと聞きました。私は近々パソコン自体の買い替えを予定しており、次のパソコンは今のパソコン(←3年前の物)よりもはるかに性能を高くします。 そこで質問なのですが、CPU等の性能の向上はネット接続の速さ向上と関係ありますか?もし関係あるのなら(性能を上げると接続も速くなるなら)ADSLにしなくてもいいかなと思いますが、もし関係ないのなら、いい機会ですし、現行のISDNからADSLに替えようと思います。どうでしょう、、

    • ベストアンサー
    • ADSL
  • 大学の実験の考察について

    大学で実験をしました 実験の内容はあまり質問と関係ないので省きます そしてレポートの課題が出ました その中の一つに考察を書けというのがありました それは「…(実験結果)はどうしてそうなったのかを考察せよ」というものです こういうタイプの考察はどう書けば良いのでしょうか 教科書は与えられていないのでインターネットで調べて答はわかったのですが、どう書けばいいのかわかりません 調べたことを書いただけでは考察とは言えませんよね? 自分で考え付いたかのように書いていこうかと思いましたがその答は普通の大学生が思いつく答では到底ありませんでした どのように書いていけば良いのでしょうか また、今回はたまたまネットで答がわかりましたが、もしもわからなかったときには誤った推測を書いて提出して良いものでしょうか 回答お願いします

  • 32ビットOSのメモリ空間認識

    32ビットOSのメモリ空間認識 ちょっとわからなくなったので教えてください。 32ビットOSが認識できるメモリ空間は、4Gバイトということはあちこちの質問や回答で見受けられます。 では、16ビットOSは1Mバイトしかないかというと、そうではありません。 WINDOWS3.1やMEでさえも大きく拡張されています。 サーバー用のOSなら超えてるそうですが、では、こういった拡張が、なぜサーバー以外の通常の32ビットOSでは、採用されないのでしょうか。 なぜ、かたくなに、4Gバイトを守っているのでしょうか。 互換性がなくなるということはあるかとおもいますが、それはアプリケーションのほうだと思います。 64ビット0Sのほうが、OS自体も、もっと互換性がないのではないでしょうか。 昔と違ってより簡単に、より高性能に拡張できるような気がするのですが、4G以上使いたかったら64ビットOSにしろ、という内容しか見たことがありません。 マイクロソフトの陰謀などということはないと思いますが、何か理由があればどなたか教えてください。

  • Lenovo 8799のシステムボードの互換性

    Think cenntre 8799-98J のシステムボードが故障と思われますので 8799-A15の中古品のシステムボードをもとめ、交換したいと考えていますが、互換性があって、出来るでしょうか。 交換は 「保守マニュアル」を持っていますので その記述により出来ると思います。 また 98JのCPUはCore2Duo E6300 @1.86GHz ですが A15はCeleron D341@2.93GHzです。 CPUを交換することはできますか。 また交換が性能向上に役立ちますか。 (CPUグリスなどがないのであまり性能向上が期待できなければ交換はやめたい) また、システムボードをハード的に交換した 後 他に何かやることはありますか。 PCに詳しくないので、よろしくお願いします。

  • 4/15のプロジェクトX TRONについて

    先日の放送で、「エンジンの制御システムにTRONを使った」という話の中で、 「TRONの採用によってコストダウンとエンジンの性能(燃費?)が向上した」 と言っていたのですが、なぜTRON(つまりはOS?)の採用によって性能が向上するのでしょうか? TRON自体はフリーなのでコストダウンはまだ分かるのですが、性能の向上についてはどうしても分かりません。 よろしくお願いします。

  • このソフト、使えますか?

    よろしくお願いします。 私の今使っているグラフィックソフトのCPUの動作条件↓ Intel Pentiumプロセッサ及び互換プロセッサ500MHz以上(1GHz以上推奨) だそうですが、新たに買うPCのCPUはAMDSempron3400+というものだそうです。(安さにつられて設計。) これは互換プロセッサ500MHz(1GHz以上)に該当しますでしょうか? Penから2,3割引の性能と単純に考えてOKですか?(今はPen4 2GHz使用中。) PenのどこまでがこのCPUで動作できるのかも教えていただけたら幸いです。 こちらでログを拝見しているとシュミといえどグラフィック系メインな私にとってはかなり弱そうで、 ダメそうなCPUな気がしてかなり後悔しているのですが、 いや、いいCPUだよ!というお答えもお待ちしてます…。 メモリは1G積みました。ハードディスクは300GBなのでそちらは心配ないかと思ってます。

  • CPUの交換等について

    現在使用していますPCのCPUについて性能向上を考えております。 CPU等の交換もしくはこうやれば向上するよ・・・とかあればお教えください。 現在のPCは・・・ COMPAQ EVO D310ST/CT OS:WIN2000 SP4 CPU:CELERON 1.7GHz メモリ:128MB(標準)+512MB(増設)

  • 半導体の技術革新は、なぜ速い?

    ムーアの法則によれば、「半導体チップの集積度は、 およそ18カ月で2倍になる」そうですね。 集積度の向上は、CPUなどの性能向上につながるわけですが、 なぜこれほど技術の進歩が速いのでしょう? 新技術の開発が簡単だから? 企業がそれに力をいれているから? それとも、ほかに何か理由があるのでしょうか?

  • パソコンのメモリのこと教えて下さい!

    「メモリは多ければ多いほど処理能力が向上することになります。」と書いてあるのを読んだのですが、これは間違いではないのでしょうか?使用するOSやアプリケーションによって必要なメモリが足らない場合は、スワップして処理能力が落ちてしまいますが、必要以上にメモリを増やしても処理能力は向上しないですよね。 どう思われますか?教えてください。