1 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 17:19:27 ] マルチスレッドプログラミングについて語るスレ ■前スレ マルチスレッドプログラミング相談室 その7 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】 【言語】 【実行環境】 【その他特記する事項】
865 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 01:46:07.56 ] >>862 机上の計算の計算式がイミフなんだが
866 名前:860 mailto:sage [2012/02/22(水) 01:47:47.73 ] >>864 うんごめん そのとおり
867 名前:859 mailto:sage [2012/02/22(水) 01:49:07.58 ] 俺のアホー マルチスレッドは10L+M=20Lだ。効率は50%弱か。今度こそおやすみー
868 名前:862 mailto:sage [2012/02/22(水) 02:01:42.37 ] 見直すといろいろあれだったので気にしないでw
869 名前: ◆0uxK91AxII mailto:sage [2012/02/22(水) 15:13:40.47 ] thread一つ、非同期読込と計算を交互に行う。
870 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 17:09:49.10 ] 読み込み時間がクリティカルなんだから 読み込みスレッドが他の作業をしたらダメなんじゃないの?
871 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 19:17:39.81 ] HDD一個に複数からアクセスすれば、パフォーマンス低下するのが当然じゃあ
872 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 20:04:50.74 ] SSDなら実測値が結構改善するんかね 大して普及してないから宛にならんけど
873 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 00:31:39.79 ] スレッド制御に頭使いすぎてI/Oウエイトによる遅延完全に無視してない?
874 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 00:40:50.43 ] >>872 普及はどこから出てきた
875 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:04:22.28 ] >>874 SSDから。
876 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:07:07.00 ] いやだから。 SSDがとんだけ普及してるか、は実測値に影響する項なのか?ってことだろ
877 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:23:30.75 ] 普及してるかどうかは実測値には影響しないよ。 SSD上での実測値改善が見られるとありがたいけど、 世の中SSD搭載してないPCも多いから、 SSDだけで速くなるプログラムはよくないよねって話しだし。
878 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:25:38.17 ] そっちかよ 自分とこの環境で動かすんじゃないのか
879 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:49:14.20 ] 自作のハッシュ計算ツールだけど、MD5計算速度はキャッシュに乗ってる状態だと 3GHz弱のCore2Duo程度のCPUでも300MB/sは超えてるぞ。 計算のが十倍遅いってどういうことだ? HDDなんて速くても100MB/s題だと思うが…
880 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:57:30.10 ] スレッド構成を書いてもらわないとなんとも言えないなぁ 単にシングルスレッドなら100MB/s超えるしね
881 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:59:55.78 ] >>879 読み込み時間を差し引いた計算時間はどれぐらいだったの?
882 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 02:05:32.93 ] >>879 300MB/sってのは、MD5の関数なりクラスなりが1秒間に 計算できた情報量という理解であってる?
883 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 02:07:57.39 ] 読み込みと計算は別スレッドで同時にやってるから正確には分からんな。 まあいろいろ状況によって時間が変わるけど、計算だけなら最速時で400MB/sくらいだった希ガス。 ああもちろん、読み込みやってもキャッシュに乗ってたら最速だとほぼ同じくらいまで行くよ。
884 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 02:31:42.72 ] 純粋な計算速度が負けるってのは構成が gcc+linux+Phenom X4 1.8Ghz だからなのかねぇ
885 名前:デフォルトの名無しさん [2012/02/25(土) 14:26:44.01 ] ちょっとスレッドとは違うかもしれないんだけど メッセージキューを設計しています シグナルハンドラからキューに積みたいんですが どうしても排他制御ができません うまい方法はありますでしょうか
886 名前:885 mailto:sage [2012/02/25(土) 14:28:07.28 ] 自己解決しました
887 名前:デフォルトの名無しさん mailto: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しなくても大丈夫のような気がするんですが少し心配です。
888 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 00:38:36.19 ] MSの今のList<T>の実装では問題ないはずだけど保証されているわけではない でもそれデリゲート呼び出しのコストがかさむから普通にループ回したほうが速いだろ 並列でやるんなら、4コアなら領域を4分割して中でループ回したほうがいい
889 名前:デフォルトの名無しさん mailto: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; } } ・・・(以下略) とした方が良いということですか?
890 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 00:47:12.66 ] 訂正 読み取りだけならスレッドセーフだと書いてあるな
891 名前:デフォルトの名無しさん mailto: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です。
892 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 21:27:49.37 ] なんでキャッシュでコンテキストスイッチが起こるのよ…
893 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 22:05:31.00 ] >>891 コンテキストスイッチは関係ない。 >それぞれの変数が同じキャッシュラインに乗らないようにするには キャッシュは8〜32バイトぐらいの単位で管理しているから、 適当に無駄なメモリを確保して、それぞれのメモリアドレスが 隣接しないようにすればよい。
894 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 22:19:38.86 ] >それぞれのスレッドを単独で実行させた場合 はああ?
895 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 00:23:04.48 ] メモリバリアの間違い?
896 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 00:47:56.20 ] なんでメモリバリアが出てくんだよ
897 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 00:55:22.06 ] コンテキストスイッチみたいなのはCPUを占有すると起こるものなの 無限ループしてパソコンがハングしたらどうするつもりなんだろうね
898 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 01:28:54.69 ] 1スレッドで実行→コンテキストスイッチが起こらない 3スレッドで実行→コンテキストスイッチが起こりまくる これのどこが悪いのか俺にはわからないのだがとりあえずCPUはいくつある?
899 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 08:36:10.06 ] >>898 cpuは4コアです。 >>897 各ループにSleepは挟んでます。 >>893 無駄なメモリを置いて、キャッシュ対策しようと思います。 また、コンテキストスイッチ数が多いのは、別の原因を探してみます。
900 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 08:45:24.09 ] Sleep入れたらそりゃぁ、コンテキストスイッチもするだろうよ。
901 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 15:54:56.63 ] コンテキストスイッチさせるのがSleepの目的のひとつだもんよ。
902 名前:デフォルトの名無しさん [2012/03/01(木) 16:16:45.26 ] static変数に書き込み続けるスレッドとか Sleep挟んでますとか キャッシュ競合を避けるとか 何 考 え て る の よ ?
903 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 16:43:35.12 ] マルチプロセスほど枯れきっちゃいない技術だから、ということでしょうがあんめぇ
904 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 17:01:12.69 ] スレッドとかどう捉えてるんだろうね?
905 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 19:41:07.35 ] >Sleep 噴いたわw
906 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 20:09:58.15 ] Windowsなんて常時、100スレッド以上動いてるのに。
907 名前: ◆0uxK91AxII mailto:sage [2012/03/01(木) 20:27:46.46 ] 4CPU環境、速い順に キャッシュラインを別にした3thread キャッシュラインが同じっぽい3thread threadを作らずに1thread
908 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 20:42:09.96 ] >>907 >キャッシュラインが同じっぽい3thread >threadを作らずに1thread このふたつどっちが早いかは環境やプログラムによるだろ。 後者の方が早くなる事もあるよ。
909 名前: ◆0uxK91AxII mailto:sage [2012/03/02(金) 10:33:44.96 ] 環境と粒度に依存。
910 名前:デフォルトの名無しさん mailto:sage [2012/03/26(月) 15:59:30.82 ] メインプロセスと同じ物理コア内のHyperThreading論理コアで実行されている サブプロセスが、メインプロセスの動作を邪魔しないようにするためのAPI関数は ありませんか? 例えば、SetProcessAffinityMaskを同じ値にした2つのプロセスは SetPriorityClassでサブの優先度を下げれば、メインプロセスが 動いているときはサブプロセスはほとんど動作しなくなります。 しかし、SetProcessAffinityMaskを、メインプロセスで1、サブプロセスで2に した場合、サブプロセスの優先度が低いにもかかわらず、メインプロセスと CPUリソースを均等に割り振っているようです。 これを防ぐための、SetProcessPriorityに変わるようなAPI関数はありませんか?
911 名前:910 mailto: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のような関数はありませんか?
912 名前:デフォルトの名無しさん mailto:sage [2012/03/26(月) 16:27:27.46 ] そんなaffinity maskを設定するのが悪い
913 名前: ◆0uxK91AxII mailto:sage [2012/03/26(月) 16:47:02.42 ] 下手の考え休むに似たり。
914 名前:910 mailto:sage [2012/03/26(月) 16:56:47.14 ] AffinityMaskを設定したのは、確実に再現させるためです。 実際には設定しなくても、多くのプロセスが動いている場合に 優先度の高いプロセスが、優先度の低いプロセスに阻害される 可能性を排除したいのです。
915 名前:デフォルトの名無しさん mailto:sage [2012/03/26(月) 20:42:35.46 ] そんなπとかどーでもいいもん計算せずに実用的なもんつくれよ。 πなんて20桁でもあれば地球の外周を計算できるぞ。
916 名前:デフォルトの名無しさん mailto:sage [2012/03/26(月) 22:29:33.41 ] >>910 >メインプロセスの動作を邪魔しないようにするためのAPI関数はありませんか? OSは何? >Dのパターンでのタイムを見ると、サブの優先度がメインより低いにもかかわらず >Cのパターンと同じになっています。 もしかしてWindows? Windowsにはプライオリティブーストなど、CPU占有率の高いプロセスのプライ オリティを強制的に下げる機能や、アクティブウィンドウを持つプロセスの プライオリティを強制的に上げる機能があるから、設定した通りのプライオリティ で動作している事は保証されないよ?
917 名前:910 mailto:sage [2012/03/27(火) 09:12:32.64 ] >そんなπとか superπを作っているのではなく、優先度の制御ソフトを作ろうとしています。 具体的には動画エンコードしながらゲームしているのですが、 core 2のときはエンコーダのプロセス優先度をIDLEかBELOW_NORMALにしておけば ゲームのフレームレートが落ちることはなかったのですが、 core i7にしたら落ちるようになってしまったのです。
918 名前:910 mailto:sage [2012/03/27(火) 09:28:22.17 ] >OSは何? Windows全般ですが、7固有のAPIでもかまいません。 PriorityBoostで優先度が動的に上下するのは知っています。 BのパターンのメインプロセスはE/Fに比べて 若干時間が長くなっており、これがPriorityBoostなどによる 効果だと思いますが、これくらいは問題としていません。
919 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 09:36:39.40 ] >>917 動画エンコードプロセスに対して、Battle Encoder Shirase みたいな制御をするとか?
920 名前:デフォルトの名無しさん mailto: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食いあってるだけだと思うぞ。
921 名前:910 mailto:sage [2012/03/27(火) 10:53:19.74 ] >919 このソフトを試してみたいと思います。 これでうまくいくようなら、メインプロセスと同じ物理コアの別論理コアで 動くスレッドに対して同じような処理をするプログラムを作ってみようと思います。 >920 ハード的に制御してくれるAPIがないか知りたかったのです。 エンコーダはマルチスレッドですが、GPUは使っていません。 ゲームとエンコーダをE/Fのパターンのように違う物理コアのAffinityMaskにしてしまえば ゲームのフレームレートが落ちないことは確認しました。
922 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/29(木) 23:58:28.02 ] >>911 その計算時間どういう操作してどう計ったの? 838万ケタを同時に計算開始しただけ? 論理CPUの割り当てが別なら優先度なんて関係ないに決まってるんだが、意味分かってるか? ゲームメインを物理コアにだけマスク指定したら問題なさそうな気がするが、それじゃうまくいかないか?
923 名前:910 mailto:sage [2012/04/02(月) 12:23:22.30 ] 計算時間はsuperπが計測しています。 同時に計算開始しました。 2つの開始ボタンを押す間の数百ミリ秒は、今回は無視です。 >論理CPUの割り当てが〜 だから、それを優先付けるAPIはないかという質問です。 HyperThreadingを使用するとパフォーマンスが落ちると問題視され Pentium4からずいぶん時間がたったので、そろそろ出ていないかと思いました。 ないので代替案を提示してくださってるのだと思いますが。 >ゲームメインを物理〜 それだと、論理コアが1つ遊んでしまいます。
924 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 17:53:01.73 ] 遊べば他方を圧迫しない、働けば圧迫する HTのために2つあるのは状態に関するレジスタ類だけだもの
925 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 20:40:06.53 ] 自分で設定する気が無いんならOSに任せろ
926 名前:915 mailto:sage [2012/04/02(月) 20:57:35.84 ] >>923 SetProcessAffinityMask msdn.microsoft.com/ja-jp/library/cc429334.aspx ムダだろうがこれ使ってみれば?
927 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 21:05:59.53 ] 既出か。メンゴメンゴ。
928 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 21:25:52.93 ] >>ゲームメインを物理〜 >それだと、論理コアが1つ遊んでしまいます。 何を言ってるのか分からなくなってきた。 論理コアをあそばせるのがもったいないほどCPUを使い切るマルチスレッド化が出来てるのか? もうちょっと詳しくどういう動作をさせてるのか、どういうスレッド構成になってるのか書いてくれ。 まさかCPUパワーが余ってるのに論理コアが遊んでるのは許せないとかとち狂ったこと言ってないよな、念のために聞くが。
929 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 21:29:09.18 ] >>928 どんな理由でもかまわないだろ・・・
930 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 21:44:51.68 ] 結局のところ>>924 でどうにもならないんじゃないの?
931 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 23:47:25.54 ] 元の質問に誰も答えないのは、万が一あったりするとアレだからだろうねぇ。 でも、さすがに無いと思うよ、そんなAPIは。 別な方法で妥協するしかないんじゃないかな。
932 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/03(火) 07:42:04.28 ] あるか否かは、CPUのニーモニックコードのリストを見ればわかるよ。 そこに命令が用意されていないなら、CPUの内部状態をコントロールしようがない。 非公開命令が用意されている可能性は残るけどな。
933 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/03(火) 11:36:54.07 ] 結局一緒じゃねーか。 あとそういうニーモニックがあるかどうかじゃ確実には分からんよ。 無いと思うけどね仕組み上から考えても。
934 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/03(火) 14:07:48.98 ] なんでハードウェアの話になってしまったのかよくわかんないけど、 OS のスケジューリングの話じゃないの? こんなのとか。 ttp://kerneltrap.org/node/391 Windows も HT を意識したスケジューリングをしてくれればいいのにね。
935 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/03(火) 15:03:29.48 ] そりゃOSレベルじゃ制御してない部分の話だもん。 どころかハードレベルでも制御不能だろってのが優勢。
936 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 07:28:13.10 ] >>934 してるよ www.dosv.jp/feature/0912/04.htm APIでプログラマに公開されてるかは知らんが
937 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 10:42:53.69 ] 物理マルチコアにHTなんていらないんじゃないかな
938 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 10:44:43.96 ] HTをONにすると2000ではひっかかりまくるが、XPではスムーズ。 どうみても対応している。
939 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 11:02:06.05 ] ただlinuxみたいに同一物理コアの別論理コアに割り当てられたスレッドの優先順位を考慮して タイムスライスの比率を変えるようなことはしてないね。
940 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 11:08:09.89 ] 別コアなのにタイムスライスって、スレッドを一時停止してるっことなんだが、 Linuxではそんなことしてるのか。逆にコスト高くつくんじゃないのか。
941 名前:910 mailto:sage [2012/04/04(水) 11:42:02.39 ] HyperThreadingは空いている演算器を有効に使うためのものなのに メインで使っている演算器も奪ってしまうのはおかしいと考えており 別のOSでは実際にそれを回避するようにもなっているということで とりあえず安心しました。
942 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 13:07:41.32 ] なんというか・・・ 同時に動かすから、空いてるのを有効に使えるのよ そして同時に動かせば他方を圧迫する 圧迫を回避する=片方を止める=空いてるのを使えてない なのよ
943 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 14:29:03.38 ] >>941 なってねーよ馬鹿かお前は。
944 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 14:30:35.88 ] あいつは人の話を聞かないからなあ。 何でも都合よく解釈しやがる。
945 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 13:36:26.86 ] そんな理論武装で大丈夫か?
946 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/06(金) 15:00:20.07 ] pthread_rwlockの使い方をおしえて
947 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/06(金) 16:30:03.14 ] >>946 その前に聞くが、pthread_mutex_lockの使い方くらいは知っているのか? pthread_rwlockはそれより厄介だぞ。 www.tsoftware.jp/nptl/ の図4が理解できないならやめとけ。 つーか、本当にrwlockが必要なのか?
948 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 15:36:21.96 ] 2CoreのCPUなら問題ないのに、 HTをONにするとフリーズしたり不安定になるプログラムって何が原因なんだろう?
949 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 15:41:22.67 ] 複数のスレッドを使うプログラムだろうから、スレッド間の同期がいい加減なのだろう。
950 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 01:16:48.20 ] 同時に動くとまずいコードがあるんだろう
951 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 12:53:15.98 ] 2Coreなら大丈夫というのがおかしい。
952 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 13:07:54.49 ] 別におかしくないよ。
953 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 13:38:09.65 ] いやおかしい。 おかしくないなら、2CoreでOKで、HTだとダメなパターンプリーズ。
954 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 13:45:24.65 ] ドライバレベルなら昔あったな。 省電力でCPUクロックダウン/休止させる時にHTなので全部止まっちゃいました(テヘっ)ってのが。
955 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 13:47:28.79 ] 試してみて動いた=OKだと思ってるなら根本的に勘違いしてる
956 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 13:51:32.68 ] >>953 そんなこと考えてる暇あったら、HT時に起こってる問題を正確に掴むべき。 ちょっとしたタイミングの違いで動いたり、動かなかったりなんてのはいくらでもある。
957 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 13:53:22.20 ] おまえの勘違い半端ねぇ
958 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 13:54:19.83 ] たまたまの話ならどうでもいい。 頭の悪い突っ込みは必要ないから。
959 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 13:55:56.52 ] 突っ込みはしたものの、 HTだけダメなパターンはなに一つも思いつきませんでした。 ごめんなさい。
960 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 14:01:26.21 ] お前に思いつくかどうかなんてどうでも良いんだよ。
961 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 14:03:59.23 ] >ちょっとしたタイミングの違いで動いたり、動かなかったりなんてのはいくらでもある。 この原因は二つ。 ・同期処理をしていない。 ・同期処理が必要な部分を洗い出せていない。 HTがダメで2CoreがOKな理由になってないなぁ。 考える暇がないのか考える頭がないのか。
962 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 14:06:39.92 ] 相談スレで相談したら自分でやれって言う奴を相手にするな。 ただ煽りたいだけの馬鹿なんだから。
963 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 14:06:45.64 ] 現に原因不明の不具合を目の前にして、そんな事考えるだけ無駄だと分からないやつは開発向いてない。
964 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 15:03:57.50 ] 問題の起きるメカニズムを解明するのは興味深いが、 解明したところで自己満足以外に得られるものがないからな 結局きっちり同期するしかないんだし
965 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 15:05:54.53 ] 二つの処理が30ナノ秒以内に終わらないとタイムアウト するウンコな処理があって2CPUだと偶然動いたとか。 KUSOなコードに論理性を求めるほうが時間の無駄。 単にHT環境で再現するという明らかな不具合を直せばよろしい。
966 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 18:26:42.65 ] Pen4の頃のHTを使っていた時は明らかに普通のデュアルCPUと タイミングが違ってバグの出方も全然違ったよ >>965 の言っているように運よく再現できる環境があるなら そこで治せばいいんじゃない
967 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 20:16:48.32 ] >>953 1スレッドがループ内でレジスタを使い切るパターンだろ フリーズまではいかんが、挙動が悪くなる
968 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 20:37:58.42 ] 自分で2CoreではセーフなのにHTをオンにしたら動かない!って言ってるのに、 「そんなパターンは無い!」とか分裂症ですか?って感じ。 そんなパターンがあるからその現象が発生してるのは明らかなのに。 現実逃避もいい加減にしろよ。
969 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 21:02:29.35 ] スペック厨で、自分の最強ハードに問題が有るって事が気に入らないんだろう 目の前で起きてる問題をどう解決するかが問題なんだがオタクは空気がよめないね
970 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 21:07:20.42 ] HTをオフにしたら動きました。
971 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 21:19:10.76 ] >>953 void threadA(){ while(1); } void threadB(){ while(1); }
972 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 02:00:44.76 ] それのどこがHTがダメなんだ?
973 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 09:08:39.75 ] >>971 シングルコアならOSがタイムシェアリングして均等に実行してくれる。 マルチコアならOSがそれぞれのコアに割り当てて均等に実行してくれる。 HTだとOSはそれぞれの仮想コアに割り当てて均等に実行しているつもりでも、 片方のスレッドが動いている間、もう片方のスレッドは満足に実行されない。 上のようなBusyLoop場合とくに顕著で、何もしない処理がCPUを占有する事になる。 これを防ぐために何もしないから他の仮想コアに処理を渡してよい事を示す 命令が追加されている。
974 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 16:30:14.82 ] htでもだいたい均等に割り振られるが。
975 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 17:15:11.15 ] HT非対応なんだろ
976 名前:デフォルトの名無しさん [2012/05/18(金) 21:50:52.80 ] すいません。教えてください。 signalマスクをかけたスレッドの関数内で、popenをコールしてるんですが、ctrl+Cするとポインタ(NULLでないpopenの戻り値)からのfgetsが成功する時としない時があるんですが留意する事って何かありますか? ちゃんとpthread_joinは出来ているのでマスクには問題無いと思うのですが。 宜しくお願いします。