トップページ⇒tech
987コメント322KB

【マルチコア】並列化について語る【使いこなせ】

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2006/01/18(水) 08:31:11
最近のCPUはマルチコアが技術トレンドになっています。

それに伴い、ソフトウェアは並列化というパラダイムシフトが
求められています。効率のよく並列化を実現するためにはアル
ゴリズムやデータ構造といった部分を根本から見直す必要が
あります。しかし、トレンドができてからあまり時間が経って
ないため、そいういったノウハウが蓄積されていません。

そこで、マルチコアを生かすためのソフトウェア設計というのは
どういうものか?という議論をするためのスレッドを立てました。

ソフトウェアの並列化に対して考えのある人や、インターネット
上のリソース、論文等があればどんどん書き込んだりリンクを
貼ってください。

【関連スレ】
OpenMPプログラミング
http://pc8.2ch.net/test/read.cgi/tech/1102483474/l50
0937デフォルトの名無しさん2010/03/13(土) 06:31:22
C言語の呪縛
http://techon.nikkeibp.co.jp/article/TOPCOL/20091209/178442/

この記事を思い出した。
理想はともかく現実的にはこういうアプローチも必要なんだろうね。
0938デフォルトの名無しさん2010/03/13(土) 14:27:45
これからはErlangやScala、CCRのようなメッセージ伝達並列性が主流になる.
0939デフォルトの名無しさん2010/05/26(水) 17:20:01
WindowsおよびはUnixでC++を使ってプログラミングしています。
4コアのCPUを使っていて、1スレッドのプログラムを実行したとき、
タスクマネージャで見ると使うコアが次々と変わっていくのですが
これを抑止する方法はありませんか?
0940デフォルトの名無しさん2010/05/26(水) 17:53:41
Windows(Win32)ならsetThreadAffinityMask()
0941デフォルトの名無しさん2010/05/26(水) 17:55:29
便乗で質問させて下さい。
スケジューリングから外して、このコアはこのプロセス(スレッド)専用だからねっ!!ってできますか?
0942デフォルトの名無しさん2010/05/26(水) 19:20:17
そりゃ、無理だ。
DeviceDriverの挙動までは手が出せないからねぇ
0943デフォルトの名無しさん2010/05/26(水) 19:41:55
>>939
Solaris では processor_bind(2) を使えば、スレッドを CPU に完全に貼付ける事が出来るよ。
同じ事をするコマンドで pbind(1M) というコマンドもあります。1スレッドのプログラムなら
コンテクストスイッチが無くなる分、性能も良くなります。

http://docs.sun.com/app/docs/doc/816-5167/processor-bind-2
http://docs.sun.com/app/docs/doc/816-5166/pbind-1m
http://developers.sun.com/solaris/articles/solaris_linux_app.html

>>941
Solaris では psrset(1M) コマンドで CPU のプールを作って、それをあるプロセス(スレッド)
だけに割り当てる事が出来るよ。psrset -f でその CPU がインタラプトを処理しない様にも
設定出来るから、デバイスドライバにも影響されず、ほぼ完全に CPU を占有出来ます。

