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

このエントリーをはてなブックマークに追加
938デフォルトの名無しさん:2010/03/13(土) 14:27:45
これからはErlangやScala、CCRのようなメッセージ伝達並列性が主流になる.
939デフォルトの名無しさん:2010/05/26(水) 17:20:01
WindowsおよびはUnixでC++を使ってプログラミングしています。
4コアのCPUを使っていて、1スレッドのプログラムを実行したとき、
タスクマネージャで見ると使うコアが次々と変わっていくのですが
これを抑止する方法はありませんか?
940デフォルトの名無しさん:2010/05/26(水) 17:53:41
Windows(Win32)ならsetThreadAffinityMask()
941デフォルトの名無しさん:2010/05/26(水) 17:55:29
便乗で質問させて下さい。
スケジューリングから外して、このコアはこのプロセス(スレッド)専用だからねっ!!ってできますか?
942デフォルトの名無しさん:2010/05/26(水) 19:20:17
そりゃ、無理だ。
DeviceDriverの挙動までは手が出せないからねぇ
943デフォルトの名無しさん: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
944デフォルトの名無しさん:2010/05/26(水) 22:17:14
>>943
うわーーー、知らなかった。
ありがとうございます。
Solarisなんて随分触ってなかったけど、ちょっとOpenSolarisでもいじってみます。
945デフォルトの名無しさん:2010/05/27(木) 15:18:38
OpenMPで各スレッドをそれぞれのコアに貼り付けるにはどうしたらいいのでしょうか?
Linux、g++です。
946デフォルトの名無しさん:2010/06/05(土) 06:47:40
947デフォルトの名無しさん:2010/11/21(日) 08:47:05
あげ
948デフォルトの名無しさん:2010/11/21(日) 10:52:53
Corei3なんですけどどうすればSSE2命令を並列に実行できますか?
949デフォルトの名無しさん:2010/11/21(日) 10:56:46
GPUに汎用計算させたほうが行列演算は高速になりますか?
950デフォルトの名無しさん:2010/11/26(金) 23:03:02
要はどうしたらいいんですか?
951デフォルトの名無しさん:2010/11/27(土) 02:17:48
何をしたい訳?
952デフォルトの名無しさん:2010/11/27(土) 02:35:33
それが判らないから聞いているんです。
953デフォルトの名無しさん:2010/11/27(土) 02:43:01
ヲレには心当たりが無い。残念だったな。
954デフォルトの名無しさん:2010/11/27(土) 15:58:50
まずは、パンツを脱ぐんだ
955デフォルトの名無しさん:2010/11/27(土) 16:24:34
既にノーパンで全部剃ってるけどな。舐めても安全。
956デフォルトの名無しさん:2010/12/19(日) 03:41:25
>>955
おいらの義妹はそんな下品なことは言わない。
957デフォルトの名無しさん:2011/01/24(月) 16:01:47
マルチコアってマルチスレッドで効果があるみたいだけど
マルチプロセスだとどうなの?
windowsとかのバックグラウンドプロセスにも効果でてる?
958デフォルトの名無しさん:2011/01/24(月) 18:19:30
>>957
M$のOSはしらんが、make -j<N> とかやるとちゃんと効いてるわな <Unix系OS
959デフォルトの名無しさん:2011/01/24(月) 22:40:02
>>957
Windows のマルチプロセスは組みにくい。fork() にあたるものがない。
逆に、p-thread って誰得?と時々思う。
960957:2011/01/27(木) 03:21:14
つまりですよ、マルチコアを意識して
マルチスレッドプログラミングをわざわざ書かなくても

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

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

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

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

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

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

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

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

デュアルコアになると、レスポンスが向上したり、バックグラウンドでプロセスを動かし
続けたり出来て、分かり易い恩恵があるよ。マルチコアと言っても、携帯ならデュアルで
十分で、クアッドとかは要らないだろうね。
965デフォルトの名無しさん:2011/02/04(金) 09:46:23
>>964
なるほど。
マルチコアの時代でもC++やJavaが主流のままなのでしょうか?
966デフォルトの名無しさん:2011/02/04(金) 10:40:14
HPCの世界はもう既にマルチコアの時代だけど、C/C++ばかりだねぇ。
967デフォルトの名無しさん:2011/02/04(金) 10:54:24
>>966
速さを重視する分野でC/C++を使うのは分かるんですが、生産性と両立させなければ
ならないような分野ではどうなんでしょうか?スレッド管理を手動で行う言語では、
大規模開発ではバグを誘発するような気がします
968デフォルトの名無しさん:2011/02/04(金) 10:56:56
問題は、C/C++以外の言語をHPC用にチューンするコストを誰が掛けるかだな。
969デフォルトの名無しさん:2011/02/05(土) 00:02:49
一応 Intel の TBB とかもあるけど、広範に受け入れられているかというとどうなんだろうね。
970デフォルトの名無しさん:2011/02/05(土) 00:14:14
あ、C/C++ 以外の言語か。HPC は特殊な世界だから、カリカリにチューニング出来る
C や C++ が当分はのして行くと思うけどな。CPU 使用時間単位で課金されたら、
誰でもそうすると思われ。
971デフォルトの名無しさん: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];
}
972デフォルトの名無しさん:2011/02/19(土) 17:08:40
なるほど。まずは質問を投機的にマルチスレッド化したわけですね。
973デフォルトの名無しさん:2011/02/19(土) 17:34:16
ワロタw
974デフォルトの名無しさん:2011/02/19(土) 17:38:29
ダメだこりゃ。
975デフォルトの名無しさん:2011/02/19(土) 19:38:09
>>971
フォートランで書くといいと思うよ
976デフォルトの名無しさん:2011/02/19(土) 19:43:08.14
根拠は?
977デフォルトの名無しさん:2011/02/19(土) 20:04:11.60
並列構文使えば勝手に並列化してくれる
978デフォルトの名無しさん:2011/02/19(土) 22:04:24.31
それが最適化されてるか検証が面倒。

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