[過去ログ]
マルチスレッドプログラミング相談室 その8 (1001レス)
マルチスレッドプログラミング相談室 その8 http://peace.5ch.net/test/read.cgi/tech/1253521167/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
1: デフォルトの名無しさん [sage] 2009/09/21(月) 17:19:27 マルチスレッドプログラミングについて語るスレ ■前スレ マルチスレッドプログラミング相談室 その7 http://pc12.2ch.net/test/read.cgi/tech/1215253576/ ■過去スレ その1 ttp://pc3.2ch.net/tech/kako/997/997345868.html その2 ttp://pc5.2ch.net/test/read.cgi/tech/1037636153/ その3 ttp://pc8.2ch.net/test/read.cgi/tech/1098268137/ その4 ttp://pc8.2ch.net/test/read.cgi/tech/1130984585/ その5 ttp://pc11.2ch.net/test/read.cgi/tech/1157814833/ その6 ttp://pc11.2ch.net/test/read.cgi/tech/1187008532/ OS・言語・環境は問わないが、それゆえ明記すべし。 テンプレ 【OS】 【言語】 【実行環境】 【その他特記する事項】 http://peace.5ch.net/test/read.cgi/tech/1253521167/1
875: デフォルトの名無しさん [sage] 2012/02/23(木) 01:04:22.28 >>874 SSDから。 http://peace.5ch.net/test/read.cgi/tech/1253521167/875
876: デフォルトの名無しさん [sage] 2012/02/23(木) 01:07:07.00 いやだから。 SSDがとんだけ普及してるか、は実測値に影響する項なのか?ってことだろ http://peace.5ch.net/test/read.cgi/tech/1253521167/876
877: デフォルトの名無しさん [sage] 2012/02/23(木) 01:23:30.75 普及してるかどうかは実測値には影響しないよ。 SSD上での実測値改善が見られるとありがたいけど、 世の中SSD搭載してないPCも多いから、 SSDだけで速くなるプログラムはよくないよねって話しだし。 http://peace.5ch.net/test/read.cgi/tech/1253521167/877
878: デフォルトの名無しさん [sage] 2012/02/23(木) 01:25:38.17 そっちかよ 自分とこの環境で動かすんじゃないのか http://peace.5ch.net/test/read.cgi/tech/1253521167/878
879: デフォルトの名無しさん [sage] 2012/02/23(木) 01:49:14.20 自作のハッシュ計算ツールだけど、MD5計算速度はキャッシュに乗ってる状態だと 3GHz弱のCore2Duo程度のCPUでも300MB/sは超えてるぞ。 計算のが十倍遅いってどういうことだ? HDDなんて速くても100MB/s題だと思うが… http://peace.5ch.net/test/read.cgi/tech/1253521167/879
880: デフォルトの名無しさん [sage] 2012/02/23(木) 01:57:30.10 スレッド構成を書いてもらわないとなんとも言えないなぁ 単にシングルスレッドなら100MB/s超えるしね http://peace.5ch.net/test/read.cgi/tech/1253521167/880
881: デフォルトの名無しさん [sage] 2012/02/23(木) 01:59:55.78 >>879 読み込み時間を差し引いた計算時間はどれぐらいだったの? http://peace.5ch.net/test/read.cgi/tech/1253521167/881
882: デフォルトの名無しさん [sage] 2012/02/23(木) 02:05:32.93 >>879 300MB/sってのは、MD5の関数なりクラスなりが1秒間に 計算できた情報量という理解であってる? http://peace.5ch.net/test/read.cgi/tech/1253521167/882
883: デフォルトの名無しさん [sage] 2012/02/23(木) 02:07:57.39 読み込みと計算は別スレッドで同時にやってるから正確には分からんな。 まあいろいろ状況によって時間が変わるけど、計算だけなら最速時で400MB/sくらいだった希ガス。 ああもちろん、読み込みやってもキャッシュに乗ってたら最速だとほぼ同じくらいまで行くよ。 http://peace.5ch.net/test/read.cgi/tech/1253521167/883
884: デフォルトの名無しさん [sage] 2012/02/23(木) 02:31:42.72 純粋な計算速度が負けるってのは構成が gcc+linux+Phenom X4 1.8Ghz だからなのかねぇ http://peace.5ch.net/test/read.cgi/tech/1253521167/884
885: デフォルトの名無しさん [] 2012/02/25(土) 14:26:44.01 ちょっとスレッドとは違うかもしれないんだけど メッセージキューを設計しています シグナルハンドラからキューに積みたいんですが どうしても排他制御ができません うまい方法はありますでしょうか http://peace.5ch.net/test/read.cgi/tech/1253521167/885
886: 885 [sage] 2012/02/25(土) 14:28:07.28 自己解決しました http://peace.5ch.net/test/read.cgi/tech/1253521167/886
887: デフォルトの名無しさん [sage] 2012/02/28(火) 00:27:52.96 C# の.NET4.0なんですけど List<Double> hoge は適当な値が入っているとして Parallel.For(0,hoge.Count,(val)=> { hoge[val] = 0.0; }); とした場合、常にhogeの中身が全て0.0になりますか? この処理はLockしなくても大丈夫のような気がするんですが少し心配です。 http://peace.5ch.net/test/read.cgi/tech/1253521167/887
888: デフォルトの名無しさん [sage] 2012/02/28(火) 00:38:36.19 MSの今のList<T>の実装では問題ないはずだけど保証されているわけではない でもそれデリゲート呼び出しのコストがかさむから普通にループ回したほうが速いだろ 並列でやるんなら、4コアなら領域を4分割して中でループ回したほうがいい http://peace.5ch.net/test/read.cgi/tech/1253521167/888
889: デフォルトの名無しさん [sage] 2012/02/28(火) 00:46:40.99 つまり、>>887を Parallel.Invoke(()=> { for(int i = 0;hoge.Count/4;i++) { hoge[i] = 0.0; } }, ()=> { for(int i = hoge.Count/4;(hoge.Count/4)*2;i++) { hoge[i] = 0.0; } } ・・・(以下略) とした方が良いということですか? http://peace.5ch.net/test/read.cgi/tech/1253521167/889
890: デフォルトの名無しさん [sage] 2012/02/28(火) 00:47:12.66 訂正 読み取りだけならスレッドセーフだと書いてあるな http://peace.5ch.net/test/read.cgi/tech/1253521167/890
891: デフォルトの名無しさん [sage] 2012/02/29(水) 12:48:47.15 いくつかstatic変数があって、それぞれに書き込み続ける スレッドを作ったのですが、コンテキストスイッチが発生 しまくってます(2000〜3000/秒) int a, b, c; DWORD __stdcall A(void*){ a = ... } DWORD __stdcall B(void*){ b = ... } DWORD __stdcall C(void*){ c = ... } それぞれのスレッドを単独で実行させた場合は、それほど スイッチしないので、キャッシュ競合が原因なんでしょうか。 それぞれの変数が同じキャッシュラインに乗らないようにするには どうすれば良いですか? それともキャッシュは関係ないですか? VC10です。 http://peace.5ch.net/test/read.cgi/tech/1253521167/891
892: デフォルトの名無しさん [sage] 2012/02/29(水) 21:27:49.37 なんでキャッシュでコンテキストスイッチが起こるのよ… http://peace.5ch.net/test/read.cgi/tech/1253521167/892
893: デフォルトの名無しさん [sage] 2012/02/29(水) 22:05:31.00 >>891 コンテキストスイッチは関係ない。 >それぞれの変数が同じキャッシュラインに乗らないようにするには キャッシュは8〜32バイトぐらいの単位で管理しているから、 適当に無駄なメモリを確保して、それぞれのメモリアドレスが 隣接しないようにすればよい。 http://peace.5ch.net/test/read.cgi/tech/1253521167/893
894: デフォルトの名無しさん [sage] 2012/02/29(水) 22:19:38.86 >それぞれのスレッドを単独で実行させた場合 はああ? http://peace.5ch.net/test/read.cgi/tech/1253521167/894
895: デフォルトの名無しさん [sage] 2012/03/01(木) 00:23:04.48 メモリバリアの間違い? http://peace.5ch.net/test/read.cgi/tech/1253521167/895
896: デフォルトの名無しさん [sage] 2012/03/01(木) 00:47:56.20 なんでメモリバリアが出てくんだよ http://peace.5ch.net/test/read.cgi/tech/1253521167/896
897: デフォルトの名無しさん [sage] 2012/03/01(木) 00:55:22.06 コンテキストスイッチみたいなのはCPUを占有すると起こるものなの 無限ループしてパソコンがハングしたらどうするつもりなんだろうね http://peace.5ch.net/test/read.cgi/tech/1253521167/897
898: デフォルトの名無しさん [sage] 2012/03/01(木) 01:28:54.69 1スレッドで実行→コンテキストスイッチが起こらない 3スレッドで実行→コンテキストスイッチが起こりまくる これのどこが悪いのか俺にはわからないのだがとりあえずCPUはいくつある? http://peace.5ch.net/test/read.cgi/tech/1253521167/898
899: デフォルトの名無しさん [sage] 2012/03/01(木) 08:36:10.06 >>898 cpuは4コアです。 >>897 各ループにSleepは挟んでます。 >>893 無駄なメモリを置いて、キャッシュ対策しようと思います。 また、コンテキストスイッチ数が多いのは、別の原因を探してみます。 http://peace.5ch.net/test/read.cgi/tech/1253521167/899
900: デフォルトの名無しさん [sage] 2012/03/01(木) 08:45:24.09 Sleep入れたらそりゃぁ、コンテキストスイッチもするだろうよ。 http://peace.5ch.net/test/read.cgi/tech/1253521167/900
901: デフォルトの名無しさん [sage] 2012/03/01(木) 15:54:56.63 コンテキストスイッチさせるのがSleepの目的のひとつだもんよ。 http://peace.5ch.net/test/read.cgi/tech/1253521167/901
902: デフォルトの名無しさん [] 2012/03/01(木) 16:16:45.26 static変数に書き込み続けるスレッドとか Sleep挟んでますとか キャッシュ競合を避けるとか 何 考 え て る の よ ? http://peace.5ch.net/test/read.cgi/tech/1253521167/902
903: デフォルトの名無しさん [sage] 2012/03/01(木) 16:43:35.12 マルチプロセスほど枯れきっちゃいない技術だから、ということでしょうがあんめぇ http://peace.5ch.net/test/read.cgi/tech/1253521167/903
904: デフォルトの名無しさん [sage] 2012/03/01(木) 17:01:12.69 スレッドとかどう捉えてるんだろうね? http://peace.5ch.net/test/read.cgi/tech/1253521167/904
905: デフォルトの名無しさん [sage] 2012/03/01(木) 19:41:07.35 >Sleep 噴いたわw http://peace.5ch.net/test/read.cgi/tech/1253521167/905
906: デフォルトの名無しさん [sage] 2012/03/01(木) 20:09:58.15 Windowsなんて常時、100スレッド以上動いてるのに。 http://peace.5ch.net/test/read.cgi/tech/1253521167/906
907: ◆0uxK91AxII [sage] 2012/03/01(木) 20:27:46.46 4CPU環境、速い順に キャッシュラインを別にした3thread キャッシュラインが同じっぽい3thread threadを作らずに1thread http://peace.5ch.net/test/read.cgi/tech/1253521167/907
908: デフォルトの名無しさん [sage] 2012/03/01(木) 20:42:09.96 >>907 >キャッシュラインが同じっぽい3thread >threadを作らずに1thread このふたつどっちが早いかは環境やプログラムによるだろ。 後者の方が早くなる事もあるよ。 http://peace.5ch.net/test/read.cgi/tech/1253521167/908
909: ◆0uxK91AxII [sage] 2012/03/02(金) 10:33:44.96 環境と粒度に依存。 http://peace.5ch.net/test/read.cgi/tech/1253521167/909
910: デフォルトの名無しさん [sage] 2012/03/26(月) 15:59:30.82 メインプロセスと同じ物理コア内のHyperThreading論理コアで実行されている サブプロセスが、メインプロセスの動作を邪魔しないようにするためのAPI関数は ありませんか? 例えば、SetProcessAffinityMaskを同じ値にした2つのプロセスは SetPriorityClassでサブの優先度を下げれば、メインプロセスが 動いているときはサブプロセスはほとんど動作しなくなります。 しかし、SetProcessAffinityMaskを、メインプロセスで1、サブプロセスで2に した場合、サブプロセスの優先度が低いにもかかわらず、メインプロセスと CPUリソースを均等に割り振っているようです。 これを防ぐための、SetProcessPriorityに変わるようなAPI関数はありませんか? http://peace.5ch.net/test/read.cgi/tech/1253521167/910
911: 910 [sage] 2012/03/26(月) 16:18:58.25 superπを2つのフォルダにコピーして1つをメイン、もう1つをサブとする。 メインのPriorityClassをNORMAL、AffinityMaskを1に固定。 サブのPriorityClassとAffinityMaskを変化させたときの、2つのsuperπの 838万桁計算時間を比較。 記号 P サブのPriorityClass, A: サブのAffinityMask: メインの時間/サブの時間 A P NORMAL, A 1: 5:19/5:22 B P BELOW, A 1: 2:57/5:38 C P NORMAL, A 2: 3:31/3:30 D P BELOW, A 2: 3:30/3:30 E P NORMAL, A 4: 2:53/2:47 F P BELOW, A 4: 2:52/2:47 Dのパターンでのタイムを見ると、サブの優先度がメインより低いにもかかわらず Cのパターンと同じになっています。 この状況でメインのタイムはFと同等で、サブのタイムはBよりは短くなるような、 SetPriorityClassのような関数はありませんか? http://peace.5ch.net/test/read.cgi/tech/1253521167/911
912: デフォルトの名無しさん [sage] 2012/03/26(月) 16:27:27.46 そんなaffinity maskを設定するのが悪い http://peace.5ch.net/test/read.cgi/tech/1253521167/912
913: ◆0uxK91AxII [sage] 2012/03/26(月) 16:47:02.42 下手の考え休むに似たり。 http://peace.5ch.net/test/read.cgi/tech/1253521167/913
914: 910 [sage] 2012/03/26(月) 16:56:47.14 AffinityMaskを設定したのは、確実に再現させるためです。 実際には設定しなくても、多くのプロセスが動いている場合に 優先度の高いプロセスが、優先度の低いプロセスに阻害される 可能性を排除したいのです。 http://peace.5ch.net/test/read.cgi/tech/1253521167/914
915: デフォルトの名無しさん [sage] 2012/03/26(月) 20:42:35.46 そんなπとかどーでもいいもん計算せずに実用的なもんつくれよ。 πなんて20桁でもあれば地球の外周を計算できるぞ。 http://peace.5ch.net/test/read.cgi/tech/1253521167/915
916: デフォルトの名無しさん [sage] 2012/03/26(月) 22:29:33.41 >>910 >メインプロセスの動作を邪魔しないようにするためのAPI関数はありませんか? OSは何? >Dのパターンでのタイムを見ると、サブの優先度がメインより低いにもかかわらず >Cのパターンと同じになっています。 もしかしてWindows? Windowsにはプライオリティブーストなど、CPU占有率の高いプロセスのプライ オリティを強制的に下げる機能や、アクティブウィンドウを持つプロセスの プライオリティを強制的に上げる機能があるから、設定した通りのプライオリティ で動作している事は保証されないよ? http://peace.5ch.net/test/read.cgi/tech/1253521167/916
917: 910 [sage] 2012/03/27(火) 09:12:32.64 >そんなπとか superπを作っているのではなく、優先度の制御ソフトを作ろうとしています。 具体的には動画エンコードしながらゲームしているのですが、 core 2のときはエンコーダのプロセス優先度をIDLEかBELOW_NORMALにしておけば ゲームのフレームレートが落ちることはなかったのですが、 core i7にしたら落ちるようになってしまったのです。 http://peace.5ch.net/test/read.cgi/tech/1253521167/917
918: 910 [sage] 2012/03/27(火) 09:28:22.17 >OSは何? Windows全般ですが、7固有のAPIでもかまいません。 PriorityBoostで優先度が動的に上下するのは知っています。 BのパターンのメインプロセスはE/Fに比べて 若干時間が長くなっており、これがPriorityBoostなどによる 効果だと思いますが、これくらいは問題としていません。 http://peace.5ch.net/test/read.cgi/tech/1253521167/918
919: デフォルトの名無しさん [sage] 2012/03/27(火) 09:36:39.40 >>917 動画エンコードプロセスに対して、Battle Encoder Shirase みたいな制御をするとか? http://peace.5ch.net/test/read.cgi/tech/1253521167/919
920: デフォルトの名無しさん [sage] 2012/03/27(火) 10:12:01.02 >優先度の高いプロセスが、優先度の低いプロセスに阻害される HTに係るCPUの内部状態を、そのCPU上で動いているプロセスから、 ソフト的に制御する方法なんて無いよ。 ICEでも使って外部からコントロールするなら兎も角。 ・・・っていうか、そのアプローチは不可能に近いって何となくわからない? >Cのパターンと同じになっています。 ソフト(OS)から見たら、HTなんて関係ないし、二つのCPUは等価なのだから、 ソフトにスケジューリングを任せてたら、 二つのスレッドの実行時間がほぼ同じになるのは当然。 >>917 >core i7にしたら落ちるようになってしまったのです。 それホントにCPU依存の話か? Core2とi7はソケット形状が違うので、CPU以外にも色々と構成が違うはずだが。 VIAとかの互換CPUならともかく、インテル純正CPUでその手の話って聞かないからさ。 もしかしてCore i7のCPU内蔵GPUを殺すと意図したとおりに動いたりとかしないか? だとしたらGPUとCPUでメモリバス食いあってるか、GPUのハードウェアエンコーダが 有効になってて、GPU食いあってるだけだと思うぞ。 http://peace.5ch.net/test/read.cgi/tech/1253521167/920
921: 910 [sage] 2012/03/27(火) 10:53:19.74 >>919 このソフトを試してみたいと思います。 これでうまくいくようなら、メインプロセスと同じ物理コアの別論理コアで 動くスレッドに対して同じような処理をするプログラムを作ってみようと思います。 >>920 ハード的に制御してくれるAPIがないか知りたかったのです。 エンコーダはマルチスレッドですが、GPUは使っていません。 ゲームとエンコーダをE/Fのパターンのように違う物理コアのAffinityMaskにしてしまえば ゲームのフレームレートが落ちないことは確認しました。 http://peace.5ch.net/test/read.cgi/tech/1253521167/921
922: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/03/29(木) 23:58:28.02 >>911 その計算時間どういう操作してどう計ったの? 838万ケタを同時に計算開始しただけ? 論理CPUの割り当てが別なら優先度なんて関係ないに決まってるんだが、意味分かってるか? ゲームメインを物理コアにだけマスク指定したら問題なさそうな気がするが、それじゃうまくいかないか? http://peace.5ch.net/test/read.cgi/tech/1253521167/922
923: 910 [sage] 2012/04/02(月) 12:23:22.30 計算時間はsuperπが計測しています。 同時に計算開始しました。 2つの開始ボタンを押す間の数百ミリ秒は、今回は無視です。 >論理CPUの割り当てが〜 だから、それを優先付けるAPIはないかという質問です。 HyperThreadingを使用するとパフォーマンスが落ちると問題視され Pentium4からずいぶん時間がたったので、そろそろ出ていないかと思いました。 ないので代替案を提示してくださってるのだと思いますが。 >ゲームメインを物理〜 それだと、論理コアが1つ遊んでしまいます。 http://peace.5ch.net/test/read.cgi/tech/1253521167/923
924: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/02(月) 17:53:01.73 遊べば他方を圧迫しない、働けば圧迫する HTのために2つあるのは状態に関するレジスタ類だけだもの http://peace.5ch.net/test/read.cgi/tech/1253521167/924
925: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/02(月) 20:40:06.53 自分で設定する気が無いんならOSに任せろ http://peace.5ch.net/test/read.cgi/tech/1253521167/925
926: 915 [sage] 2012/04/02(月) 20:57:35.84 >>923 SetProcessAffinityMask http://msdn.microsoft.com/ja-jp/library/cc429334.aspx ムダだろうがこれ使ってみれば? http://peace.5ch.net/test/read.cgi/tech/1253521167/926
927: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/02(月) 21:05:59.53 既出か。メンゴメンゴ。 http://peace.5ch.net/test/read.cgi/tech/1253521167/927
928: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/02(月) 21:25:52.93 >>ゲームメインを物理〜 >それだと、論理コアが1つ遊んでしまいます。 何を言ってるのか分からなくなってきた。 論理コアをあそばせるのがもったいないほどCPUを使い切るマルチスレッド化が出来てるのか? もうちょっと詳しくどういう動作をさせてるのか、どういうスレッド構成になってるのか書いてくれ。 まさかCPUパワーが余ってるのに論理コアが遊んでるのは許せないとかとち狂ったこと言ってないよな、念のために聞くが。 http://peace.5ch.net/test/read.cgi/tech/1253521167/928
929: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/02(月) 21:29:09.18 >>928 どんな理由でもかまわないだろ・・・ http://peace.5ch.net/test/read.cgi/tech/1253521167/929
930: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/02(月) 21:44:51.68 結局のところ>>924でどうにもならないんじゃないの? http://peace.5ch.net/test/read.cgi/tech/1253521167/930
931: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/02(月) 23:47:25.54 元の質問に誰も答えないのは、万が一あったりするとアレだからだろうねぇ。 でも、さすがに無いと思うよ、そんなAPIは。 別な方法で妥協するしかないんじゃないかな。 http://peace.5ch.net/test/read.cgi/tech/1253521167/931
932: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/03(火) 07:42:04.28 あるか否かは、CPUのニーモニックコードのリストを見ればわかるよ。 そこに命令が用意されていないなら、CPUの内部状態をコントロールしようがない。 非公開命令が用意されている可能性は残るけどな。 http://peace.5ch.net/test/read.cgi/tech/1253521167/932
933: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/03(火) 11:36:54.07 結局一緒じゃねーか。 あとそういうニーモニックがあるかどうかじゃ確実には分からんよ。 無いと思うけどね仕組み上から考えても。 http://peace.5ch.net/test/read.cgi/tech/1253521167/933
934: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/03(火) 14:07:48.98 なんでハードウェアの話になってしまったのかよくわかんないけど、 OS のスケジューリングの話じゃないの? こんなのとか。 ttp://kerneltrap.org/node/391 Windows も HT を意識したスケジューリングをしてくれればいいのにね。 http://peace.5ch.net/test/read.cgi/tech/1253521167/934
935: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/03(火) 15:03:29.48 そりゃOSレベルじゃ制御してない部分の話だもん。 どころかハードレベルでも制御不能だろってのが優勢。 http://peace.5ch.net/test/read.cgi/tech/1253521167/935
936: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/04(水) 07:28:13.10 >>934 してるよ http://www.dosv.jp/feature/0912/04.htm APIでプログラマに公開されてるかは知らんが http://peace.5ch.net/test/read.cgi/tech/1253521167/936
937: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/04(水) 10:42:53.69 物理マルチコアにHTなんていらないんじゃないかな http://peace.5ch.net/test/read.cgi/tech/1253521167/937
938: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/04(水) 10:44:43.96 HTをONにすると2000ではひっかかりまくるが、XPではスムーズ。 どうみても対応している。 http://peace.5ch.net/test/read.cgi/tech/1253521167/938
939: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/04(水) 11:02:06.05 ただlinuxみたいに同一物理コアの別論理コアに割り当てられたスレッドの優先順位を考慮して タイムスライスの比率を変えるようなことはしてないね。 http://peace.5ch.net/test/read.cgi/tech/1253521167/939
940: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/04(水) 11:08:09.89 別コアなのにタイムスライスって、スレッドを一時停止してるっことなんだが、 Linuxではそんなことしてるのか。逆にコスト高くつくんじゃないのか。 http://peace.5ch.net/test/read.cgi/tech/1253521167/940
941: 910 [sage] 2012/04/04(水) 11:42:02.39 HyperThreadingは空いている演算器を有効に使うためのものなのに メインで使っている演算器も奪ってしまうのはおかしいと考えており 別のOSでは実際にそれを回避するようにもなっているということで とりあえず安心しました。 http://peace.5ch.net/test/read.cgi/tech/1253521167/941
942: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/04(水) 13:07:41.32 なんというか・・・ 同時に動かすから、空いてるのを有効に使えるのよ そして同時に動かせば他方を圧迫する 圧迫を回避する=片方を止める=空いてるのを使えてない なのよ http://peace.5ch.net/test/read.cgi/tech/1253521167/942
943: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/04(水) 14:29:03.38 >>941 なってねーよ馬鹿かお前は。 http://peace.5ch.net/test/read.cgi/tech/1253521167/943
944: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/04(水) 14:30:35.88 あいつは人の話を聞かないからなあ。 何でも都合よく解釈しやがる。 http://peace.5ch.net/test/read.cgi/tech/1253521167/944
945: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/05(木) 13:36:26.86 そんな理論武装で大丈夫か? http://peace.5ch.net/test/read.cgi/tech/1253521167/945
946: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/06(金) 15:00:20.07 pthread_rwlockの使い方をおしえて http://peace.5ch.net/test/read.cgi/tech/1253521167/946
947: 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/06(金) 16:30:03.14 >>946 その前に聞くが、pthread_mutex_lockの使い方くらいは知っているのか? pthread_rwlockはそれより厄介だぞ。 http://www.tsoftware.jp/nptl/の図4が理解できないならやめとけ。 つーか、本当にrwlockが必要なのか? http://peace.5ch.net/test/read.cgi/tech/1253521167/947
948: デフォルトの名無しさん [sage] 2012/05/11(金) 15:36:21.96 2CoreのCPUなら問題ないのに、 HTをONにするとフリーズしたり不安定になるプログラムって何が原因なんだろう? http://peace.5ch.net/test/read.cgi/tech/1253521167/948
949: デフォルトの名無しさん [sage] 2012/05/11(金) 15:41:22.67 複数のスレッドを使うプログラムだろうから、スレッド間の同期がいい加減なのだろう。 http://peace.5ch.net/test/read.cgi/tech/1253521167/949
950: デフォルトの名無しさん [sage] 2012/05/12(土) 01:16:48.20 同時に動くとまずいコードがあるんだろう http://peace.5ch.net/test/read.cgi/tech/1253521167/950
951: デフォルトの名無しさん [sage] 2012/05/12(土) 12:53:15.98 2Coreなら大丈夫というのがおかしい。 http://peace.5ch.net/test/read.cgi/tech/1253521167/951
952: デフォルトの名無しさん [sage] 2012/05/12(土) 13:07:54.49 別におかしくないよ。 http://peace.5ch.net/test/read.cgi/tech/1253521167/952
953: デフォルトの名無しさん [sage] 2012/05/12(土) 13:38:09.65 いやおかしい。 おかしくないなら、2CoreでOKで、HTだとダメなパターンプリーズ。 http://peace.5ch.net/test/read.cgi/tech/1253521167/953
954: デフォルトの名無しさん [sage] 2012/05/12(土) 13:45:24.65 ドライバレベルなら昔あったな。 省電力でCPUクロックダウン/休止させる時にHTなので全部止まっちゃいました(テヘっ)ってのが。 http://peace.5ch.net/test/read.cgi/tech/1253521167/954
955: デフォルトの名無しさん [sage] 2012/05/12(土) 13:47:28.79 試してみて動いた=OKだと思ってるなら根本的に勘違いしてる http://peace.5ch.net/test/read.cgi/tech/1253521167/955
956: デフォルトの名無しさん [sage] 2012/05/12(土) 13:51:32.68 >>953 そんなこと考えてる暇あったら、HT時に起こってる問題を正確に掴むべき。 ちょっとしたタイミングの違いで動いたり、動かなかったりなんてのはいくらでもある。 http://peace.5ch.net/test/read.cgi/tech/1253521167/956
957: デフォルトの名無しさん [sage] 2012/05/12(土) 13:53:22.20 おまえの勘違い半端ねぇ http://peace.5ch.net/test/read.cgi/tech/1253521167/957
958: デフォルトの名無しさん [sage] 2012/05/12(土) 13:54:19.83 たまたまの話ならどうでもいい。 頭の悪い突っ込みは必要ないから。 http://peace.5ch.net/test/read.cgi/tech/1253521167/958
959: デフォルトの名無しさん [sage] 2012/05/12(土) 13:55:56.52 突っ込みはしたものの、 HTだけダメなパターンはなに一つも思いつきませんでした。 ごめんなさい。 http://peace.5ch.net/test/read.cgi/tech/1253521167/959
960: デフォルトの名無しさん [sage] 2012/05/12(土) 14:01:26.21 お前に思いつくかどうかなんてどうでも良いんだよ。 http://peace.5ch.net/test/read.cgi/tech/1253521167/960
961: デフォルトの名無しさん [sage] 2012/05/12(土) 14:03:59.23 >ちょっとしたタイミングの違いで動いたり、動かなかったりなんてのはいくらでもある。 この原因は二つ。 ・同期処理をしていない。 ・同期処理が必要な部分を洗い出せていない。 HTがダメで2CoreがOKな理由になってないなぁ。 考える暇がないのか考える頭がないのか。 http://peace.5ch.net/test/read.cgi/tech/1253521167/961
962: デフォルトの名無しさん [sage] 2012/05/12(土) 14:06:39.92 相談スレで相談したら自分でやれって言う奴を相手にするな。 ただ煽りたいだけの馬鹿なんだから。 http://peace.5ch.net/test/read.cgi/tech/1253521167/962
963: デフォルトの名無しさん [sage] 2012/05/12(土) 14:06:45.64 現に原因不明の不具合を目の前にして、そんな事考えるだけ無駄だと分からないやつは開発向いてない。 http://peace.5ch.net/test/read.cgi/tech/1253521167/963
964: デフォルトの名無しさん [sage] 2012/05/12(土) 15:03:57.50 問題の起きるメカニズムを解明するのは興味深いが、 解明したところで自己満足以外に得られるものがないからな 結局きっちり同期するしかないんだし http://peace.5ch.net/test/read.cgi/tech/1253521167/964
965: デフォルトの名無しさん [sage] 2012/05/12(土) 15:05:54.53 二つの処理が30ナノ秒以内に終わらないとタイムアウト するウンコな処理があって2CPUだと偶然動いたとか。 KUSOなコードに論理性を求めるほうが時間の無駄。 単にHT環境で再現するという明らかな不具合を直せばよろしい。 http://peace.5ch.net/test/read.cgi/tech/1253521167/965
966: デフォルトの名無しさん [sage] 2012/05/12(土) 18:26:42.65 Pen4の頃のHTを使っていた時は明らかに普通のデュアルCPUと タイミングが違ってバグの出方も全然違ったよ >>965の言っているように運よく再現できる環境があるなら そこで治せばいいんじゃない http://peace.5ch.net/test/read.cgi/tech/1253521167/966
967: デフォルトの名無しさん [sage] 2012/05/12(土) 20:16:48.32 >>953 1スレッドがループ内でレジスタを使い切るパターンだろ フリーズまではいかんが、挙動が悪くなる http://peace.5ch.net/test/read.cgi/tech/1253521167/967
968: デフォルトの名無しさん [sage] 2012/05/12(土) 20:37:58.42 自分で2CoreではセーフなのにHTをオンにしたら動かない!って言ってるのに、 「そんなパターンは無い!」とか分裂症ですか?って感じ。 そんなパターンがあるからその現象が発生してるのは明らかなのに。 現実逃避もいい加減にしろよ。 http://peace.5ch.net/test/read.cgi/tech/1253521167/968
969: デフォルトの名無しさん [sage] 2012/05/12(土) 21:02:29.35 スペック厨で、自分の最強ハードに問題が有るって事が気に入らないんだろう 目の前で起きてる問題をどう解決するかが問題なんだがオタクは空気がよめないね http://peace.5ch.net/test/read.cgi/tech/1253521167/969
970: デフォルトの名無しさん [sage] 2012/05/12(土) 21:07:20.42 HTをオフにしたら動きました。 http://peace.5ch.net/test/read.cgi/tech/1253521167/970
971: デフォルトの名無しさん [sage] 2012/05/12(土) 21:19:10.76 >>953 void threadA(){ while(1); } void threadB(){ while(1); } http://peace.5ch.net/test/read.cgi/tech/1253521167/971
972: デフォルトの名無しさん [sage] 2012/05/13(日) 02:00:44.76 それのどこがHTがダメなんだ? http://peace.5ch.net/test/read.cgi/tech/1253521167/972
973: デフォルトの名無しさん [sage] 2012/05/14(月) 09:08:39.75 >>971 シングルコアならOSがタイムシェアリングして均等に実行してくれる。 マルチコアならOSがそれぞれのコアに割り当てて均等に実行してくれる。 HTだとOSはそれぞれの仮想コアに割り当てて均等に実行しているつもりでも、 片方のスレッドが動いている間、もう片方のスレッドは満足に実行されない。 上のようなBusyLoop場合とくに顕著で、何もしない処理がCPUを占有する事になる。 これを防ぐために何もしないから他の仮想コアに処理を渡してよい事を示す 命令が追加されている。 http://peace.5ch.net/test/read.cgi/tech/1253521167/973
974: デフォルトの名無しさん [sage] 2012/05/14(月) 16:30:14.82 htでもだいたい均等に割り振られるが。 http://peace.5ch.net/test/read.cgi/tech/1253521167/974
975: デフォルトの名無しさん [sage] 2012/05/14(月) 17:15:11.15 HT非対応なんだろ http://peace.5ch.net/test/read.cgi/tech/1253521167/975
976: デフォルトの名無しさん [] 2012/05/18(金) 21:50:52.80 すいません。教えてください。 signalマスクをかけたスレッドの関数内で、popenをコールしてるんですが、ctrl+Cするとポインタ(NULLでないpopenの戻り値)からのfgetsが成功する時としない時があるんですが留意する事って何かありますか? ちゃんとpthread_joinは出来ているのでマスクには問題無いと思うのですが。 宜しくお願いします。 http://peace.5ch.net/test/read.cgi/tech/1253521167/976
977: デフォルトの名無しさん [sage] 2012/05/21(月) 08:21:41.23 >>976 どうやってマスクかけたのか、コードをしめせ http://peace.5ch.net/test/read.cgi/tech/1253521167/977
978: デフォルトの名無しさん [sage] 2012/05/23(水) 22:08:45.39 >>976 そうだな。エラーコードには留意するんだな。 http://peace.5ch.net/test/read.cgi/tech/1253521167/978
979: デフォルトの名無しさん [] 2012/06/13(水) 20:18:27.62 並列化できるはずのプログラムをコンパイルして, タスクマネージャーのリソースモニタで見ても, スレッド数が1にしかなりません,どなたか,解決策を教えてください 【OS】 win 7 pro 【言語】 fortran 【実行環境】 インテルR Visual Fortran コンパイラー 11.1 visual studio 2008 【その他特記する事項】 クラーメルの公式で逆行列を求めるプログラムです. 並列化したい部分は以下の通りです. nは行列の行数,aはもともとの行列,bは逆行列の成分です. サブルーチンでは,aの値を読むだけで,変化はさせていないです. その意味でreal*8,valueにしようとしたら,コンパイラに怒られました. プロジェクトのプロパティで, 構成プロパティ-fortran-最適化-並列化onにしています. do i=1,n !-全行に対して do j=1,n !-全列に対して call sho_det(n,i,j,a,b(i,j)) enddo enddo http://peace.5ch.net/test/read.cgi/tech/1253521167/979
980: デフォルトの名無しさん [sage] 2012/06/13(水) 20:20:44.88 >並列化できるはず 並列実行できるようなプログラム書かないと http://peace.5ch.net/test/read.cgi/tech/1253521167/980
981: デフォルトの名無しさん [sage] 2012/06/13(水) 20:28:34.56 >>980 少なくとも,i,jはいかなる順番で計算しても問題ないという意味では,並列実行できるのではないかと考えましたが, サブルーチン化しては並列実行できないのでしょうか? http://peace.5ch.net/test/read.cgi/tech/1253521167/981
982: デフォルトの名無しさん [sage] 2012/06/13(水) 20:57:41.81 sho_det に並列実行してくれるしかけがあるの? http://peace.5ch.net/test/read.cgi/tech/1253521167/982
983: デフォルトの名無しさん [] 2012/06/13(水) 21:13:24.59 >>982 ありません. http://peace.5ch.net/test/read.cgi/tech/1253521167/983
984: デフォルトの名無しさん [sage] 2012/06/13(水) 21:21:17.01 じゃあ、自力でできるようにするしか 並列処理したから早くなるというもんでもないだろうに 並列処理できるようにする方が難易度高 http://peace.5ch.net/test/read.cgi/tech/1253521167/984
985: デフォルトの名無しさん [sage] 2012/06/13(水) 21:34:53.36 >>979 sho_detの中身をくわしく。 特にbへの代入 http://peace.5ch.net/test/read.cgi/tech/1253521167/985
986: デフォルトの名無しさん [sage] 2012/06/13(水) 23:14:52.16 なぁなぁ、くらーめるの公式ってことは内部で余因子展開やってるよね? 余因子展開は並列和を行うため、一つの行列式は一個のスレッドで固まってないとだめ(もしくはプリフィクススキャン)なので call sho_det(n,i,j,a,b(i,j))がどうやら行列の個々の要素ごとに演算を行なっているように見えるので このループ全体が並列化の対象でない限りはcall sho_det(n,i,j,a,b(i,j))だけがマルチスッドレでもだめなんじゃないの? みたいなことを素人が書いてみましたがどうですか?^^ http://peace.5ch.net/test/read.cgi/tech/1253521167/986
987: デフォルトの名無しさん [sage] 2012/06/13(水) 23:42:06.53 サブルーチン呼び出しは副作用を仮定して並列化不可能とみなす。 最適化を実行速度以上、かつプロシージャ間の最適化有効なら コンパイラーの気分がいい時にはやるときもある。 とりあえず診断に自動パラレライザーのレポートがあるならそれを付けろ。 http://peace.5ch.net/test/read.cgi/tech/1253521167/987
988: デフォルトの名無しさん [] 2012/06/14(木) 12:17:59.33 ソースを示した方が早くてわかりやすいと思うので,アップします. http://www5.puny.jp/uploader/info/upload_id/1669260777 pass:giko >>987 レポートはこれで合ってますでしょうか? プロジェクト '20120528_fast_pararell_subroutine'、構成 'Release|x64' の中間ファイルと出力ファイルを削除しています。 コンパイルしています インテル(R) Visual Fortran 11.1.067 [インテル(R) 64]... ifort /nologo /Qparallel /module:"x64\Release\\" /object:"x64\Release\\" /libs:static /threads /c /Qvc9 /Qlocation,link,"c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64" "C:\Users\my_note\Desktop\fortran\20120528_fast_pararell_subroutine\20120528_fast_pararell_subroutine\20120528_fast_pararell_subroutine.f90" リンクしています... Link /OUT:"x64\Release\20120528_fast_pararell_subroutine.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /MANIFESTFILE:"C:\Users\my_note\Desktop\fortran\20120528_fast_pararell_subroutine\20120528_fast_pararell_subroutine\x64\Release\20120528_fast_pararell_subroutine.exe.intermediate.manifest" /SUBSYSTEM:CONSOLE /IMPLIB:"C:\Users\my_note\Desktop\fortran\20120528_fast_pararell_subroutine\20120528_fast_pararell_subroutine\x64\Release\20120528_fast_pararell_subroutine.lib" "x64\Release\20120528_fast_pararell_subroutine.obj" Link: executing 'link' マニフェストを埋め込んでいます... mt.exe /nologo /outputresource:"C:\Users\my_note\Desktop\fortran\20120528_fast_pararell_subroutine\20120528_fast_pararell_subroutine\x64\Release\20120528_fast_pararell_subroutine.exe;#1" /manifest "C:\Users\my_note\Desktop\fortran\20120528_fast_pararell_subroutine\20120528_fast_pararell_subroutine\x64\Release\20120528_fast_pararell_subroutine.exe.intermediate.manifest" 20120528_fast_pararell_subroutine - エラー 0、警告 0 http://peace.5ch.net/test/read.cgi/tech/1253521167/988
989: 988 [sage] 2012/06/14(木) 12:22:04.79 ダウンロードパスはこちらでお願いします. http://www5.puny.jp/uploader/info/upload_id/1373547809 http://peace.5ch.net/test/read.cgi/tech/1253521167/989
990: デフォルトの名無しさん [sage] 2012/06/14(木) 12:40:46.03 ちなみに,サブルーチンに入れる前でも,マルチスレッド化はされませんでした. i,jのdo内で,コールしている部分にそのままサブルーチンの中身を書いていました. その際,shoi(),shoj(),k,min_more,sekiなど, ローカルな変数はすべて配列化して,引数に(i,j)をとり, コンパイラにはdoの順序が任意であるように伝わるようにしたのですが, それでもだめでした. http://peace.5ch.net/test/read.cgi/tech/1253521167/990
991: デフォルトの名無しさん [sage] 2012/06/14(木) 16:19:16.54 クラーメルの公式って並列処理できるものなの? から考えませう http://peace.5ch.net/test/read.cgi/tech/1253521167/991
992: デフォルトの名無しさん [sage] 2012/06/14(木) 20:35:34.26 >>987 (´・∀・`)ヘー単にライブラリ追加するだけのオプションじゃないのか http://peace.5ch.net/test/read.cgi/tech/1253521167/992
993: デフォルトの名無しさん [sage] 2012/06/14(木) 21:58:16.81 >>989 リンク先に該当ファイルがないよ http://peace.5ch.net/test/read.cgi/tech/1253521167/993
994: デフォルトの名無しさん [sage] 2012/06/14(木) 22:30:46.09 >>993 http://www5.puny.jp/uploader/download/1339644104.f90 すみません、アップローダになれないもので。pass:giko >>991 考えた結果、>>981,990のように、出来ると結論づけました。 間違っているなら、間違っているところを指摘お願いします。 http://peace.5ch.net/test/read.cgi/tech/1253521167/994
995: デフォルトの名無しさん [sage] 2012/06/14(木) 23:39:25.06 オプション /Qpar-report3を付けてコンパイルするんだ。 並列化阻害要因が表示されるはず。 http://peace.5ch.net/test/read.cgi/tech/1253521167/995
996: デフォルトの名無しさん [sage] 2012/06/14(木) 23:43:12.00 /Qpar_report3だったかも。 http://peace.5ch.net/test/read.cgi/tech/1253521167/996
997: デフォルトの名無しさん [sage] 2012/06/15(金) 00:19:49.65 >>994 omp parallel って、そういう使い方するもんじゃないような、よーしらんけど http://peace.5ch.net/test/read.cgi/tech/1253521167/997
998: デフォルトの名無しさん [sage] 2012/06/15(金) 00:28:51.96 上の続き 単純な2重ループだけだと、スレッド化してくれん ループが二組以上でデータ等の依存関係がない場合にそれぞれのループをスレッド化してくれる って、バカなりに解釈したけど http://peace.5ch.net/test/read.cgi/tech/1253521167/998
999: デフォルトの名無しさん [sage] 2012/06/15(金) 00:35:11.94 とりあえずサブルーチン化により並列実行でマズそうな点は解消されてるっぽいが まぁコンパイラーの /Qparallel じゃ分からないくらいには複雑と思われる。 >>979 > VALUE属性はスカラ仮引数にのみ指定可能です。 ttp://www.nag-j.co.jp/fortran/fortran2003/Fortran2003_8_18.html そういう意味を明示するなら引数授受特性を書いて PURE 手続きにしてやると上手くいくかもしれない? ttp://www.xlsoft.com/jp/products/intel/cvf/docs/vf-html/az/az09_39.htm pure subroutine sho_det(n,i,j,a,b) implicit none integer, intent(in) :: n,i,j real*8, intent(in) :: a(n,n) real*8, intent(inout) :: b 略) http://peace.5ch.net/test/read.cgi/tech/1253521167/999
1000: デフォルトの名無しさん [sage] 2012/06/15(金) 00:52:10.81 !!-----------小行列用に,i,jを飛ばした自然数の並びを作成 の部分は最適化できそうだけど、自力で... http://peace.5ch.net/test/read.cgi/tech/1253521167/1000
1001: 1001 [] Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。 http://peace.5ch.net/test/read.cgi/tech/1253521167/1001
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.017s