http://docs.sun.com/app/docs/doc/816-5166/psrset-1m
http://developers.sun.com/solaris/articles/solaris_processor.html
http://docs.sun.com/app/docs/doc/816-5166/psradm-1m
0944デフォルトの名無しさん2010/05/26(水) 22:17:14
>>943
うわーーー、知らなかった。
ありがとうございます。
Solarisなんて随分触ってなかったけど、ちょっとOpenSolarisでもいじってみます。
0945デフォルトの名無しさん2010/05/27(木) 15:18:38
OpenMPで各スレッドをそれぞれのコアに貼り付けるにはどうしたらいいのでしょうか?
Linux、g++です。
0946デフォルトの名無しさん2010/06/05(土) 06:47:40
http://pc12.2ch.net/test/read.cgi/tech/1102483474/
OpenMPプログラミング
0947デフォルトの名無しさん2010/11/21(日) 08:47:05
あげ
0948デフォルトの名無しさん2010/11/21(日) 10:52:53
Corei3なんですけどどうすればSSE2命令を並列に実行できますか?
0949デフォルトの名無しさん2010/11/21(日) 10:56:46
GPUに汎用計算させたほうが行列演算は高速になりますか?
0950デフォルトの名無しさん2010/11/26(金) 23:03:02
要はどうしたらいいんですか?
0951デフォルトの名無しさん2010/11/27(土) 02:17:48
何をしたい訳?
0952デフォルトの名無しさん2010/11/27(土) 02:35:33
それが判らないから聞いているんです。
0953デフォルトの名無しさん2010/11/27(土) 02:43:01
ヲレには心当たりが無い。残念だったな。
0954デフォルトの名無しさん2010/11/27(土) 15:58:50
まずは、パンツを脱ぐんだ
0955デフォルトの名無しさん2010/11/27(土) 16:24:34
既にノーパンで全部剃ってるけどな。舐めても安全。
0956デフォルトの名無しさん2010/12/19(日) 03:41:25
>>955
おいらの義妹はそんな下品なことは言わない。
0957デフォルトの名無しさん2011/01/24(月) 16:01:47
マルチコアってマルチスレッドで効果があるみたいだけど
マルチプロセスだとどうなの?
windowsとかのバックグラウンドプロセスにも効果でてる?
0958デフォルトの名無しさん2011/01/24(月) 18:19:30
>>957
M$のOSはしらんが、make -j<N> とかやるとちゃんと効いてるわな <Unix系OS
0959デフォルトの名無しさん2011/01/24(月) 22:40:02
>>957
Windows のマルチプロセスは組みにくい。fork() にあたるものがない。
逆に、p-thread って誰得?と時々思う。
09609572011/01/27(木) 03:21:14
つまりですよ、マルチコアを意識して
マルチスレッドプログラミングをわざわざ書かなくても

常に他のプロセスにコアが割り当てられているから
アプリ側はふつうにシングルスレッドプログラムで
作れば十分なんじゃないかなーと思って聞いてみたわけです
0961デフォルトの名無しさん2011/01/27(木) 03:59:01
十分かどうかは処理の内容によるでしょ。
スレッドの切り替えよりプロセスの切り替えの方がコストが掛かるし、
データの受け渡しも大掛かりになる。

ピクセル単位の画像処理なんかはスレッドを使うのが普通だろうし、
ウェブサーバとかなら I/O 待ちの時間が多いからマルチプロセスでも
良いんじゃねとか、そんな感じ。
0962デフォルトの名無しさん2011/01/27(木) 06:35:58
不足すればHWを買い換えるなりすればいいから、好きな方で実装すればいい
0963デフォルトの名無しさん2011/02/04(金) 02:10:38
マルチコアになったら関数型言語が主流になりますか?
でも、マルチコアにしてまで計算能力を向上させる意味ってあるんですか?
マルチコアになることのメリットが良く分かりません。
例えば、携帯電話とか、マルチコアになって何か凄いことができるようになったり
しますか?
0964デフォルトの名無しさん2011/02/04(金) 02:42:36
>>963
>マルチコアになったら関数型言語が主流になりますか?

ならない。副作用が無いと並列度を抽出し易いとかは、絵に描いた餅。

>でも、マルチコアにしてまで計算能力を向上させる意味ってあるんですか?

あるよ。計算能力が上がれば今まで無かった様なプログラムが作れる様になったり、
プログラマが楽出来たりする。

>マルチコアになることのメリットが良く分かりません。

クロックを上げる方向の性能向上が頭打ちになったからマルチコアになったのであって、
シングルコアで性能が出せるならシングルコアの方が良かった。

>例えば、携帯電話とか、マルチコアになって何か凄いことができるようになったり
>しますか?

