アカウント名:
パスワード:
# コンピュータアーキテクチャは専門外なので嘘をついてたらごめんなさい.
大きな違いとして,メモリ帯域の不足があります.
今のところプロッセッサ外部へのアクセスはダイの端からしか出来ません.そのため,1ダイ上に数十以上のコアを実装する場合には,全てのコアがメインメモリに直接アクセスすることは不可能になります. この問題を解決するためには,コアやコアグループに局所的なメモリ (≠メインメモリのキャッシュ) の上で処理を行うようにソフトウェアを作らなければなりません. また,同種の作業をコアに割り振るとメインメモリに負荷が集中してしまいますので,処理を段階に分け,コア間でメインメモリを経由せずにデータを受渡すようにパイプライン化する必要があります.
不均一なメモリアクセスという点は既存の NUMA システムと同じですが,メモリにかけられるコストが少ないため,プロセッサ能力に対するメモリ帯域の不足はより深刻になるでしょう.また,局所的なメモリ上での処理という点がクラスタシステムと共通していますが,分割の粒度や局所メモリの量,競合する資源の取り扱いが異なります.
#1379490 の AC です.門外漢の妄言なので,識者の突っ込みを期待しています.
私も,現存するプロセッサではCELLのSPEが一番近いと思います. 一番大きな違いは,SPEがリングバスによる1次元接続であるのに対して,メニーコアでは接続トポロジが2次元メッシュ (積層される場合は3次元?) になることでしょうか.
メニーコアプロセッサ上でマルチプロセスOSを動かす場合,プロセスに対するコアの割当てはOSが行うことになると思われます. この時,プロセスの処理内容によって,コア数だけではなく,割当てる領域の形も考慮する必要があります. プロセスはどのように領域を要求するのか,また,OSはどのように最適な割当てを行うのかという問題を解かなければなりません.
これを詳細に行おうとすると,ほとんどプロセッサ設計 (リコンフィギュラブルプロセッサの使用) になってしまいます. 全てのソフトウェア開発者にこのような作業を課すのは負担が大き過ぎますから,プロセッサやOS,プログラミング言語が上手く抽象化することになるのでしょう.
最先端の研究ではどのような方法が提案されているのでしょうか.興味は尽きません.
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie
高並列プログラムを書いたことがある人は結構いる (スコア:3, 参考になる)
100台から数千台の規模のPCクラスタも日本に100じゃきかないぐらいあるので、
並列プログラムを書いた人は数千人はいると思う。
でも、マルチコアは、それとはまた少し状況が違うでしょうね。CUDAみたいな
ものと、これから出てくるマルチコアも様子が違うだろうし。
Erlangとかの論理型プログラミング言語は懐かしいけど、
メモリネックが見えてるのでだめだと思う。局所性の高い並列処理に向いた
データ構造に馴れれば、それなりの性能は出ると思うので、プログラミング言語
自体は、並列処理がスレッドなりで入っていれば、どれでも良いです。GCが
入っている言語は実装が厳しいだろうと思う。
Re: (スコア:0)
#耐障害性などはサーバー用途の SMP 機と比べるとダメダメだと思いますが。
Re:高並列プログラムを書いたことがある人は結構いる (スコア:3, 興味深い)
皮肉じゃなくて、一定時間CPUを独占できるシミュレーション用の計算といつどのコアに割り込みが入ってくるか
分からないPC用途ではプログラミングモデルが同じではうまくいかないでしょう。
nコアあるからn並列にしたら1つだけウイルススキャンに持って行かれて効率が半分に落ちるとかありがち。
SMPだとできるだけ粒度を大きくして通信のオーバーヘッドを減らす工夫がされますが、メニーコアでは粒度を
小さくして空いているCPU資源をその場で見つけて利用する形になるのではないかと。
Re: (スコア:0)
>分からないPC用途ではプログラミングモデルが同じではうまくいかないでしょう。
すべての SMP 機が CPU を独占するシミュレーション用なら同意します。でもそうじゃない。SMP 機はいろんな用途に使われてます。
>SMPだとできるだけ粒度を大きくして通信のオーバーヘッドを減らす工夫がされますが
普通の SMP なら変数に値を代入するだけで通信が発生するので、粒度を大きくする工夫をするためにはプログラミング言語に CPU と主記憶装置(メモリー)間の通信を制御する機能が必要ですが、そういう言語は知りません。教えていただけませんか。
Re: (スコア:0)
数千CPUのSMP機で行う「いろんな用途」が何を指しているか言っていただかないと答えようがないです。
まさかサーバープログラムのことではないですよね。
> 普通の SMP なら変数に値を代入するだけで通信が発生するので、粒度を大きくする工夫をするためには
> プログラミング言語に CPU と主記憶装置(メモリー)間の通信を制御する機能が必要ですが、そういう
> 言語は知りません。教えていただけませんか。
「粒度」の意味を多分すごく限定
Re:高並列プログラムを書いたことがある人は結構いる (スコア:1)
> 簡単な例では1000x1000の行列の積には100万の乗算がありますが、
乗算回数は10億でしょ。
個々の要素の計算に1000回の乗算と999回の加算が必要で、その要素数が100万。
Re: (スコア:0)
粒度については、計算に伴うオバーヘッドの話だったよね?。
Re: (スコア:0)
このストーリーのタイトルが「数千コアを視野に入れるべき」。
このツリーの最初のコメントが数百から数千台の並列処理の話。
そこで出てきた「マルチコアのプログラミングなんてSMP用のプログラムのノウハウでいけるじゃん?」という的外れな指摘。
そりゃ考え方がおかしいと言われたら「僕の知ってるSMPは!僕の知ってる言語は!」と駄々こねまくり。
基本知識がなってないと反論受けたら「そんな話してませんけど?」。
これ以上恥をかきたいのかな?もう何も言わないから好きなだけやってね。
Re: (スコア:0)
アク禁食らったよ。
Re:高並列プログラムを書いたことがある人は結構いる (スコア:1, 興味深い)
# コンピュータアーキテクチャは専門外なので嘘をついてたらごめんなさい.
大きな違いとして,メモリ帯域の不足があります.
今のところプロッセッサ外部へのアクセスはダイの端からしか出来ません.そのため,1ダイ上に数十以上のコアを実装する場合には,全てのコアがメインメモリに直接アクセスすることは不可能になります. この問題を解決するためには,コアやコアグループに局所的なメモリ (≠メインメモリのキャッシュ) の上で処理を行うようにソフトウェアを作らなければなりません. また,同種の作業をコアに割り振るとメインメモリに負荷が集中してしまいますので,処理を段階に分け,コア間でメインメモリを経由せずにデータを受渡すようにパイプライン化する必要があります.
不均一なメモリアクセスという点は既存の NUMA システムと同じですが,メモリにかけられるコストが少ないため,プロセッサ能力に対するメモリ帯域の不足はより深刻になるでしょう.また,局所的なメモリ上での処理という点がクラスタシステムと共通していますが,分割の粒度や局所メモリの量,競合する資源の取り扱いが異なります.
Re:高並列プログラムを書いたことがある人は結構いる (スコア:1)
Cell ですでに実装されているものですね。 ただ Cell の場合はこの局所的なメモリにしか直接アクセスできないので、 すこぶる使い勝手が悪いと思います。
メインメモリへのアクセスについて、コンパイラかハードウェアのサポートがあれば Cell プログラミングがかなり楽になると思うんですが、そうすると今度は性能を出すのが難しくなると。
Re: (スコア:0)
数個のコアならOSの助けを借りながらやった方が既存のモデルが使えていいんでしょうけど、
今回のストーリーのような数百、数千個以上を目指そうとすると立場が逆転するかもしれませんね。
Re: (スコア:0)
>コア間でメインメモリを経由せずにデータを受渡すように
それを具体化するとCELLになる、と。
Re:高並列プログラムを書いたことがある人は結構いる (スコア:1, 興味深い)
#1379490 の AC です.門外漢の妄言なので,識者の突っ込みを期待しています.
私も,現存するプロセッサではCELLのSPEが一番近いと思います. 一番大きな違いは,SPEがリングバスによる1次元接続であるのに対して,メニーコアでは接続トポロジが2次元メッシュ (積層される場合は3次元?) になることでしょうか.
メニーコアプロセッサ上でマルチプロセスOSを動かす場合,プロセスに対するコアの割当てはOSが行うことになると思われます. この時,プロセスの処理内容によって,コア数だけではなく,割当てる領域の形も考慮する必要があります. プロセスはどのように領域を要求するのか,また,OSはどのように最適な割当てを行うのかという問題を解かなければなりません.
これを詳細に行おうとすると,ほとんどプロセッサ設計 (リコンフィギュラブルプロセッサの使用) になってしまいます. 全てのソフトウェア開発者にこのような作業を課すのは負担が大き過ぎますから,プロセッサやOS,プログラミング言語が上手く抽象化することになるのでしょう.
最先端の研究ではどのような方法が提案されているのでしょうか.興味は尽きません.
Re:高並列プログラムを書いたことがある人は結構いる (スコア:1, 興味深い)
となるとIntelの試作した80core、1TFlopsのやつなんかかな?
コア間の転送をnetwork packetの様に扱ってて、
CELL以上の変態だったはずです。
GCは必要だよ (スコア:0)
それでは非常につまらない応用しかできないので意味がないです。
#一番厄介なのは2-10000程度の並列度の時だろうなと思う、それ以上になれば逆に簡単かなぁ
Re: (スコア:0)