デュアルコアになると、レスポンスが向上したり、バックグラウンドでプロセスを動かし
続けたり出来て、分かり易い恩恵があるよ。マルチコアと言っても、携帯ならデュアルで
十分で、クアッドとかは要らないだろうね。
0965デフォルトの名無しさん2011/02/04(金) 09:46:23
>>964
なるほど。
マルチコアの時代でもC++やJavaが主流のままなのでしょうか?
0966デフォルトの名無しさん2011/02/04(金) 10:40:14
HPCの世界はもう既にマルチコアの時代だけど、C/C++ばかりだねぇ。
0967デフォルトの名無しさん2011/02/04(金) 10:54:24
>>966
速さを重視する分野でC/C++を使うのは分かるんですが、生産性と両立させなければ
ならないような分野ではどうなんでしょうか?スレッド管理を手動で行う言語では、
大規模開発ではバグを誘発するような気がします
0968デフォルトの名無しさん2011/02/04(金) 10:56:56
問題は、C/C++以外の言語をHPC用にチューンするコストを誰が掛けるかだな。
0969デフォルトの名無しさん2011/02/05(土) 00:02:49
一応 Intel の TBB とかもあるけど、広範に受け入れられているかというとどうなんだろうね。
0970デフォルトの名無しさん2011/02/05(土) 00:14:14
あ、C/C++ 以外の言語か。HPC は特殊な世界だから、カリカリにチューニング出来る
C や C++ が当分はのして行くと思うけどな。CPU 使用時間単位で課金されたら、
誰でもそうすると思われ。
0971デフォルトの名無しさん2011/02/19(土) 17:07:21
行列の計算ですが高速化する方法ありますか?
for(j=0;j<16;j++){
o=FG[a[j]]^FG[u1.m[j]];
p=FG[b[j]]^FG[u.m[j]];

for(i=0;i<16;i++){
d1[j]^=t[o][h1[p][i]];
d2[j]^=t[o][h2[p][i]];
}
buf[j]=d1[j];
buf[j+16]=d2[j];
}
0972デフォルトの名無しさん2011/02/19(土) 17:08:40
なるほど。まずは質問を投機的にマルチスレッド化したわけですね。
0973デフォルトの名無しさん2011/02/19(土) 17:34:16
ワロタw
0974デフォルトの名無しさん2011/02/19(土) 17:38:29
ダメだこりゃ。
0975デフォルトの名無しさん2011/02/19(土) 19:38:09
>>971
フォートランで書くといいと思うよ
0976デフォルトの名無しさん2011/02/19(土) 19:43:08.14
根拠は?
0977デフォルトの名無しさん2011/02/19(土) 20:04:11.60
並列構文使えば勝手に並列化してくれる
0978デフォルトの名無しさん2011/02/19(土) 22:04:24.31
それが最適化されてるか検証が面倒。

hpc用にcで最適化するってのもなんだかなあと思う。
そこまでして性能出さないと予算取りにくいほど不景気なんだろうけど。
電気自動車の性能を上げる為にマイコン積まずにフルマニュアル化しましたみたいなもので。
0979デフォルトの名無しさん2011/02/20(日) 01:06:10.88
違うな。要求性能が決まっているとしたら、pc100台要るところを1%高速化すれば1台減らせるんだよ。
1台じゃ高が知れているけど、それが10%で10台となればそれを達成するための人件費を設備費が上回ってくる。
0980デフォルトの名無しさん2011/02/20(日) 10:18:56.57
でもその為に本来の研究者の利用者がc覚えたり最適化手法を覚えたりって、研究が停滞するだけだと思うけど。
まあ実際は助手とかに丸投げして助手がhpc使いこなすのに膨大な労力と時間を浪費してるだけだとは思うが。
0981デフォルトの名無しさん2011/02/20(日) 10:37:52.88
んなもん、研究者が書いたものをSIerに高速化させるんだよ。
研究者が直接最終版までコーディングするなんてどんな低予算研究なんだ?
0982デフォルトの名無しさん2011/02/21(月) 07:48:34.87
>>981
論文読むなりして、研究者が書いたものを高速化できるほど、頭のいい人間を
抱えているSIerは稀にしかない
0983デフォルトの名無しさん2011/02/21(月) 10:52:41.29
SIerって土方の集まりだろ
0984デフォルトの名無しさん2011/02/21(月) 19:55:31.10
歳三?
0985デフォルトの名無しさん2011/02/21(月) 20:47:49.72
SIerは土方を丸投げするだけだから、知識はさらにない。
逆に今日びコードの書けない研究者はいらない子。
0986デフォルトの名無しさん2011/02/21(月) 21:00:12.24
歳三?
0987デフォルトの名無しさん2011/02/21(月) 21:04:16.14
肘肩腰。神速三段腹
レス数が950を超えています。1000を超えると書き込みができなくなります。