マルチスレッドプログラミング相談室 その9
1 :デフォルトの名無しさん :2012/06/15(金) 01:31:57.88 .net マルチスレッドプログラミングについて語るスレ ■前スレ マルチスレッドプログラミング相談室 その8 http://toro.2ch.net/test/read.cgi/tech/1253521167/ ■過去スレ その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/ その7 ttp://pc12.2ch.net/test/read.cgi/tech/1215253576/ OS・言語・環境は問わないが、それゆえ明記すべし。 テンプレ 【OS】 【言語】 【実行環境】 【その他特記する事項】
2 :デフォルトの名無しさん :2012/06/15(金) 01:35:25.58 .net ■関連スレ・関連性の高いスレ ネットワークプログラミング相談室 Port28 http://toro.2ch.net/test/read.cgi/tech/1334736934/
3 :デフォルトの名無しさん :2012/06/15(金) 03:59:42.18 .net >>1 乙 前スレ >>994 並列実行「可能」でも「スケールする」かは知らんぞ。 OpenMP なら !$omp parallel do としてコンパイルオプション /Qopenmp
4 :デフォルトの名無しさん :2012/06/15(金) 16:15:07.07 .net >>前すれ995 そういうオプションがあるのですね,レポートと書き直したソースを添付します. http://www5.puny.jp/uploader/download/1339744079.zip pass:giko potential OUTPUT 依存関係 らしいですが,ググってもよくわかりません.依存関係がないように>>前すれ999のようにpureに書き換えたのですが. >>前すれ997 これは試しにつけてみただけのものです,やはり使い方が違いますか・・.
5 :デフォルトの名無しさん :2012/06/15(金) 18:14:50.61 .net gfortran -O3 20120528_fast_pararell_subroutine.f90 -ftree-vectorize -msse2 -ftree-vectorizer-verbose=2
6 :デフォルトの名無しさん :2012/06/15(金) 18:54:01.14 .net 彼女二人と同時にデートする時はマルチスレッドじゃないといけないんだけど どうすればいいかな
7 :デフォルトの名無しさん :2012/06/15(金) 19:08:46.12 .net 時分割でがんばれ
8 :デフォルトの名無しさん :2012/06/15(金) 21:41:34.19 .net Analyzing loop at 20120528_fast_pararell_subroutine.f90:237 237: not vectorized: not suitable for gather D.2660_224 = *shoi_69[D.2659_223]; Analyzing loop at 20120528_fast_pararell_subroutine.f90:196 196: not vectorized: not suitable for gather D.2600_148 = *a_147(D)[D.2599_146]; Analyzing loop at 20120528_fast_pararell_subroutine.f90:150 150: not vectorized: loop contains function calls or data references that cannot be analyzed Analyzing loop at 20120528_fast_pararell_subroutine.f90:131 131: not vectorized: not suitable for gather D.2767_169 = *a_86(D)[D.2766_168]; Analyzing loop at 20120528_fast_pararell_subroutine.f90:91 91: not vectorized: not suitable for gather D.2704_87 = *a_86(D)[D.2703_85]; Analyzing loop at 20120528_fast_pararell_subroutine.f90:37 37: not vectorized: not suitable for gather D__I_lsm.780_635 = MEM[(real(kind=8)[0:] *)D.2433_241][pretmp.758_17]; Analyzing loop at 20120528_fast_pararell_subroutine.f90:38 38: not vectorized: not suitable for gather D.2485_318 = MEM[(real(kind=8)[0:] *)D.2298_95][D.2484_317];
9 :デフォルトの名無しさん :2012/06/16(土) 12:26:31.55 .net >>4 ループ間で出力変数に依存関係があるかも、という判断。 ○ i, j は value 属性を付け、b は戻り値にする。 ○ サブルーチン inv の宣言部に interface で sho_det の引数属性を書く。 ここまでで依存はクリア、反復回数が少ないかも、というようになる。 /Qpar-threshold0 オプション (100〜0) で並列化は完了。
10 :デフォルトの名無しさん :2012/06/16(土) 12:48:12.18 .net bに依存がないことくらい解析できてもよさそうなのにね
11 :デフォルトの名無しさん :2012/06/16(土) 16:27:05.54 .net sho_det呼び出しの2重ループで並列化できるの?
12 :デフォルトの名無しさん :2012/06/16(土) 16:52:50.21 .net 双子と付き合う時はマルチスレッドのチンポ子が欲しい。
13 :デフォルトの名無しさん :2012/06/16(土) 16:54:32.86 .net クリティカルセクションとかミューテクスって重いんですか? 秒間2500回とかマジキチですか?
14 :デフォルトの名無しさん :2012/06/16(土) 17:00:15.54 .net 400μ秒は今のパソコン環境でも、厳しいんじゃね 何をしたいかにもよるけど、専用環境作ったほうがハマらんかもね
15 :デフォルトの名無しさん :2012/06/16(土) 17:19:32.25 .net ロックフリー!
16 :デフォルトの名無しさん :2012/06/16(土) 17:33:56.57 .net >>13 そのあたりだと、API 呼び出しのオーバーヘッドもバカにならないから 自前で実装したほうがいいんじゃね?
17 :デフォルトの名無しさん :2012/06/16(土) 21:17:30.95 .net https://gist.github.com/2841832 によれば > Mutex lock/unlock 25 ns
18 :デフォルトの名無しさん :2012/06/16(土) 22:25:28.46 .net >>13 重いけどそれくらいならいけると思う できるならスレッドごとにリソースもって 最後に合体させたほうが速い
19 :4 :2012/06/16(土) 23:07:53.93 .net 申し訳ありません,並列化ですが,解決しました. /Qpar-threshold(並列化のしきい値)の値を100から20ぐらいまで下げたら5スレッドで実行されました. ただ,ものすごく,計算が遅くなってしまって,なおかつ不必要なところまで並列化されてしまったようです. このループだけ並列化したいっていうような指定ってできるのでしょうか?
20 :デフォルトの名無しさん :2012/06/16(土) 23:18:15.13 .net >>17 Mutexってスレッド数によると思うんだけどな。 シングルコアならオンキャッシュで対応できるけど、 マルチコアだったりマルチCPUだったらメモリ参照と大差ないと思う。
21 :デフォルトの名無しさん :2012/06/17(日) 02:24:44.41 .net 答え教えてもらって、闇雲にやるのが今風なの?
22 :デフォルトの名無しさん :2012/06/17(日) 02:28:46.34 .net それって、単純ループがスレッド化されただけじゃねえの?
23 :デフォルトの名無しさん :2012/06/17(日) 03:56:01.16 .net 実行環境に寄って自動で最適化して欲しいよね。 ちょっと違うけどjitみたいに自分でプロファイルとって実行処理罹る所を重点的に最適化とかさ。 4coreの環境と64coreの環境といちいち最適化するのめんどくさい。
24 :デフォルトの名無しさん :2012/06/17(日) 04:08:44.71 .net core数増えたから、早くなるってわけでもないでしょうに
25 :デフォルトの名無しさん :2012/06/17(日) 06:28:14.10 .net 効率が悪かろうと並列化したいループには !DEC$ PARALLEL ALWAYS ※ 依存性に目をつぶれという指示ではない > 64core の対応 3日かかる計算を1時間に押し込みたいなら、やる価値はある。 1分の処理が1秒になることを期待するなら、最適化する時間のほうが長い。 そもそも、大体の 64core での性能問題は 4core では小さくて見えないだけ。 スケールするとかしないとかはそういう話。
26 :デフォルトの名無しさん :2012/06/17(日) 14:48:00.38 .net 速くなってくれないと高額な多コア買った意味無いんだが。
27 :デフォルトの名無しさん :2012/06/17(日) 19:02:58.50 .net それは、プログラム作ったベンダーに言え。 場合によっては、どれくらい高速化するかの見積もりくらい出してくれるだろ。
28 :デフォルトの名無しさん :2012/06/17(日) 20:27:37.75 .net 分散処理できるように考えるほうが難しいのに 道具によってはできることとできないことがあるでしょ
29 :デフォルトの名無しさん :2012/07/06(金) 19:30:56.61 .net 多コア化すれば、将来は、割込優先スレッド用コア、時分割スレッド用コア、OS用コアに別れて、それぞれのコアが空き時間でどうでもしてくれスレッドを処理するようになる気がする。 そうしないとスケジューリングに費やすコストが無駄だ。
30 :デフォルトの名無しさん :2012/07/06(金) 19:38:42.21 .net あまり賢そうに見えないな
31 :デフォルトの名無しさん :2012/07/06(金) 19:45:56.15 .net gpuが標準的になった時点で、非対称プログラミングが当たり前になるから、コア間に使い分け、役割分担が発生するのは必然じゃないかな。もっともどのコアがどの役割をやるかは、スケジューラが決めることになるけど。
32 :デフォルトの名無しさん :2012/07/06(金) 19:58:44.83 .net 標準的な入出力は動くコア決めたほうがいいかもしれんけど プロセス、スレッドはどのコアで動こうが関係無いような どうせ、暇な?コアに割り当てられるだろうから
33 :デフォルトの名無しさん :2012/07/06(金) 20:28:22.95 .net linuxだとこういう指定が出来るようだ ttp://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/sched_setaffinity.2.html
34 :デフォルトの名無しさん :2012/07/06(金) 22:01:45.18 .net それぐらいは WindowsNT 4.0 からあるが。 SetProcessAffinityMask http://msdn.microsoft.com/ja-jp/library/cc429334.aspx
35 :デフォルトの名無しさん :2012/07/06(金) 22:04:26.89 .net コア数とかうるさい割にapiのことは言わんのね?
36 :デフォルトの名無しさん :2012/07/21(土) 14:53:22.69 .net pスレッドについて教えてください。 関係性のない処理を行う2つのスレッドA、Bを同時に動かし始めたいのですが、 ・スレッドAの待ち状態にpthread_cond_wait(&cond, &mutex1); ・スレッドBの待ち状態にpthread_cond_wait(&cond, &mutex2); として(condは同じで、mutexが異なる)、これらを動かし始めるために別スレッドで pthread_cond_broadcast(&cond); をコールしたのですが、思ったとおりに動いてくれません。 なにがいけないのでしょう? (pthread_cond_wait()の使い方を間違えている?)
37 :デフォルトの名無しさん :2012/07/21(土) 14:57:02.99 .net 馬鹿には無理
38 :デフォルトの名無しさん :2012/07/21(土) 15:18:21.14 .net >>36 broadcast を受ける側のスレッドは、 broadcast するときに wait していなければいけない broadcast したときに wait しているスレッドがいなければ、無駄撃ちになる 通常 cond が mutex と一緒に使われるのは、ターゲットが wait に入る一瞬前に broadcast を撃って運悪く外れたりするような事態を回避し、確実に当たるようにするため 思ったとおりに動いてくれないというのなら、あなたの使い方には何か誤りがあって、そういった問題を防ぎ切れていないのだろう
39 :デフォルトの名無しさん :2012/07/21(土) 15:33:58.32 .net >>38 素朴に待っていると思っていたスレッドが、実は待っていないせいで シグナルがすり抜けていたということですね このての、「関数を素朴に並べただけでは思いどおりに動作しない」問題の対応方法には それぞれに決まった「お作法」「イディオム」がありそうな気がしますが、どうなんでしょう? ともかく、ありがとうございました
40 :デフォルトの名無しさん :2012/07/21(土) 15:42:20.05 .net >>39 pthreadの粒度が小さい場合、threadの実行順序がぐだぐだになるから要注意。 結論としては、充分長い処理でもない限りcond_waitは使えない。
41 :デフォルトの名無しさん :2012/07/21(土) 15:49:59.71 .net >>40 頭で考えたアルゴリズムを実験するときに「安全装置」を省略したせいで かんたんなこーどなのにはまるなんてありそうですね・・・・ 自分が使いたい本番コードは、各スレッドの処理に十分なマスがあるので 素朴なつくりでもそれなりに動いたかもしれませんが、 再現性のないトラブルが発生する前にそういう問題を認識できてよかったです ありがとうございました
42 :デフォルトの名無しさん :2012/07/21(土) 16:06:39.87 .net >>41 去年の暮れ辺りに悩んでいたのが、mutexでスレッドプールを管理していたツールなんだよね。 mutexは相手がロックしていれば待つけど、相手がスケジュールはずされてロックしてくれていないと 自分が待たずにロックしちゃうことに。 メインスレッドでmutex_unlock(); mutex_lock()のように書いているのにunlockしたあと lockするところまで実行できないなんてちょっと想像しにくいぞ。 # 詳細不明だけど、unlockした時点でプールスレッドがスケジュールされてメインスレッドがスケジュールからはずされるっぽい。
43 :デフォルトの名無しさん :2012/08/25(土) 18:20:47.36 .net いつでもどんな時にでも スケジュールから外されても動かされても 大丈夫なように作るのが鉄則
44 :デフォルトの名無しさん :2012/08/26(日) 08:54:03.71 .net そうそう。 だから、Web上のサンプルは当てにならない。
45 :デフォルトの名無しさん :2012/08/26(日) 09:32:08.49 .net そもそも並列化したいのは高速に処理したいからじゃん? サンプルにかならずあるsleep()を消すと、途端にまともに動かなくなる まともに動かなくなるならまだいいけど、「ときどき動作がおかしい」これ最悪
46 :デフォルトの名無しさん :2012/08/26(日) 09:34:18.81 .net て言うかサンプルってそういうもんだし。 そもそも >>42 が > mutexは相手がロックしていれば待つけど、相手がスケジュールはずされてロックしてくれていないと > 自分が待たずにロックしちゃうことに。 って書いてるけど、それ以外にどんな動作を期待してるのか、よくよわからん。
47 :デフォルトの名無しさん :2012/08/26(日) 09:57:42.57 .net マトが止まっていないとシグナルがすり抜けちゃうなんて最初はわかんないでしょ そんなことより、マトがトマるだって・・・・・!喜w
48 :デフォルトの名無しさん :2012/09/01(土) 15:54:33.37 .net ダレモイナイ・・・・・・ダジャレオソルベシ・・・・・ 素朴なQなんですが、マルチCPUのマシンで、 @ひとつのプロセスに属するスレッドは、全部同じCPU(プロセスがいる)で動く Aひとつひとつのスレッドが独立してCPUを渡り歩いているように見えるのは、 スレッド単体ではなく、それの属するプロセスが渡り歩いているため こういう理解は正しいですか?
49 :デフォルトの名無しさん :2012/09/01(土) 15:58:04.54 .net スレッドの割り当てとかはOSが決めてることだからね OSの挙動に影響しないようなことを考えながらやりませう マルチCPUじゃなく 単一CPUの時のスレッド等の挙動を考えてみませう
50 :デフォルトの名無しさん :2012/09/01(土) 16:04:51.98 .net 同じプロセッサ内のコアを移動するならまだしも、別のプロセッサに移動してしまったら、 せっかく溜め込んだキャッシュがおじゃんになってしまうのではないでしょうか?
51 :デフォルトの名無しさん :2012/09/01(土) 16:11:29.80 .net 逝ってるなマルチコアはCPU毎に命令データキャッシュ持ってるでしょ
52 :デフォルトの名無しさん :2012/09/01(土) 16:12:43.77 .net でも分岐したらダメなのでは?
53 :デフォルトの名無しさん :2012/09/01(土) 16:16:42.15 .net よく考えたら、分岐するんだったらCPU移らなくてもダメだった ドピュッ
54 :デフォルトの名無しさん :2012/09/01(土) 16:27:35.25 .net 命令の先読みとかやってるの知ってる? 同じ領域を読み込む場合に早くなるってのがキャッシなのでは? HDDキャッシュとかも同じでしょ
55 :デフォルトの名無しさん :2012/09/01(土) 16:29:03.73 .net 別のプロセッサに移動してしまったらキャッシュとかおじゃんになってしまうかもしれないが、 ひとつのプロセッサに多数のスレッドが集中して別のプロセッサを遊ばせておくくらいならいくつかのスレッドを移した方がいい場合もある OSの裁量次第
56 :デフォルトの名無しさん :2012/09/01(土) 16:32:16.93 .net キャッシュ知らんでも スレッド系のプログラム作るのには関係無いような 速度ウンタラは動いてから考えればいい話でしょ
57 :デフォルトの名無しさん :2012/09/05(水) 01:11:52.99 .net 初心者の質問です new;した領域 p があって スレッドAは条件によってdelete p;をする スレッドBはpを参照する この時に 変数 blReference, blDeletingを使って Aの処理中 delete部分 while( blReference ){ Sleep(1); } blDeleting= true; delete p; p = NULL; blDeleting = false; Bの処理中 参照部分 while( blDeleting ){ Sleep(1); } blReference = true; char* cp = (char*)p: //以下参照 blReference = false; っていうのは安全でしょうか?
58 :デフォルトの名無しさん :2012/09/05(水) 04:17:50.83 .net >>57 先ず基本的にblReference, blDeletingとも、きちんと扱えるようにしないとダメ。 要は、OSの用意しているクリティカルセクションなどの機構を使う必要がある。 つーか、マルチスレッドプログラミングの基本なんだが、大丈夫なんか? それと、cpにNULLが代入されること自体は問題ないの?
59 :デフォルトの名無しさん :2012/09/05(水) 06:16:48.24 .net weak_ptr使えハゲと言うしかないレベル
60 :デフォルトの名無しさん :2012/09/05(水) 08:13:29.83 .net weak_ptrってboost? マルチスレッドを考慮されていたの?
61 :デフォルトの名無しさん :2012/09/09(日) 01:13:55.50 .net >>58 volatileしておけば、 まあいいんじゃない sleep で待つのは効率はよくなさそうだけど
62 :デフォルトの名無しさん :2012/09/09(日) 01:44:44.97 .net volatile使ったとしてもコンパイラによっては安全だとは言えないんだよ
63 :デフォルトの名無しさん :2012/09/09(日) 01:51:51.18 .net 安全って、思いたい理由の方に興味があるんだけど
64 :デフォルトの名無しさん :2012/09/09(日) 07:41:49.96 .net むしろ安全だといえるコンパイラを知りたい
65 :デフォルトの名無しさん :2012/09/09(日) 14:24:32.10 .net volatile使っても結果変わらない事の方が多い気がする
66 :デフォルトの名無しさん :2012/09/09(日) 15:54:34.19 .net そりゃそうだ
67 :デフォルトの名無しさん :2012/09/09(日) 16:30:00.96 .net 安全だと思うと、コンピュータがそれを理解して動いてくれると思いたいのかな
68 :デフォルトの名無しさん :2012/09/12(水) 00:03:54.96 .net volatileしてダメだったケースに遭遇したことないなあ。 まあboolでの同期・排他は簡単なケースにしか使ってなくて、 まじめなのはcritical sectionとかmutexで排他・同期するから 気がついてないだけかもしれないけど。
69 :デフォルトの名無しさん :2012/09/12(水) 07:22:51.47 .net >>57 >// スレッドA >while( blReference ){ Sleep(1); } // 1 >blDeleting= true; // 3 >// スレッドB >while( blDeleting ){ Sleep(1); } // 2 >blReference = true; // 4 スレッドの処理が時間的に番号の順で行われる場合がある。 つまり、この処理はスレッド間の排他にはなっていない。 おとなしくクリティカルセクションを使ってロックした方がいい。
70 :デフォルトの名無しさん :2012/09/22(土) 01:53:58.20 .net >>69 InterlockedExchangePointerは?
71 :デフォルトの名無しさん :2012/09/29(土) 20:38:32.52 .net 質問ですが、Windows APIのSetEvent()やWaitForSingleObject()って、 内部で適切にメモリバリアを行うことが保証されていますか? 例えば、下記のケースにおいて、_WriteBarrier()や_ReadBarrier()は冗長? (メインスレッド側) bTerminate = true; // volatile bool型 _WriteBarrier(); SetEvent(hEvent); // スレッドを起床させる (ワーカースレッド側) WaitForSingleObject(hEvent); // 起床されるまで待つ _ReadBarrier(); if (bTerminate) { .... } // メインスレッドから通知されたbTerminateに基づく処理
72 :デフォルトの名無しさん :2012/09/29(土) 20:49:37.13 .net も一個、volatile bool a, b; があるとして、 a = c; b = d; の代入順序は、a, bがたとえatomicな型でvolatileだからといって プロセッサのアウトオブオーダー実行のレベルでは実施される順序が保たれる保証はない、 よって、上記代入を行ったコア以外のコアからaやbを代入順序依存で参照する場合は メモリバリアが 必 須 、 という理解で合っていますか
73 :デフォルトの名無しさん :2012/09/29(土) 21:08:56.80 .net >>71 http://msdn.microsoft.com/en-us/library/ms686355%28VS.85%29.aspx > The following synchronization functions use the appropriate barriers to ensure memory ordering: > ・Functions that enter or leave critical sections > ・Functions that signal synchronization objects > ・Wait functions > ・Interlocked functions >>72 はい
74 :デフォルトの名無しさん :2012/09/30(日) 00:03:39.72 .net >>64 javacやcscじゃね
75 :デフォルトの名無しさん :2012/09/30(日) 00:12:53.41 .net メモリバリアってのはgcc特有の表現で atomicな処理とは関係ないんだけど
76 :デフォルトの名無しさん :2012/09/30(日) 00:30:58.05 .net >>73 dクス SetEvent()は2番目(・Functions that signal synchronization objects)、 WaitForSingleObject()は3番目(・Wait functions)ってことでおkそうですね >>75 メモリバリアはアウトオブオーダー実行するアーキテクチャに共通する概念であってGCC固有というわけではないですにょ とかいろいろあるが説明がマンドクセ、
77 :デフォルトの名無しさん :2012/09/30(日) 00:56:39.75 .net ただの最適化抑止のおまじないみたいなもんだよ
78 :デフォルトの名無しさん :2012/09/30(日) 01:05:56.81 .net >>77 ちょっそれvolatileの方wwwww まあ>73の通り、Windows API内部でよろしくやってくれるので普通はメモリバリアの方は意識しなくて良いっぽい おそらくUNIXのシステムコールも同様でよろしくやってくれるから知る人ぞ知る知識になってしまうのだろう…
79 :デフォルトの名無しさん :2012/09/30(日) 01:13:58.15 .net マルチコア時代の並列プログラミング 〜ロックとメモリオーダリング〜 http://www.nminoru.jp/~nminoru/data/b2con2006_nminoru.pdf
80 :デフォルトの名無しさん :2012/09/30(日) 01:14:33.03 .net gccのvolatileってのは、ちょっと特殊なんだよ
81 :デフォルトの名無しさん :2012/09/30(日) 01:21:19.22 .net >>77 ,78 真相はもっと複雑怪奇だったりする http://yamasa.hatenablog.jp/entries/2009/07/20 http://msdn.microsoft.com/ja-jp/library/bb310595%28VS.85%29.aspx つまり、VC++2005以降である限り、volatileを使うとメモリバリアも面倒をみてくれるらしい…
82 :デフォルトの名無しさん :2012/09/30(日) 01:26:29.84 .net ここらへんの話は ・(インラインでない)関数呼び出しの副作用を恐れてコンパイラが最適化を自粛 ・volatileによって明示的に最適化が抑制 ・システムコール内でメモリバリアの面倒をみてくれる ・ハードウェアがコア間でキャッシュのコヒーレンスをとってくれる といった事情が絡み合った結果、運よく問題を生じないケースも多々あるので コードをバリバリ書いているような人でもきちんと理解していないことがある(あった)
83 :デフォルトの名無しさん :2012/09/30(日) 01:27:48.80 .net アトミック変数とか作って、ド素人に誤解釈されたらどうすんだろ、この人
84 :デフォルトの名無しさん :2012/09/30(日) 02:22:23.12 .net >>81 > つまり、VC++2005以降である限り、volatileを使うとメモリバリアも面倒をみてくれるらしい… そこで面倒を見てくれるのは「release/aquireメモリバリアとしてのみ」であることに注意。 http://yamasa.hatenablog.jp/entry/20090816/1250446250 こっちのSequential consistencyの性質は、VC++2005以降のvolatileでも持っていない。
85 :デフォルトの名無しさん :2012/09/30(日) 13:33:02.65 .net >>83 ドシロウトがなんでスレッド使った開発に加わるんだよ
86 :デフォルトの名無しさん :2012/09/30(日) 13:35:58.01 .net なんで排他の話ばっか出てくるんだ。 スレッド間で書き換えしまくるような変数なんて殆ど無いだろ。 それはともかく、C++向けのクロスプラとフォームなスレッドキューって無いものか。
87 :デフォルトの名無しさん :2012/09/30(日) 14:26:20.27 .net >>86 >なんで排他の話ばっか出てくるんだ。 マルチスレッドで問題になるところと言うか、排他を最近覚えた奴が 使いたくてしょうがないんだろ。
88 :デフォルトの名無しさん :2012/09/30(日) 15:13:14.28 .net >>86 スレッドの実装が違うだろう、LinuxとUNIXなら同じだが
89 :デフォルトの名無しさん :2012/09/30(日) 15:25:27.37 .net >>85 じゃあ、うわっつらの言葉だけ知ってる甘ちゃん系ではどう?
90 :デフォルトの名無しさん :2012/09/30(日) 16:54:17.48 .net >>88 boostとか抽象化レイヤー用意すればできるだろ。 しかし、仕様の安定したスレッドキューがない。 もう、自作スレッドキューを保守するのは嫌だお
91 :デフォルトの名無しさん :2012/09/30(日) 17:01:09.98 .net >>90 皮かぶせりゃいいだろうけど、 そこまでして、 そこまでしても
92 :デフォルトの名無しさん :2012/09/30(日) 21:04:28.14 .net おまえら何回C++におけるatomicとvolatileの話を繰り返せば気がすむの
93 :デフォルトの名無しさん :2012/09/30(日) 21:20:03.98 .net それしかネタがないからさ
94 :デフォルトの名無しさん :2012/09/30(日) 22:09:45.89 .net >>92 スレッドキューの話しだせ
95 :デフォルトの名無しさん :2012/09/30(日) 23:24:16.01 .net だって手法なんて先駆者が出し尽くしただろ
96 :デフォルトの名無しさん :2012/09/30(日) 23:53:26.29 .net スレッドキューって何だ? スレッドセーフなキューってことか? それともGCDみたいなタスクキューのことか?
97 :デフォルトの名無しさん :2012/10/01(月) 00:06:38.53 .net タスクキューのことだよ。 てかスレッドセーフなキューってなんだよ。それだったら 別にキューに限定せずスレッドセーフなコンテナの話でいいだろ。
98 :デフォルトの名無しさん :2012/10/01(月) 07:53:47.16 .net java.util.concurrent.BlockingQueueのことだろ
99 :デフォルトの名無しさん :2012/10/12(金) 23:18:24.02 .net 同期処理を間違いなく設計するための、何か良い手法やツールはないですかね? ペーペーのビギナーだというのもあるのですが、 複数のmutexを混在させなければいけない時にぼんやり書いたコードでデッドロックを発生させたり、 waitに到達していないのにシグナル発射する可能性のあるコードを書いてしまって、 そのデバッグで無駄に体力を消耗しています
100 :デフォルトの名無しさん :2012/10/13(土) 11:18:48.75 .net 馬鹿には無理
101 :デフォルトの名無しさん :2012/10/13(土) 13:05:32.66 .net >>99 排他処理、スレッドモデルと実装を勉強すれば ビギナーには無理と思うが
102 :デフォルトの名無しさん :2012/10/13(土) 18:57:49.84 .net >>99 もうそこは、共有している資源と mutex の一覧表作って、地道に設計してレビューで 確認するしかない。 imagix とか確認を支援するツールはあるけど。
103 :デフォルトの名無しさん :2012/10/13(土) 22:12:39.46 .net >>101 やんないと、他に仕事ないんで・・・・ >>102 かなり頭がよくないと、サラリと正しいコード書けないですよね(棋士的な意味の頭のよさ) そうか、地道にやるしかないのか(´・ω・`) ・・・売り物なんですねimagix 自分の担当業務以外にも使えそうなので、ちょっとチーム内に紹介してみます とりあえず、今の自分のレベルでミスりやすいところを正しく実装するための比喩をいくつか考案中です ↓ 例1 スレッド間同期は、キャッチボール ボールを受け取る側は、しゃがんでいないとボールをキャッチできない 例2 スレッド再開時の手順は、競馬のスタートと同じ @ゲートを閉じる(送信側mutexロック) A馬がゲート前に並ぶ(受信側wait) Bファンファーレが鳴る(signal) Cゲートが開く(送信側mutex開放)
104 :デフォルトの名無しさん :2012/10/13(土) 23:51:02.32 .net mutexなんか使わずfuture、promisで凌げ
105 :デフォルトの名無しさん :2012/10/14(日) 17:05:55.79 .net >>103 転職したほうがよくね ハロワ通いでもしてみたら
106 :デフォルトの名無しさん :2012/10/14(日) 18:33:06.95 .net まず10年間C++を勉強しろ
107 :デフォルトの名無しさん :2012/10/14(日) 20:43:53.62 .net >>106 C++関係ないやん
108 :デフォルトの名無しさん :2012/10/15(月) 01:03:58.39 .net >>103 比喩を作ることができるならすでに理解できてるんじゃないの?ってことで、 結局比喩は不要だよねって流れにならないのかな。
109 :デフォルトの名無しさん :2012/10/15(月) 09:17:51.40 .net 結局無理てことか、初心者というより基本が
110 :デフォルトの名無しさん :2012/10/21(日) 14:23:48.88 .net >>103 とにかくソースコードをきれいに書け そうすれば、ソースコードが間違いを教えてくれる
111 :デフォルトの名無しさん :2012/10/21(日) 14:42:59.60 .net >>110 > そうすれば、ソースコードが間違いを教えてくれる おっ、なんか響きがいい言葉だな。
112 :デフォルトの名無しさん :2012/10/21(日) 23:06:50.68 .net Joel on softwareの和訳ページ『間違ったコードは間違って見えるようにする』 を紹介しようと思ったが今ちょっと繋がらないようなので原文で読んでちょ↓↓↓ http://www.joelonsoftware.com/articles/Wrong.html
113 :デフォルトの名無しさん :2012/10/26(金) 20:45:55.33 .net 教えてください g++でコンパイルしたプログラムのプロファイリング、特にスレッドの動作の 効率を見たいのですが、Linux環境で使える定番のフリーツールはないでしょうか?
114 :デフォルトの名無しさん :2012/10/28(日) 11:59:56.78 .net gdb
115 :デフォルトの名無しさん :2012/10/28(日) 21:28:29.42 .net マ ジ ハ ,,ハ デ (;゚◇゚)z !?
116 :デフォルトの名無しさん :2012/12/05(水) 09:54:15.94 .net プロファイラでわかるのはどの部分が処理時間の何%を使ってるか ぐらいであって、スレッドの動作効率なんていう個人の価値観みたい なものは測定できんだろ。
117 :デフォルトの名無しさん :2012/12/31(月) 15:20:38.31 .net C#です。 C#ではローカル変数にvolatileを付けられませんが 以下の場合、最適化でスレッドの変更が反映されない場合はありますか? var init = new ManualResetEventSlim(false); int val = 0; var t = new Thread(() => { val = …; // valに何らかの値を入れる init.Set(); // valを初期化したことを知らせる : // スレッドの処理が続く }; t.Start(); init.Wait(); // スレッドでvalが初期化されるまで待つ // valを使う。スレッドでの変更が反映されている?
118 :デフォルトの名無しさん :2012/12/31(月) 16:48:21.02 .net あります
119 :デフォルトの名無しさん :2012/12/31(月) 19:09:35.15 .net >>118 どういった理由でしょうか? http://www.albahari.com/threading/part4.aspx >The following implicitly generate full fences: >Setting and waiting on a signaling construct という記述を見つけたのですが、これによれば valへの書き込みをinit.Set()より後に、valからの読み込みをinit.Wait()より前に という事は行われないように思えるのですが。
120 :デフォルトの名無しさん :2013/01/01(火) 04:47:40.84 .net 判ってるのに質問するなボケが
121 :デフォルトの名無しさん :2013/01/01(火) 12:37:44.23 .net それを否定されたから理由を聞いてるんじゃないのか
122 :デフォルトの名無しさん :2013/01/04(金) 04:09:28.62 .net C#が自ら自身の仕様を質問すること自体が。 まぁ、人間だって自身についてどれだけ知っているか怪しいもんだが。
123 :デフォルトの名無しさん :2013/01/05(土) 12:19:18.18 .net >>96 の発言で思い出した。 GCDといえば、最近WindowsとLinuxにも移植されたっぽいんだよね。 http://opensource.mlba-team.de/xdispatch/docs/current/index.html pThreadとかWin32スレッドをローレベルで使うよりお手軽な気がする。 ちょっと試してみるわ。
124 :デフォルトの名無しさん :2013/01/05(土) 18:17:06.97 .net 123だけど、 XDispatchだが、Windowsであっけなく使えた。 こりゃいいぜ。Win、Mac、Linuxで同一ソースでGrand Central Dispatchが使える。 マルチスレッドプログラミング新時代到来って感じだw
125 :デフォルトの名無しさん :2013/01/08(火) 19:15:30.57 .net XDispatchの導入記事を書いてみた。 https://docs.google.com/document/pub?id=1miIRZh8QteYzjIiU7GjcGSshTp470qHbRQUh0wf12Sw 突っ込みどころあったらご指摘よろ。
126 :デフォルトの名無しさん :2013/01/08(火) 20:13:02.13 .net libdispatch + α、って感じなのか
127 :デフォルトの名無しさん :2013/01/09(水) 01:22:43.52 .net >>126 そうみたい。 基本的にはマルチプラットフォームでやりたい場合は${ ~ }の記法とautoを使えばオッケー。 他にも標準のlibdispathには無い機能とか、Qtユーザー向けのQtDispatchとかあるみたいだけど、そこまではまだ調べられてない。 時間があったらもっと調べてみて、追記してみるよ。
128 :デフォルトの名無しさん :2013/01/30(水) 19:59:09.23 .net Win32でのプロセス間リソース共有の仕方で悩んでます 1. ポーリング=Mutexで保護された共有リソースの変更を常に監視 2. サーバー(orクライアント)スレッドでEvent監視+Mutexで共有リソースを保護 余計なCPUリソースを食うのはどちらなんでしょうか?定性的な評価と理由を教えてください (定性的な評価=プロファイルで調べろは無しでお願いします) 自分は「重さ:Mutex>>>>Event>>>>>>>CriticalSection」というイメージがあるので、 2のマルチスレッドのコンテキストスイッチの重さを考慮しても1の方が重いのではないかと考えています
129 :デフォルトの名無しさん :2013/01/30(水) 20:42:56.62 .net (゚Д゚)ハァ? Mutexを奪い合えばいいだけだし。
130 :デフォルトの名無しさん :2013/01/30(水) 21:22:17.63 .net Event vs. Pollingは宗教戦争
131 :デフォルトの名無しさん :2013/01/30(水) 21:52:45.99 .net 何もすることがなきゃ寝て待ってればいいだけ 何かしたけりゃイベント来るまでしてればよかろう
132 :デフォルトの名無しさん :2013/01/31(木) 08:42:39.84 .net Mutexが重いんじゃなくてポーリングが重いんだろ イベントやメッセージ等の非同期通知が使えるなら、そっちのほうが軽いのは当然
133 :デフォルトの名無しさん :2013/01/31(木) 22:24:51.03 .net >>128 > Win32でのプロセス間リソース共有の仕方で悩んでます winすれで聞いたら > 余計なCPUリソースを食うのはどちらなんでしょうか?定性的な評価と理由を教えてください 人から聞いたことを信じるの?
134 :デフォルトの名無しさん :2013/02/01(金) 07:29:56.93 .net 効率を気にする香具師が2chで質問するとかもうね
135 :デフォルトの名無しさん :2013/02/17(日) 17:37:32.78 .net >>79 ではx86、x64では(P6〜) RAR WAR WAW RAW × × × × ... × 順序の逆転が起きる WAR ... Write after Read (書いてから読む) となってるけど>>81 のMSDNでは WAR のみ逆転が起こる、書いてる。 RAR WAR WAW RAW ○ × ○ ○ どっちが正しいのでしょうか? あと、MSDNの英語の原文はこっちだけど http://msdn.microsoft.com/en-us/library/windows/desktop/ee418650(v=vs.85).aspx Reads moving ahead of writes の訳が 「読み取りを書き込みの先に移動する」 「書き込みの前に読み取りを移動」 と2回出てきて紛らわしい。 write ... read この順番が逆になることあり、てことだよね?
136 :デフォルトの名無しさん :2013/02/17(日) 21:17:44.97 .net >>135 それ RAW じゃね シングルスレッドのメモリ命令は RAW (対象アドレスが被らない) と WAW (命令による) の特定ケースを除いて命令順通り、 マルチスレッドの各スレッド間では、全パターンに入れ替えの可能性あり。 たぶん MSDN の記載は誤解を招くかと。 こちらの根拠は以下の Volume 3A, Chapter 8.2 Intel 64 and IA-32 Architectures Software Developer's Manuals ttp://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html write -> 0x1000 ... read -> 0x2000 と明らかに異なる場所へのアクセスであり、... の間に他のメモリアクセスが 無ければ、read を write の前に持ってきても結果は変わらないはず。
137 :デフォルトの名無しさん :2013/02/18(月) 21:54:23.31 .net >>135 WARはレジスタリネーミングと同じだよ。 上書きするなら依存関係が切れるので命令の実行順序は入れ替え可能になる。 結果を内部で保持しておいて後で書き出す。 そして実際のメモリの内容は命令の順序通りの結果になる(ならなかったら大変)。 でいいかと。
138 :137 :2013/02/18(月) 22:30:08.38 .net >>137 の補足しとくと、同一プロセッサでも異なるアドレスだとリオーダ可能なので 順序が重要な場合はメモリフェンスが必要になる。 別のプロセッサ間でもリオーダ可能ということになる。 別のプロセッサとの同じメモリに対するアクセス順序はタイミング次第で複雑なので 必要に応じてロックプレフィックスを使う。
139 :デフォルトの名無しさん :2013/02/18(月) 23:53:52.86 .net >>135 MSDNのほうが正しい。 昔はIntelのdeveloper manualの記述が曖昧だったこともあり、 間違った解説が結構ある。 >>136-138 マルチスレッドでもRAW以外は入れ替わらないよ。
140 :デフォルトの名無しさん :2013/02/19(火) 07:57:34.41 .net >>139 キャッシュラインがコピーされた状態ではRARの順番は替わりうると思うけど RAW自体は入れ替わらないんじゃないかな。 実際のWriteの前にReadが割り込む可能性があるけど、それはタイミング次第ってことで。
141 :デフォルトの名無しさん :2013/02/19(火) 09:15:14.16 .net lockプリフィックス使うんじゃあ
142 :デフォルトの名無しさん :2013/02/23(土) 20:04:20.23 .net >>139 そうか、マルチスレッドでもリオーダは無いな。他から割り込まれる可能性があるだけだ。
143 :135 :2013/02/23(土) 23:41:17.41 .net >>136-142 さん、さんくすでした。 MDSNが正しかったのですか。 > それ RAW じゃね でした。コードの順番と英語表記は逆になるんですよね。誤解してました・・・。 この辺を勉強する本とかないでしょうか? 「The Art of Multiprocessor Programming 並行プログラミングの原理から実践まで」 は読んでみたのですがロックレスアルゴリズムの原理だけでCPUごとの実装は なかったのであまり役にたたなかったです。
144 :デフォルトの名無しさん :2013/02/24(日) 10:17:55.94 .net ハードウェアを実装するとなったらそれこそ本一冊どころではすまないだろうけど、 データの同期に関しては何が危険でどうすれば安全に扱えるかが区別できればいいんじゃない? だから本を買って読むほどでもないような。 CPU内の順序はOut of Orderが関係していて、CPUは可能な限り速く実行しようとするから 順番が入れ替わってしまうってことで、それをコントロールするのにメモリバリア命令がある。 アセンブラの最適化にも関係してるから、プロセッサの最適化マニュアルとかも参考になるかも。 マルチプロセッサではキャッシュコヒーレンシやMESIプロトコルとかの概略を知ってればいいんじゃないかな。 他のプロセッサに割り込まれて困る部分にはlockで保護するとか。
145 :デフォルトの名無しさん :2013/02/26(火) 14:50:30.35 .net Java の資料だけど「コンパイラ開発者のためのJSR133クックブック」ってのはどう?
146 :デフォルトの名無しさん :2013/02/27(水) 12:54:04.48 .net >>145 邦訳版はダメ。 肝心のアーキテクチャ毎の表などが古いままで間違っている。
147 :デフォルトの名無しさん :2013/02/27(水) 23:21:29.29 .net RafterWってシングルスレッドなら絶対安全? 途中で実行cpuが変わってもosが面倒見てくれるから気にする必要はないってこと? 実行cpuが変わることあるかしらないけど まぁ普通にコード書いてて入れ替わる訳ないから大丈夫か
148 :デフォルトの名無しさん :2013/03/02(土) 16:47:32.29 .net >>147 > まぁ普通にコード書いてて入れ替わる訳ないから大丈夫か 普通に入れ替わるだろ。 切替前に読み込んだ情報は、違う CPU でもちゃんと復帰するから 問題ないはず。
149 :デフォルトの名無しさん :2013/03/03(日) 20:26:49.52 .net >>148 書き方が悪かった。 マルチプロセッサの環境でシングルスレッドのコードを実行してて、 実行CPUが変わったとしても読み書き順が入れ替わらないでしょう? そこはOSがプロセス切り替え時に勝手にバリアをかけてるはずだよね?ってこと
150 :デフォルトの名無しさん :2013/03/03(日) 20:30:18.24 .net >>149 ああそういうことか、それは大丈夫だと思うよ。
151 : ◆0uxK91AxII :2013/03/03(日) 22:58:29.83 .net バーリアー!平気だもーん!
152 :デフォルトの名無しさん :2013/03/04(月) 01:43:54.42 .net MemoryBarrier()の実装ってx86では単なるxchgなのな。 なんでmfence使ってないのだろう?速度では大差ないってことなのかな。 MemoryBarrier macro (Windows) http://msdn.microsoft.com/en-us/library/windows/desktop/ms684208 ↓はC++11のスレッドライブラリ作った作者の本らしいんだが、pdfで全部公開されてる。 ありがたいのでだけどメモリフェンスは std::memory_order_acquire みたいな一般命令で 隠すようなコードしか書いてない。 C++ Concurrency in Action: Practical Multithreading http://www.amazon.co.jp/dp/1933988770/
153 :デフォルトの名無しさん :2013/03/04(月) 09:03:05.32 .net マルチコアでないマルチプロセッサ構成で、 外部キャッシュや主記憶のシステムコントローラが、 CPU本体より弱いメモリモデルを採用してる場合に意味を持ってくる。 Windowsではこうゆうハードウェア構成は想定してないはず。
154 :デフォルトの名無しさん :2013/03/04(月) 10:40:54.32 .net >>153 違うよ。全然違うよ。 とりあえず、これでもじっくり読め。 msdn.microsoft.com/ja-jp/magazine/jj883956.aspx
155 :デフォルトの名無しさん :2013/03/04(月) 11:45:37.38 .net ところでmfenceは何でSSE2の制御命令に分類されてるの?
156 :デフォルトの名無しさん :2013/03/04(月) 23:37:29.77 .net >>152 MemoryBarrier()はx64でもsfence/mfence使ってないな。 やっぱり処理速度の関係だろうか。 まるでenter命令並みに使えない。 x86 0000b 87 04 24 xchg DWORD PTR _Barrier$66624[esp+4], eax x64 0003a f0 83 0c 24 00 lock or DWORD PTR [rsp], 0
157 :デフォルトの名無しさん :2013/03/11(月) 14:35:12.41 .net >>155 xFENCE命令はMOVNTPS, MOVNTPD,などのNon Temporal転送命令向けの機能で、 この系統の命令だけx86のメモリモデルに従わないので専用のFENCE命令が必要となった。 このうちLFENCEとMFENCEは普通のx86命令にも効果があるが、 パフォーマンスがxchgに劣る。
158 :デフォルトの名無しさん :2013/03/11(月) 15:38:43.70 .net なんでxchgがバリアとして使えるの?
159 :デフォルトの名無しさん :2013/03/11(月) 17:50:17.45 .net メモリに対するxchgは自動的にlockを伴う
160 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/06/18(火) 23:59:01.86 .net 確率的にいつ終わるかわからない時間の掛かる処理をマルチスレッドを使って複数同時に 実行させると、シングルスレッドよりも早い時間で終わる確率が高くなると思うが、これについて貴様らはどう思う?
161 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/06/19(水) 00:04:03.77 .net ちなみにクロスワード自動作成ソフトを作ってますっ
162 :デフォルトの名無しさん :2013/06/19(水) 01:02:30.98 .net 辞書ひく時間が糞長いから、マルチスレッドやっても大して変わらない
163 :デフォルトの名無しさん :2013/06/19(水) 06:32:32.99 .net >クロスワード自動作成ソフト どこらへんを並列化できるのん?
164 :デフォルトの名無しさん :2013/06/19(水) 09:30:45.19 .net バックトラック乱れ打ちじゃねーの
165 :デフォルトの名無しさん :2013/06/20(木) 07:49:26.95 .net 同じレスを各板に乱れ撃ちする作業だろ?
166 :デフォルトの名無しさん :2013/06/20(木) 15:25:09.57 .net マルチスレッドにしたら5〜8時間に1回エラーが出るようになった。でもデバックできないよorz
167 :デフォルトの名無しさん :2013/06/20(木) 20:17:10.50 .net つログ
168 :デフォルトの名無しさん :2013/06/20(木) 22:19:34.34 .net 同期もわかってないのにマルチスレッドにするからだ。
169 :デフォルトの名無しさん :2013/06/20(木) 22:26:19.30 .net 同期とったら並列の意味がなくなりそうでためらうときがあるな 待ち合わせキューにするくらいなら順番に処理した方がましな気がする
170 :デフォルトの名無しさん :2013/06/21(金) 00:07:54.88 .net つスーパースカラー
171 :デフォルトの名無しさん :2013/06/21(金) 00:28:22.79 .net 粒度変えりゃいいじゃん
172 :デフォルトの名無しさん :2013/06/21(金) 04:34:35.98 .net マルチスレッドって自作できるんですか? 以前nyの書籍を読んだときに、開発者の人がマルチスレッドを自作したと書いてたような気がするのですが C言語でも自作できるんですか?
173 :デフォルトの名無しさん :2013/06/21(金) 04:48:19.55 .net マルチスレッド・マルチタスクで動いているように見せることは出来る。 並列動作させたい複数の処理を細切れにしてちょっとづつ実行して グルグル回す。
174 :デフォルトの名無しさん :2013/06/21(金) 15:03:05.45 .net >>173 タイムシェアリングみたいにやるってことですか
175 :デフォルトの名無しさん :2013/06/21(金) 19:27:29.84 .net >>174 俺が>>173 で書いたのは、タイムシェアリングではなく ノンプリエンプティブ・マルチタスク。 例えば無限ループ内に3処理 A, B, C があったとして それらをマルチで実行したければ、それぞれを A1, A2, A3 B1, B2, B3 C1, C2, C3 などと細切れに分割し、 A1, B1, C1, A2, B2, C2, A3, B3, C3, A1, ……(無限ループ) と実行する。 いまでも、組み込みでコントローラやセンサーを制御する小さなCPUは マルチタスクの能力を持っていないのが当たり前のようにあり、 これでマルチ動作させるのに当たり前のように使われる手法。
176 :デフォルトの名無しさん :2013/06/21(金) 19:38:33.60 .net スレち
177 :デフォルトの名無しさん :2013/06/21(金) 19:52:56.34 .net スレチというほどじゃないんじゃない? OSレベルでスレッドのサポートが無い場合は、 言語ランタイムレベルのグリーンスレッド タイマー等の割り込みの利用 メッセージポンプのループ利用 NT Fiber スレッドはないけどプロセスのマルチが出来るなら、 パイプなどでプロセス間通信の利用 といったところかな
178 :デフォルトの名無しさん :2013/06/21(金) 20:25:17.31 .net 俺もスレチじゃないと思う
179 :デフォルトの名無しさん :2013/06/21(金) 20:31:18.12 .net windows 3.1 を思い出すな
180 :デフォルトの名無しさん :2013/06/21(金) 20:41:54.83 .net ファイバーってレアすぎ
181 :デフォルトの名無しさん :2013/06/21(金) 22:30:00.37 .net >>175 win31 のことね
182 :デフォルトの名無しさん :2013/06/21(金) 22:38:33.58 .net 気が早いな まだ8だぞ
183 :デフォルトの名無しさん :2013/06/21(金) 23:18:56.88 .net 2000があるのに… >>175 をタイムシェアリングだと思ってたな。もう少し勉強しよう。
184 :デフォルトの名無しさん :2013/06/21(金) 23:38:19.83 .net ファイアー少なくてレアすぎ
185 :デフォルトの名無しさん :2013/06/21(金) 23:40:35.43 .net 広義だと含むのとちゃうかな おさ〜ん的にはTSS(TSO)のホスト端末を思い浮かべるけど
186 :デフォルトの名無しさん :2013/06/23(日) 12:58:55.01 .net ファイバー使ってみたけど、 フェーズとswitchより シンプルに書けたよ。
187 :デフォルトの名無しさん :2013/11/22(金) 08:18:08.42 .net C/C++ で勉強したいのですが、おすすめの書籍などありますか? もしくは一から学べるようなWebページがあれば教えてください
188 :デフォルトの名無しさん :2013/11/22(金) 09:05:54.07 .net D の方が良いよ
189 :デフォルトの名無しさん :2013/11/22(金) 13:04:58.77 .net 猫でもわかる
190 :デフォルトの名無しさん :2013/11/23(土) 05:39:10.02 .net >>188 D のほうが書きやすい?触れたことないのでわからんです >>189 猫でもわかる は、Web版が俺にはちょっと分かりづらかった記憶が 書籍だとそうでもないのかな C++のBoostを利用したThreadプログラミングの解説ページがあったので今はそれ見てます
191 :デフォルトの名無しさん :2013/11/23(土) 09:00:39.63 .net >>190 触ってもいいお
192 :デフォルトの名無しさん :2013/11/23(土) 13:19:59.45 .net >>191 どれどれ
193 :デフォルトの名無しさん :2013/11/23(土) 13:24:53.59 .net >>191 ペロペロ
194 :デフォルトの名無しさん :2014/02/23(日) 09:00:04.29 .net マルチスレッドって自力だとどうやって書くの?
195 :デフォルトの名無しさん :2014/02/23(日) 09:43:27.54 .net pthread_create()
196 :KUSO KOTE ◆unko./w.Osri :2014/02/23(日) 10:15:16.84 .net >>194 std::thread th{ []{std::this_thread::sleep_for(std::chrono::milliseconds(3000));} }; std::printf("うんこ\n"); th.join();
197 :デフォルトの名無しさん :2014/02/24(月) 17:57:18.01 .net 例の金子がny作るときにマルチスレッドは自作したんじゃなかったっけ?
198 :デフォルトの名無しさん :2014/02/24(月) 18:45:47.70 .net なんとかしてこれを読むと良い ttp://ci.nii.ac.jp/naid/40000002652
199 :デフォルトの名無しさん :2014/02/25(火) 00:18:34.64 .net >>197 あれ、シングルスレッドだよ。 Windows3.1みたいな方法で複数のタスク回してる。
200 :デフォルトの名無しさん :2014/02/25(火) 06:43:17.74 .net 小学生がBASICで弾の連射実装してるレベルだろ。
201 :デフォルトの名無しさん :2014/02/25(火) 12:01:20.77 .net グリーンスレッドとは違うの?
202 :デフォルトの名無しさん :2014/02/25(火) 17:16:14.73 .net グリーンスレッドなんて初耳。wikip見たらなんかトンデモな説明なんだが。 これは誰が言い出したんだ? バズワードくさい。
203 :デフォルトの名無しさん :2014/02/25(火) 17:27:19.90 .net レッドスレッド、ブルースレッドはあるのでしょうか?
204 :デフォルトの名無しさん :2014/02/25(火) 17:28:25.61 .net OSが関与しないスレッドの実装のこと。ウィキペディアの記述がタコってるのはいつものこと。 基本的な理屈はそう難しくないけど、実際にはreadとかでどれかのスレッドがプロセスごと ブロックされると、他に走りたいスレッドが居ても走れなくなっちゃうので、そのへんを どう手当てするかがカギ(そういった所だけOSが支援するとか、ブロックする可能性がある システムコールに関連するものは全てスレッドライブラリが面倒を見るとか)。
205 :デフォルトの名無しさん :2014/02/25(火) 17:33:10.94 .net よく分らんな。スレッドってそもそもOSが定義したものだろう。 アプリ側がたかが永続性のあるサブルーチン程度のものを 勝手にグリーンススレッドって呼んでるだけじゃないのか? まさしく小学生がBASICで弾の連射実装してるレベルの話。ガッカリ度120%。
206 :デフォルトの名無しさん :2014/02/25(火) 18:01:22.88 .net ユーザースレッド、ユーザ空間でか、なるほど カーネルスレッド、カーネル空間でか、なるほど グリーンスレッド、仮想機械上でか、で、なんでグリーンやねん。それこそ>>203
207 :デフォルトの名無しさん :2014/02/25(火) 18:14:03.00 .net ttp://dl.acm.org/citation.cfm?id=603551 ↑これが「小学生がBASICで弾の連射実装してるレベルの話」に見えるのか。 さぞかしスーパープログラマ(笑)様なんだろうな。
208 :デフォルトの名無しさん :2014/02/25(火) 18:19:01.04 .net その例え話しとその提示したのと繋がりそしてなんでその皮肉になるのか、200文字以内で説明しなさい
209 :デフォルトの名無しさん :2014/02/25(火) 18:49:55.40 .net wikipediaのスレッドの項目の所まで加筆してやがるww バズワード確定だな。エミュレータでゲーム動かしたらグリーンスレッドかよw そんなのスレッドと何の関係もないのにスレッド言うなや。
210 :デフォルトの名無しさん :2014/02/25(火) 19:49:47.38 .net 結局、逆の意味でのウィキペディア馬鹿か。 一人で言ってろw
211 :デフォルトの名無しさん :2014/02/26(水) 05:28:26.83 .net グリーンCPU。 グリーンプロセス。 グリーンヒープメモリ。 グリーンスタックメモリ。 グリーン仮想メモリ。 グリーン物理メモリ。 グリーンマルチタスク。 グリーンネットワーク。 グリーンアップル。 おれもいっぱい考えました。
212 :デフォルトの名無しさん :2014/02/26(水) 08:36:42.11 .net グリーンPC グリーンディスプレイ が抜けている
213 :デフォルトの名無しさん :2014/02/26(水) 08:51:32.57 .net ソイレント
214 :デフォルトの名無しさん :2014/02/26(水) 13:23:35.72 .net MZ-80Kの話をしてるのかと思ったぜ
215 :デフォルトの名無しさん :2014/02/26(水) 14:34:56.07 .net >>214 そりゃMZ80Cだ! MZ80Kはモノクロだ!
216 :デフォルトの名無しさん :2014/02/26(水) 17:24:33.12 .net > ユーザースレッド、ユーザ空間でか、なるほど > カーネルスレッド、カーネル空間でか、なるほど > グリーンスレッド、仮想機械上でか、で、なんでグリーンやねん ユーザースレッドとカーネルスレッドという言葉はそれぞれ、 M:Nスレッドモデルとかの議論で、カーネル空間のコードの実行におけるスレッドと、 ユーザー空間のコードの実行におけるスレッド、という意味で使われる。 グリーンスレッドというのは、スレッドAPIを(可能な限り)ユーザースレッド内で実装した スレッドAPIの実装を指す。 以上のことが何も理解できないバカには、なにもかもがバズワードに見える。
217 :デフォルトの名無しさん :2014/02/26(水) 17:25:22.57 .net バカですがなにか?
218 :デフォルトの名無しさん :2014/02/26(水) 17:49:55.02 .net 命名の由来のことなのに、Wikipediaから意訳したようなのを偉そうにのたまう、他人を馬鹿呼ばわりする自称天才様w 天才過ぎてどれもこれも バズワード 扱いしていると思い込んでいるようだしなあ。御愁傷様でw
219 :デフォルトの名無しさん :2014/02/26(水) 18:13:53.06 .net > バズワード確定だな。エミュレータでゲーム動かしたらグリーンスレッドかよw > > そんなのスレッドと何の関係もないのにスレッド言うなや。 この威勢はどこ行ったのかなぁw
220 :デフォルトの名無しさん :2014/02/26(水) 18:31:45.02 .net >グリーンスレッドというのは、スレッドAPIを(可能な限り)ユーザースレッド内で実装した >スレッドAPIの実装を指す。 ハナからスレッドの定義に当てはまらないのにスレッド言われもなぁ。 WEB2.0と変わらんレベルの造語。 どうせまたジョブスオタクの低脳営業SEが言い出したんだろう。
221 :デフォルトの名無しさん :2014/02/26(水) 18:36:03.83 .net スレッドの定義ってなんだ?
222 :デフォルトの名無しさん :2014/02/26(水) 18:38:20.17 .net コイツの脳内ではシステムコールで実装されたものだけがスレッド、という定義なんだろう。 聞くだけ無駄だよ。
223 :デフォルトの名無しさん :2014/02/26(水) 18:43:07.52 .net >>221 OSが管理する最小の実行スタック。
224 :デフォルトの名無しさん :2014/02/26(水) 18:44:25.59 .net >>222 ではキミのスレッドの定義は?
225 :デフォルトの名無しさん :2014/02/26(水) 19:01:36.43 .net 222じゃないけど、スレッドっていうのはプログラムを実行する最小単位のことでいいんじゃないかな OSが管理しているかどうかは問わない スレッドっていう概念が実装されてるプログラミング言語が多いと思うんだけど、 この場合のスレッドはOS上の実装とは切り離されてるんだよね 例えばJavaのThreadクラスとか OSが管理するものだけをスレッドと定義するとしたら、上記のようなプログラミング言語で 抽象的に実装されてるスレッドはスレッドとは呼ぶべきじゃないということかな?
226 :デフォルトの名無しさん :2014/02/26(水) 19:17:09.57 .net 実行スタックってなんだ、って思ったらウィキペディア(英語版含む)でそんな表現を使ってるのか。 一応GNU AWKと、.NETかCOMに、execution stackという用語はあるようだが。
227 :デフォルトの名無しさん :2014/02/26(水) 20:45:20.03 .net >>225 そんなトンデモ言われてるも議論する気にもならん。 じゃあ、関数もスレッドなんですね。 もうアホかと。しかもJavaの〜とかふざけてるとしか。
228 :デフォルトの名無しさん :2014/02/26(水) 21:45:14.58 .net ワロタw
229 :デフォルトの名無しさん :2014/02/26(水) 21:46:50.48 .net 中途半端に脳内完結してるんだろな
230 :デフォルトの名無しさん :2014/02/26(水) 21:49:16.49 .net グリーンスレッド言ってた >>222 が定義を言わず逃げちゃった。 グリーンラナウェイ。
231 :デフォルトの名無しさん :2014/02/26(水) 22:31:24.56 .net ファイバー、タスク、ユーザーレベルスレッドと呼ばれ方はあるが スクリプト言語のスレッドやゲームのタスクシステムの実装などに使われているありふれたテクニックだろ OSの実装も同じだよ、ただカーネルレベルでやってるからCPUの特権命令が使えたりするってだけ もしやOSを書いたことも言語処理系を書いたこともないのか?
232 :デフォルトの名無しさん :2014/02/26(水) 22:43:21.83 .net 意味負
233 :デフォルトの名無しさん :2014/02/27(木) 06:36:49.81 .net >>227 JavaのThreadクラスの何処がふざけてるんだ?
234 :デフォルトの名無しさん :2014/02/27(木) 07:43:24.03 .net >>231 さっさとおまえの定義を言えよ、低脳。
235 :デフォルトの名無しさん :2014/02/27(木) 07:47:45.64 .net もはや人格攻撃しかできないモードに縮退したか。
236 :デフォルトの名無しさん :2014/02/27(木) 07:49:46.46 .net POSIXのスレッドAPIを実装したものがスレッド、という定義でいいだろ。
237 :デフォルトの名無しさん :2014/02/27(木) 07:54:15.34 .net トンデモグリーンスレッド連呼してたのにそのスレッドの定義聞いたら答えないで 逃げ回ってるんだからもはや人格の問題でしかない。 クズである。
238 :デフォルトの名無しさん :2014/02/27(木) 08:07:04.32 .net おまえが自分の定義と違うものに聞く耳を持たないクズってだけじゃないか。 自分がクズだろ。
239 :デフォルトの名無しさん :2014/02/27(木) 08:56:57.51 .net >>237 自己紹介乙、でどうでしょう
240 :デフォルトの名無しさん :2014/02/27(木) 09:11:19.33 .net >>238 その定義ってどれ?w いいかげにんしろよ、クズ。
241 :デフォルトの名無しさん :2014/02/27(木) 10:03:13.14 .net いい加減スレチ
242 :デフォルトの名無しさん :2014/02/27(木) 12:12:54.02 .net グリーンスレッドはどう考えてもスレッドじゃないからな。 スレチ。
243 :デフォルトの名無しさん :2014/02/27(木) 12:47:18.23 .net コンテキストの切り替えが出来るならスレッドの範疇でいいとちゃうの LWTやFiberも範囲でいいだろ
244 :デフォルトの名無しさん :2014/02/27(木) 15:48:00.75 .net Java屋は馬鹿だからな。なに言っても無駄。
245 :デフォルトの名無しさん :2014/02/27(木) 17:43:54.80 .net 馬鹿でわるかったなー
246 :デフォルトの名無しさん :2014/02/27(木) 18:44:32.81 .net キチガイに触るな 居座っちゃうだろ
247 :デフォルトの名無しさん :2014/02/28(金) 03:22:01.11 .net マルチスレッドとタイムシェアリングは違うの?
248 :デフォルトの名無しさん :2014/02/28(金) 04:10:21.51 .net >>247 まずプロセスとスレッドの違いを理解してから
249 :デフォルトの名無しさん :2014/02/28(金) 06:26:56.06 .net まずグリーンプロセスとグリーンスレッドの違いを説明してほしい。
250 :デフォルトの名無しさん :2014/02/28(金) 22:47:18.43 .net グリーンスライムよりは手強そうなイメージ
251 :デフォルトの名無しさん :2014/03/01(土) 06:43:57.25 .net グリーンプロセス()
252 :デフォルトの名無しさん :2014/03/01(土) 13:24:07.27 .net このスレはカーネルレベルでの実装オンリーのスレになりました、ってことでFAね。 あるいは「カーネル型」のw
253 :デフォルトの名無しさん :2014/03/01(土) 13:27:09.68 .net まだいるのかグリーンスレッド君
254 :デフォルトの名無しさん :2014/03/01(土) 14:11:27.38 .net まだいるのかカーネル至上主義者君
255 :デフォルトの名無しさん :2014/03/01(土) 14:14:20.18 .net v-sync割り込みでマルチタスクだお〜 DOS至上主義者が通りますよ〜
256 :デフォルトの名無しさん :2014/03/01(土) 19:50:36.19 .net [要出典]
257 :デフォルトの名無しさん :2014/03/01(土) 21:16:37.40 .net >>255 マウス用割り込みの方が良い。
258 :デフォルトの名無しさん :2014/03/02(日) 21:38:31.73 .net マウスの付いてるパソコンはカッコ悪い
259 :デフォルトの名無しさん :2014/03/02(日) 21:41:29.98 .net わーるかったな
260 :デフォルトの名無しさん :2014/03/06(木) 00:31:59.51 .net マルチスレッドって使えるところが限られてる
261 :デフォルトの名無しさん :2014/03/08(土) 13:27:50.88 .net これからマルチスレッドの勉強をしようと思うんだけど、 参考になるサイトとかコードとかを教えて欲しい。 特にワーカスレッドを複数立て、たくさんのデータブロックを順に渡して処理させるようなサンプルとか。 ネットを検索しても、スレッドが延々と動きつづけるか、処理が終われば使い捨てるものばかりで、 処理の終わったワーカスレッドに次のデータを渡して連続して処理させるものが見つからない。 また、可変長の演算結果を親スレッドに返す方法についても、どうすればいいのやら。 1個の結果データは固定長だけど出てくる個数が可変なので、固定長の電文を複数投げるようなイメージでも可。 動作環境はWin7-x64で、VC++を使いマルチコアCPUのコア数分ワーカスレッドを立てようと思う。 うちのは6コアなので、単純計算で6倍弱には高速化できると思う。 処理内容の原理試作としてシングルスレッドのDOSアプリとして組んで、鍵値に5を与えて動かしてみた結果、 データブロック数は320万個余り、データブロック1個あたりの演算結果はゼロ〜100KBと幅があるw そして総処理時間の見込みは60〜150時間(まだ終わってない)。 鍵値を6にするとブロック数も処理時間も莫大に跳ね上がるから、 たぶん1台のPC内で完結させようとしても終わらない。
262 : ◆0uxK91AxII :2014/03/08(土) 15:25:57.27 .net 使い捨てと使い回しで、クロックにして1k~2kくらいの差が有るかどうかだから、使い捨てでOK。
263 :デフォルトの名無しさん :2014/03/08(土) 15:49:40.12 .net HotspotVMは? と無茶振りしてみる
264 :デフォルトの名無しさん :2014/03/08(土) 15:57:35.44 .net VCならOpenCLかC++AMP使えば良いんじゃね CPUとGPUで切り替えも出来るし CPUだけならPPLでも
265 :デフォルトの名無しさん :2014/03/08(土) 16:20:54.15 .net VS2013か2012で、C++11のstd::threadとblockingできるqueueとstd::futureあたりを使えばいいんじゃないかな。
266 :デフォルトの名無しさん :2014/03/09(日) 12:57:11.91 .net >262-265 トン スレッドの使いまわしについて、ちょっと説明が言葉足らずだったかな。 やりたいのは最初にn個を起動するのまでは同じなんだけど、 データブロックを1個処理し終わったら次のデータブロックを処理させることで 全てのデータブロックを処理し終わるまでn個を実行している状態を維持したい。 (実際にスレッドをループさせるか破棄/生成を繰り返すかは重要ではない。) ググって見つけたサンプルは、n個のスレッドを最初に起動して、 n個全てが終わるのを待って次の処理(結果表示とか)に進むような使い方のばっかりで、 起動したうちの1個でも終わったら次の処理をやってまた1個終わるのを待つ、みたいなのが見つからない。 開発環境については、実は結構古いのしか持ってない…… ので、これからVS2013の評価版をDLして試してみようと思う。 現状のx86コード、シングルスレッドでどうやら鍵値5の処理を70時間以内で終われそうな予感。 処理結果のファイルを分割し過ぎて恐ろしい数のファイルを生成しちゃってるので、 マルチスレッド化の際にはもっと纏めてしまわないとなぁ。 鍵値6は複数台のPCへの分散処理とかGPU処理とかを真面目に考えないと無理そうだけど。
267 :デフォルトの名無しさん :2014/03/09(日) 17:54:14.90 .net そこまで仕様が決まってるならさっさと書けよって話だが。
268 :デフォルトの名無しさん :2014/03/09(日) 19:14:48.84 .net 自慢
269 :デフォルトの名無しさん :2014/03/09(日) 19:44:21.54 .net なんの?w
270 :デフォルトの名無しさん :2014/03/09(日) 21:24:29.64 .net 典型的なコード書けない君だったか。
271 :デフォルトの名無しさん :2014/03/09(日) 21:29:22.95 .net >>261 OpenMPのparallel forで分割するだけでおk
272 :265 :2014/03/10(月) 02:53:54.21 .net >>271 もしも、それで済む用件だったら、一番楽だね。 VS2012と2013なら、無料版でもOpenMP使えるし。 手元のコードでOpenMPでforループ2048周をi7-3760Xで6倍速度くらい。 CUDAで780Tiで2048*2048cudaスレッドでさらに18倍くらいだった。
273 :デフォルトの名無しさん :2014/03/10(月) 06:30:44.63 .net 266の処理は、OpenMPのparallel for schedule (dynamic)でできる
274 :デフォルトの名無しさん :2014/03/10(月) 12:00:01.04 .net ここはおまえの日記じゃねーぞ。
275 :デフォルトの名無しさん :2014/03/10(月) 17:32:15.14 .net スレッドの数って CPUのコア数より多くしても意味ないよね?
276 :デフォルトの名無しさん :2014/03/10(月) 17:42:02.40 .net >>275 スレッド内の処理でI/O待ちとかしてる場合は意味あるんじゃないの?
277 :デフォルトの名無しさん :2014/03/10(月) 18:28:34.27 .net ひたすら計算し続けるなら意味はない。 計算メインというだけならコア数の倍ぐらいまでは スループットが上がることはある。
278 :デフォルトの名無しさん :2014/03/10(月) 19:11:36.58 .net 書きたいアルゴリズムを自然に書けるという理由で マルチスレッドに意味があることはある GUIなんかそうだろうね
279 :デフォルトの名無しさん :2014/03/10(月) 19:22:36.70 .net そんなGUIの実装は見たこと無いです。
280 :デフォルトの名無しさん :2014/03/10(月) 19:40:06.12 .net GUI スレッドと別に好きなスレッドを立ててうまくやっていけるってことだろうに‥‥ win16 の泣きそうな世界を知らないのか?
281 :デフォルトの名無しさん :2014/03/10(月) 19:46:18.78 .net それはCUIでも同じだろう。
282 :デフォルトの名無しさん :2014/03/10(月) 21:47:19.99 .net 処理内容・数によるけど大量のパラ処理はCPUのマルチコアやNvidiaのGPGPUからAMDのGPGPUでopenCLが定番になってきたからな そして、今後はAMDのHSAも定番になるって感じになっているし。
283 :デフォルトの名無しさん :2014/03/11(火) 17:20:13.24 .net いつGPGPUが定番になってきたんだ。 むしろまじ使えないってスルーされてる感が半端ない。
284 :デフォルトの名無しさん :2014/03/11(火) 20:17:22.02 .net それは nvidia/cuda
285 :デフォルトの名無しさん :2014/03/13(木) 20:09:50.61 ID:pPziPNkQ.net インテルのやたらコア数が多い奴にビットコイン掘らせたらよさげよね
286 :デフォルトの名無しさん :2014/03/13(木) 20:31:14.10 ID:gEHR9Glb.net GPGPUは特定の局面に限って言えば使えるんだが、一般の用途では その特定の局面が存在しないというかわいそうな技術。
287 :デフォルトの名無しさん :2014/03/13(木) 20:32:14.41 ID:gEHR9Glb.net ちなみにbit coinのマイナーはGPGPUから専用設計のASICに 主戦場が移った。消費電力が段違いなんだとさ。 GPUでやったら電気代で赤字になりそうだ。
288 :デフォルトの名無しさん :2014/03/13(木) 20:49:30.32 ID:/ZWTiswr.net >>287 特定用途のみならICにしたほうが良いだろうな。 確かbitcoinでよく使われていたVGAはAMDだったはず。 ゲーム用VGAのGPGPU性能はいまはAMDのほうが良いのかな
289 :デフォルトの名無しさん :2014/03/13(木) 21:06:24.71 ID:k4ocBl+v.net FPGA経由でASICな。 しかも最近じゃあ、専用マシン(アクセラレータ?)を手に入れても、掘るより転売するほうが儲かるとかw
290 :デフォルトの名無しさん :2014/03/13(木) 22:02:39.26 ID:gEHR9Glb.net で、自販機の下に落ちてる100円玉を地道に拾うぐらいなら ショベルカーでATMごと盗んじゃえってのがマウントゴックス。
291 :デフォルトの名無しさん :2014/03/13(木) 22:18:30.00 ID:hR60BOrR.net >>290 ワラタ、でもまさにソレ MtGoxってMTGのカード売りだったと知った時の苦笑いときたら
292 :デフォルトの名無しさん :2014/03/14(金) 16:35:28.14 ID:8t3OXl/v.net 2年ほど前にbitcoin採掘をしていたが お前らの想像の千倍くらい時間のかかる処理だったし 今もっと難しくなってるから既に個人で掘るのは無理なんじゃね
293 :デフォルトの名無しさん :2014/03/14(金) 16:57:23.89 ID:90E4Zs91.net で、結局どのくらい掘れた?
294 :デフォルトの名無しさん :2014/03/14(金) 17:00:16.55 ID:UFFJd6rH.net 千倍台で分散する
295 :デフォルトの名無しさん :2014/03/14(金) 17:37:55.81 ID:p2oYKy+P.net >bitcoin採掘 どういうこと?
296 :デフォルトの名無しさん :2014/03/14(金) 17:57:18.99 ID:I0jjMatv.net >>295 むちゃくちゃ簡単に言うとBitCoinの正規のビットパターンは計算で求まる、でこれの正しい組み合わせを計算する事を採掘(マイニング)って言うだけの話
297 :デフォルトの名無しさん :2014/03/14(金) 17:59:12.49 ID:Sx19eOr2.net >>296 ありがとん
298 :デフォルトの名無しさん :2014/03/15(土) 00:32:35.88 ID:IYjSi/+A.net ちょいと相談。 データ処理とファイルI/Oを別スレッドに分けてstackを介してやり取りしてるんだけど、 気がつくとやたらメモリを食ってることがある。 調子のいいときは数MBしか食わないのに、最悪は2GB食って落ちることもある。 ファイルの生成の様子なんかを観察してる限りで、2つの原因を想像。 A)処理済みデータをstackに積むのに比べてファイルに書き出す処理が追いついていない B)stackがバカスカとメモリを確保している ファイル書き出しのスレッドの内部処理は、共用stackからローカルstackにコピーして、 コピーが終わった時点で共用stack占有状態を開放、ローカルstackを順次書き出すようにしている。 Aは大量にデータを溜めることの無いようにファイル書き出しの頻度を上げる方法について、 Bはメモリを無駄に食わない方法について、アドバイスを聞きたい。 stackを使ったのはqueueに比べて頭が固定な分だけメモリの利用効率が高そうだったことと、 データの順番には意味がないから逆順になっても問題がないことによるものなので、 別のコンテナを使ったほうがいいなら、それでも構わない。
299 :デフォルトの名無しさん :2014/03/15(土) 00:45:28.81 ID:CF1cuZUb.net >>298 そもそも一旦メモリに載せる必要があるのか?非同期IOじゃだめ? どうしても載せなきゃいけないとして、Aはあまり意味がない。 よほど頭の悪い実装をしてなければ、現状メモリを喰ってるってことは inputよりoutputの方が遅いってことだ。頻度で解決する問題じゃない。 Bの方は、conditon variableでスタックのサイズが一定より大きくなったら inputを待たす方法が一番簡単じゃないか。
300 : ◆0uxK91AxII :2014/03/15(土) 01:15:15.11 ID:4evGY2gy.net >調子のいいときは数MBしか食わないのに、最悪は2GB食って落ちることもある。 常識的に考えてバグ持ち。 >コピーが終わった時点で共用stack占有状態を開放、 ふつーstack<void *>。
301 :デフォルトの名無しさん :2014/03/15(土) 08:03:00.01 ID:B9xccETs.net バッファに制限を設けて 書き込みが詰ったら待てばいいだけでは
302 :デフォルトの名無しさん :2014/03/15(土) 08:17:50.21 ID:kVDIpCQy.net リングバッファ、そして新しいバグ
303 :デフォルトの名無しさん :2014/03/15(土) 08:31:05.02 ID:xmGMuN0W.net リングバッファてメモリが一杯になったらファイルに書き出すように実装するのが普通?
304 :デフォルトの名無しさん :2014/03/15(土) 12:26:30.58 ID:GnRScPte.net 普通じゃない
305 :デフォルトの名無しさん :2014/03/15(土) 13:36:30.86 ID:royCDzaU.net どうすんの?あふれたら捨てるの?
306 :デフォルトの名無しさん :2014/03/15(土) 13:43:41.30 ID:E7qCmrfx.net 環境によっては勝手にswapしてくれるかもしれない
307 :デフォルトの名無しさん :2014/03/15(土) 14:07:58.75 ID:PqTylRc6.net >>305 ふつうは>>301 の言うように空くまで書き込みを待たせるか捨てる。 待てないような要件ならサイズ固定のリングバッファじゃなく可変のキューを使うなりする。
308 :デフォルトの名無しさん :2014/03/15(土) 14:16:36.02 ID:1lWAVkUO.net 書き出すデータのフォーマットを工夫してサイズを小さくするとか、 書き込み先をSSDにしたりとか、動作環境のスペックを見直すという手も。
309 :デフォルトの名無しさん :2014/03/15(土) 14:17:30.95 ID:y0lYdZ+H.net >>307 ありがとう、バッファーの構造を別にして最大容量は設定しないといけないということですね >>306 後出しになるけど、リアルタイムシステムのデータ収集のようなもの考えていたので
310 :デフォルトの名無しさん :2014/03/15(土) 16:35:55.25 ID:x1nRJa7F.net いるんだよなー、そもそも不可能なことを引き受けちゃう奴って
311 :デフォルトの名無しさん :2014/03/15(土) 20:31:13.52 ID:9prhxYaH.net てへ、昔の話がねた
312 :デフォルトの名無しさん :2014/03/15(土) 22:04:58.47 ID:B9xccETs.net 金あるならFusion-ioを使えばいい 圧縮で減るようなデータならsnappyで圧縮する
313 :デフォルトの名無しさん :2014/03/15(土) 23:24:57.03 ID:Jbm5xDHA.net 普通のリアルタイムではありえん
314 :313 :2014/03/15(土) 23:26:35.57 ID:Jbm5xDHA.net 訂正 以上です
315 :デフォルトの名無しさん :2014/03/16(日) 01:00:35.01 ID:67pIoXcC.net リアルタイムシステムというのがRTOSを使っているという意味なら 送信側か他のタスクがwait入れてなくて書き込みタスクが動いていないとかってバグじゃないかな >>313 時代は変わりCPUを使って圧縮したほうがIOが減って低レイテンシにできる
316 :デフォルトの名無しさん :2014/03/16(日) 01:13:20.61 ID:CvhR8B+T.net リアルタイムっていうのは入力があってから何ms以内に応答を 返せなければならないみたいなシステムのことでしょ。 コンピュータ制御の工作機械で応答が遅くて削りすぎましたとか 許されないから。
317 :デフォルトの名無しさん :2014/03/16(日) 01:14:58.23 ID:Va0mC41/.net >261だけど、概ね期待通りの動作になってきた 速度面でも、現在使用中のPCでシングルスレッドだと70時間ほど掛かってたから、 マルチスレッド化で6コアに分散して細部の調整込みで10時間切れれば恩の字と思ってたのに、なんと4時間半を切れたw 最新のCPUを使えば2時間も夢じゃないかも あとは演算処理orデータのやり取りのバグを潰せばほぼ完成 (結果の個数が少し足りない)
318 :デフォルトの名無しさん :2014/03/17(月) 15:11:57.25 ID:ot8TfsyN.net どんだけ時間がかかってるのやら。
319 :デフォルトの名無しさん :2014/06/13(金) 00:28:43.87 ID:cRyKxN+T.net 共有/排他ができるロックと条件変数があるとき、これらを使って 共有から排他にエスカレーションできるロックを構成することってできる?
320 :デフォルトの名無しさん :2014/06/13(金) 01:34:28.10 ID:+YSiec3A.net ロックとか条件変数って排他するものだよね。共有できるロックって何? RCUのこと?
321 :デフォルトの名無しさん :2014/06/13(金) 08:49:59.19 ID:cRyKxN+T.net ええと、いわゆるread-writeロックのこと。
322 :デフォルトの名無しさん :2014/11/06(木) 22:37:47.07 ID:iaZsweTc.net マルチスレッドは馬鹿には無理 馬鹿は使ったほうがいいところでマルチスレッドを使わずに 使わないほうがいいところっ使ってややこしくしたりする
323 :デフォルトの名無しさん :2014/11/06(木) 23:24:42.11 ID:ETjlkHcn.net 負荷分散とか難易度高なのにね
324 :デフォルトの名無しさん :2014/11/09(日) 01:27:34.76 ID:UGYkYxzf.net スレッディング・ビルディング・ブロックについて勉強し始めた所なんだけど、どうなの? 理解して使うと安全で早くなりそうだとは思ったが、メモリ処理の効率とかどうなるんかな? とか思ってる所なんだけど・・・
325 :デフォルトの名無しさん :2014/11/09(日) 07:37:34.59 ID:SGm17f1c.net 安全にするには、ある程度やった人しか...
326 :デフォルトの名無しさん :2014/11/09(日) 22:48:01.80 ID:wyNvyEnQ.net メモリ処理の効率って具体的にどういう点? mallocとかのメモリ管理の効率?それともキャッシュヒット率のような意味?
327 :デフォルトの名無しさん :2014/11/10(月) 09:36:09.81 ID:W8sKwQAR.net オライリーのTBBの本買ったけど途中まで読んで放置してたw ラムダ式を使えばoperator()使わなくていいなら改めて勉強しなおそうかな >>324 コンカレントコンテナとかは並列にメモリ割り当てしたり、キャッシュラインの競合を考慮した アロケータを持ってるみたいだから、自前でやるのと変わらないぐらいにはなってるんじゃない? TBBの本も中古ならかなり安いから買ってみるといいよ
328 :デフォルトの名無しさん :2014/11/12(水) 14:11:39.04 ID:nS55KI9v.net 基礎的な質問で申し訳ないのですが 同じ変数に複数のスレッドがアクセスしてはいけないのはわかりますが 同じコードに複数のスレッドがアクセスするのはいいのでしょうか? 例えば何の変数にもアクセスしない関数を複数のスレッドが同時実行するのはいいのでしょうか?
329 :デフォルトの名無しさん :2014/11/12(水) 14:21:32.89 ID:Tjo57cUc.net ダメな理由でも探してるの?
330 :デフォルトの名無しさん :2014/11/12(水) 14:31:27.32 ID:nS55KI9v.net >>329 今書いているプログラムで C#の関数の中でシグナルを使っているのですが 他のスレッドからその関数を呼ぼうとするとエラーが起こるのです・・・ もしかしたら関数自体にシグナルをかけなければいけないのかなぁと思って
331 :デフォルトの名無しさん :2014/11/12(水) 14:35:31.55 ID:Tjo57cUc.net C#のシグナルってよーしらんけど エラーが出るってことは、質問の内容と違うことやってるんじゃないの
332 :デフォルトの名無しさん :2014/11/12(水) 15:18:29.39 ID:ghkKScBM.net 同期オブジェクトを保持している変数を上書きしていそうな気がするんだが
333 :デフォルトの名無しさん :2014/11/12(水) 16:32:42.96 ID:yNtQ/r84.net いろいろ分かってないだけだろう
334 :デフォルトの名無しさん :2014/11/13(木) 06:29:27.90 ID:w/Cn+ODk.net ライブラリがマルチスレッドに対応してないだけかと
335 :デフォルトの名無しさん :2014/11/13(木) 06:35:25.00 ID:4ACzZkWI.net /MT
336 :デフォルトの名無しさん :2014/11/13(木) 13:44:55.73 ID:t6y7WFqt.net C#ならエラーメッセージやスタックトレースが出てるだろ
337 :デフォルトの名無しさん :2014/11/15(土) 11:02:51.29 ID:JwZZHuNb.net >>328 同じ関数は実行するのは、スレッドが違えばコンテキストスイッチが起きて、レジスタとかスタックが入れ替わるから大丈夫 メンバ変数とstatic変数さえ使わなければ何個起動しても排他も何も考えなくてよいぞ
338 :デフォルトの名無しさん :2014/11/16(日) 00:17:15.94 ID:lWtIBSfv.net 同じ変数に複数のスレッドがアクセスするならクリティカルセクションが楽だ
339 :デフォルトの名無しさん :2014/11/16(日) 19:55:00.63 ID:9ZsvKJox.net linuxですがスレッドで同じファイルに書き込む場合、競合することってありますかね?
340 :デフォルトの名無しさん :2014/11/16(日) 20:11:07.08 ID:1qsvk//V.net 勿論。
341 :デフォルトの名無しさん :2014/11/16(日) 21:20:39.95 ID:4XTrCB2a.net 論外
342 :デフォルトの名無しさん :2014/11/16(日) 21:40:57.77 ID:Kyr5+wjo.net >>338 もう win32 のクリティカルセクションとイベントオブジェクトでおなかいっぱい、というかこれだけでたいがいうまくいくのでは?
343 :デフォルトの名無しさん :2014/11/30(日) 17:47:06.48 ID:H8djdLBQ.net 複数のスレッドがひとつのミューテックスのアンロックを待っていた場合、 つぎにどのスレッドがミューテックスを取得するかはランダムですか
344 :デフォルトの名無しさん :2014/11/30(日) 18:09:41.22 ID:ddtepLmv.net はい 待っていなかった別のスレッドがちょうどいいところに来てミューテックスを取得していくこともあります
345 :デフォルトの名無しさん :2014/12/01(月) 00:39:51.39 ID:Az7+Eliy.net いいえ 待っていなかった別のスレッドがちょうどいいところに来てミューテックスを取得していくこともあります
346 :デフォルトの名無しさん :2014/12/08(月) 19:13:20.61 ID:PHJZbN+V.net スレッドとミューテックスだけ覚えたけど なにを作ったらいいのかわからんたい
347 :デフォルトの名無しさん :2014/12/08(月) 22:37:39.16 ID:PHJZbN+V.net チャット作ることにしました
348 :デフォルトの名無しさん :2014/12/08(月) 22:57:10.96 ID:x3KHTevM.net consumerとproducerみたいのがいいんじゃないのかなと思ったけど、 チャット作ることにしたのね がんばってください
349 :デフォルトの名無しさん :2014/12/08(月) 23:08:56.71 ID:PHJZbN+V.net >>348 チャットで詰まったら気分変えてConsumer-Producerにも挑戦してみます あざす
350 :350 :2014/12/09(火) 00:23:00.21 ID:MJarMgeM.net >>348 いや、ありがとうございます
351 :デフォルトの名無しさん :2015/05/29(金) 22:45:34.32 ID:gXnjRwZ6.net Win8.1 Cygwin64bit g++のpthreadなんですが、マルチコアCPUなのに性能改善しません。 なにか特別なコンパイルオプションがあるとか 特別なライブラリをリンクしなければいけないとかあるのでしょうか。 -lpthreadはつけてます。
352 :デフォルトの名無しさん :2015/05/30(土) 20:09:50.25 ID:WwgHsNSJ.net エスパー能力はありません
353 :デフォルトの名無しさん :2015/05/30(土) 20:21:35.33 ID:h4Yx63EK.net そこをなんとかスーパーエスパーでお願いします
354 :デフォルトの名無しさん :2015/05/30(土) 21:18:52.04 ID:iD4l02SZ.net 誠意を見せてください
355 :デフォルトの名無しさん :2015/06/15(月) 23:17:16.10 ID:SZnUF3Ky.net DISKへのアクセスって並列にしたって意味ないですか? ・・・ FileA読み込み(::ReadFile) 10秒 FileB読み込み(::ReadFile) 20秒 ・・・ で30秒以上掛かりますが、 之をスレッドを起こしても意味無い?
356 :デフォルトの名無しさん :2015/06/16(火) 00:49:42.46 ID:s9cfeU7N.net よくわかってないけどDISKの特性によるのかなぁとかいってみる。
357 :デフォルトの名無しさん :2015/06/16(火) 01:06:01.70 ID:ILaOeTTR.net どういった特性ならどうなるのですか?
358 :デフォルトの名無しさん :2015/06/16(火) 01:31:46.58 ID:ZNZkvIJW.net 読み込みながら処理をしてみたいにな状態でない限りスレッド分けてファイル読むと遅くなるよ(デバイスが別であればまた違うのだが) 純粋にバイナリデータとしてファイルをメモリに丸ごと読み込むのであればスレッド分ける意味ない(CPUとメモリの方がディスクよりも遙かに速い)
359 :デフォルトの名無しさん :2015/06/16(火) 01:39:58.55 ID:ILaOeTTR.net 遅くなる理由はなんですか?
360 :デフォルトの名無しさん :2015/06/16(火) 09:26:39.31 ID:gU9w5dQ4.net 俺様の質問に答えろとさ
361 :デフォルトの名無しさん :2015/06/16(火) 22:30:15.77 ID:45Me4wJl.net まともに答えるとまた暴れだすだろ
362 :デフォルトの名無しさん :2015/06/20(土) 17:07:37.08 ID:2GjEDXn2.net >>359 FileAとFileBが同一のディスクに存在するとして、FileAがFileBが以下の 内容である場合、論理的に近いデータ(青森県と岩手県)は論理的に遠いデータ (宮城県と長崎県)よりも物理的にディスクの近い位置に存在する可能性が 高いので、02→03→…→07→40→41→…→46という順番で読み込むほうが 02→40→03→41→…07→46という順番で読み込むよりも速く完了する可能性が あります。 [FileA] 02青森県 03岩手県 04宮城県 05秋田県 06山形県 07福島県 [FileB] 40福岡県 41佐賀県 42長崎県 43熊本県 44大分県 45宮崎県 46鹿児島県
363 :デフォルトの名無しさん :2015/08/25(火) 15:16:47.83 ID:f9VpmzI5.net いまどきのディスクはインターリーブなんか考慮しても意味無いぞ
364 :デフォルトの名無しさん :2015/08/25(火) 23:23:52.89 ID:SuXh7n4E.net >>363 インターリーブってCPUが遅い時代の話だろ? セクタリードの後でCPUが処理している間に次に読むべきディスク上の物理セクタが通り過ぎてしまうからシーケンシャルなセクタ処理でなくインターリーブした順序付けのセクタ使うって奴
365 :デフォルトの名無しさん :2015/10/10(土) 23:10:25.42 ID:bMLX+QzX.net 趣味プログラムでInterlockedCompareExchange で値が交換できた時だけそのスレッドが処理を進められるような感じで 作りこんでいるんだけど、何かこれだと問題ある? 一般的にはクリティカルセクションを使った方がいい的な話を聞くんだけど sizeof(CRITICAL_SECTION)がチョット大きすぎるので使うのをためらってしまう
366 :デフォルトの名無しさん :2015/10/11(日) 01:12:22.19 ID:DeMvW0Ba.net >>365 レースする可能性があるくらいじゃね? まあ、ほとんど問題ないと思うけど。
367 :デフォルトの名無しさん :2015/10/11(日) 01:16:20.15 ID:DeMvW0Ba.net >>366 間違えた。 レースじゃなくてスタベーションだった。
368 :デフォルトの名無しさん :2015/10/11(日) 10:38:15.80 ID:P9PvwsgL.net マ
369 :デフォルトの名無しさん :2016/02/06(土) 07:43:27.68 ID:DtUiRvEm.net int iで++iにミューテックスが必要ってことはiを同時に2つのスレッドが足しても2増えるだけで必要ないと思うんですけど?1しか増えないってこともあるんですか?
370 :デフォルトの名無しさん :2016/02/06(土) 08:26:40.76 ID:DtUiRvEm.net CPUによってアトムが違うから必要ってことですねわかりました。
371 :デフォルトの名無しさん :2016/02/06(土) 08:57:53.38 ID:AVvIsuem.net 御茶ノ水の博士の設計
372 :デフォルトの名無しさん :2016/03/07(月) 00:30:59.08 ID:jKz+oF2h.net >>369 Aスレッド:iから1を読み込んで++して2を代入 Bスレッド:iから1を読み込んで++して2を代入 答えは1増える
373 :デフォルトの名無しさん :2016/03/08(火) 01:40:29.32 ID:YkHc2UTm.net レース状態のことやね
374 :デフォルトの名無しさん :2016/03/20(日) 12:54:59.05 ID:upopZnIF.net 同じcondition_variableでブロックしているスレッドが複数ある場合に、 notify_oneをしたら、どのスレッドが起床するのだろうか。
375 :デフォルトの名無しさん :2016/03/29(火) 08:51:54.17 ID:/c8bAcK4.net サッカーブッシュ日本代表日程ぷあたん(しゅっちょうまいくろ教育長交代)春文執行40代売上差額シュガーチョコ https://www.youtube.com/watch?v=NDq1QoJY0nY 宇ドナルドアナリストパワーストーンコーチングとしまえん サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足 サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題 春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残 コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題 マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了 校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント 高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート
376 :デフォルトの名無しさん :2016/05/20(金) 22:39:11.46 ID:/6R1fTEV.net >>374 リファレンス読め
377 :デフォルトの名無しさん :2016/05/23(月) 02:01:11.63 ID:xOdUGJqd.net CAS命令でロックしている部分を _xbegin _xend やら xxx_HLEAcquireで代用すればCAS命令分のWaitをチャラにできるかと思ったんだけど 結果微妙に遅くなっただけだった 使い方間違っているのかなTSX
378 :デフォルトの名無しさん :2016/12/09(金) 07:26:48.14 ID:WzSsU1Dc.net マルチスレッドにおける変数の排他処理についてなんだけど、 排他制御していない状態で複数のスレッドが同じ変数に同時にアクセスすることそのものは問題ないよね? 読み取り最中に書き換えたり、書き換え最中に読み取った場合にデータが破壊されるというだけの話だよね? 例えば2byteの変数があって、スレッドAが1byte目を読み込んだ時点でスレッドBが2byte目を書き換え、 そこでスレッドAが2byte目を読み取った場合に、 データが上位1byteと下位1byteで別のデータを読み取ったことになっておかしくなるってことだよね? ということは何らかのフラグで下位1bitのみを利用するような変数であれば、 上記のような状況は起きないから排他処理しなくても大丈夫って認識でOK?
379 :デフォルトの名無しさん :2016/12/09(金) 09:38:28.68 ID:uxrmDz9Z.net 馬鹿乙
380 :デフォルトの名無しさん :2016/12/09(金) 13:52:04.09 ID:GFY666CI.net >>378 >>マルチスレッドにおける変数の排他処理についてなんだけど、 >>排他制御していない状態で複数のスレッドが同じ変数に同時にアクセスすることそのものは問題ないよね? 変数というだけでは分からない。 構造体とかC++の変数とかはそちらから見ても明らかに問題のはず。 >>ということは何らかのフラグで下位1bitのみを利用するような変数であれば、 >>上記のような状況は起きないから排他処理しなくても大丈夫って認識でOK? 1bit(あるいは1バイト、1ワード)がアトミックにアクセスできる ことはシステムによって保証されていることが多い。 だから、その1bitの読み書きは出来る。 しかし大丈夫とか問題ないかということは、何を問題とするかを 書かないと答えようがない。 1bitはこれ以上分割できないので1ビットの半分だけ違う値になる、 ということはありえない。そういう心配をしてるなら大丈夫
381 :デフォルトの名無しさん :2016/12/09(金) 16:50:23.32 ID:WzSsU1Dc.net ありがとう! 大丈夫かどうかというのは、 排他制御が行われていない変数へのアクセスそのものが原因となってソフトウェアがクラッシュしたり、 OSやハードウェアレベルの問題は起きたりしないよね?って意味 C言語で下位1bitしか使わない排他処理が行われてない変数があり、その1bitをif文で判定して処理を2通りに分ける場合、 必ずその2通りのどちらかになることは保証されるよね? できるだけ高速化したいから、できるだけ排他処理はしたくない。
382 :デフォルトの名無しさん :2016/12/09(金) 18:10:37.82 ID:uxrmDz9Z.net やっぱりアホか
383 :デフォルトの名無しさん :2016/12/09(金) 18:37:52.31 ID:R3c5DqP6.net >>381 馬鹿が書くと機械的に壊れることもあります ソレノイドが焼損とか日常茶飯事
384 :デフォルトの名無しさん :2016/12/09(金) 21:27:34.75 ID:WzSsU1Dc.net >>383 どのパーツのソレノイド? 説明してくれ。 パソコンは自作やら修理やらよく頼まれ続けてきてるから専門的な話OKだ。
385 :デフォルトの名無しさん :2016/12/10(土) 23:59:30.12 ID:mx8/lQPw.net すいません質問します。 Matlobで、 例えば5000×5000の行列をAとして その10×10の区分行列をBとします。 Aの対角線上にあるBだけを取り出して他が0行列の行列を作るにはどうすればいいですか? また、各Bの対角要素だけ取り出すにはどうすればいいですか? sssp://o.8ch.net/k1za.png
386 :デフォルトの名無しさん :2016/12/11(日) 00:44:10.55 ID:pm6ghExK.net ・とりあえず全てのパラメータから0を1つずつ取り除く ・Aは500×500の行列 ・Bはたった1つの要素で、インデックスは i = j それが500個ある ・つまり、「i==jであれば取り出す」それ以外は0にする。 ・では、それを10倍したら?「 i ÷ 10 == j ÷ 10 」であれば、 取り出す(但し余りは全て切り捨てる)それ以外は全て 0 ・但し i jの上限はインデックスが0からとして、4999までとする。 ・俺はMatlabは使ったことが無いので具体的な実装は知らない。 ・その次 ・i と jの上限は 4999 ・対角の部分行列は簡単、「i == jならば」取り出す。 ・その右は、「i == j + 10 」も該当 ・同様に、「i == j + 20, 30 ... 10*n ... 10*499」も該当 ・同様に、「 i + 10 == 」も該当 ・「i + 20, 30 ... 10*n ... 10*499 == j 」も該当 ・「該当しなかったもの」はその都度0を代入する
387 :デフォルトの名無しさん :2016/12/11(日) 09:12:59.03 ID:nmNJ+GHK.net アホ
388 :デフォルトの名無しさん :2016/12/11(日) 10:53:35.53 ID:PFNTM+nw.net >>386 ありがとうございます。やってみます。
389 :デフォルトの名無しさん :2016/12/17(土) 10:53:31.14 ID:WxRoohcq.net >>380 ウソ乙
390 :デフォルトの名無しさん :2017/03/29(水) 21:36:43.88 ID:QetAZaUg.net 【OS】OSX 10.8.5、Core i5 【言語】 C, C++ 【実行環境】 XCode5.1, pthread pthread を使って for ループを分割して実行するプログラムを書いたのですが、直列処理の方が速いです。 tbbやOpenMP でもやってみたのですが、直列の方が速いです。 上記の環境ではマルチスレッドで効率化を図るには、何か設定が必要なのでしょうか。 ざっくりした質問ですがヒントになるようなことでも教えて下さい。
391 :デフォルトの名無しさん :2017/03/29(水) 22:31:24.61 ID:urajtArt.net マカーか
392 :デフォルトの名無しさん :2017/03/29(水) 23:09:26.86 ID:TE60yoif.net >>390 プログラムを見ないと分からない。 マカーじゃないから見ても分からないかもしれないけど。 大前提として、マルチスレッド化して速くなるようなジョブなんだよね? スレッドを作るのもjoinするのもスイッチするのも時間が掛かるので、 それらがペイしないと意味がない。 ちゃんと作っていて遅いのなら、キャッシュの競合の可能性があるかも
393 :デフォルトの名無しさん :2017/04/02(日) 18:18:24.01 ID:mBDn/7kD.net tbbのくっそ初心者です。 下記のコードを試したのですが、直列実行した方が速かったです。 これってそもそも並列化しても速くならない類の処理なのでしょうか? int main( int argc, const char * argv[] ) { tbb::task_scheduler_init init( 4 ); // 物理2スレ、論理4スレ core i5 PrimeCounter counter; tbb::parallel_reduce( tbb::blocked_range< int >( 0, count__, count__ / 4 ), counter, tbb::simple_partitioner() ); } 他所のヘッダにて、 bool isPrime( int n ) { // この処理がアホみたいなのはわざとです if ( n < 2 ) return false; if ( n == 2 ) return true; for ( int j = 3; j < n; ++j ) { if ( n % j == 0 ) { return false; } } return true; } class PrimeCounter { public: int count; PrimeCounter() : count( 0 ) {} PrimeCounter( const PrimeCounter& instance, tbb::split ) : count( 0 ) {} void operator() ( const tbb::blocked_range< int >& range ) { for ( int i = range.begin(), end = range.end(); i < end; ++I ) { if ( isPrime( i ) ) { ++count; } } } void join( const PrimeCounter& pc ) { count += pc.count; } };
394 :デフォルトの名無しさん :2017/04/02(日) 18:29:20.77 ID:mBDn/7kD.net 書き忘れ >>390 のマカーです。
395 :デフォルトの名無しさん :2017/04/02(日) 18:45:45.15 ID:mBDn/7kD.net 度々すみません、タイポありました。(多分本筋と関係ないですが) 関数 bool isPrime( int n ) のループ。 誤 for ( int j = 3; j < n; ++j ) 正 for ( int j = 2; j < n; ++j )
396 :デフォルトの名無しさん :2017/05/03(水) 16:23:24.52 ID:E3YCeKkn.net RelativisticProgrammingを日本語で解説してるとこ、ないかな?
397 :デフォルトの名無しさん :2017/05/04(木) 03:11:44.69 ID:N/fwOcUx.net ++j
398 :デフォルトの名無しさん :2017/09/17(日) 19:09:14.78 ID:iyMogwhx.net #include <stddef.h> offsetof(type, member-designator);
399 :デフォルトの名無しさん :2018/05/23(水) 21:43:17.32 ID:Au5e7VGg.net 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 4DXJZ
400 :デフォルトの名無しさん :2018/07/05(木) 00:17:03.60 ID:RfoszcD2.net Z1B
401 :デフォルトの名無しさん :2018/10/28(日) 23:21:28.63 ID:bVjvgsxo.net >>393 超亀レスだしテキトーだけど、counterがシングルトンなら countのインクリメントでシリアライズされるんじゃね?
402 :デフォルトの名無しさん :2019/01/13(日) 12:43:26.12 ID:P4nmFhbL.net Intelのハイパースレッドでスケールするか否かのアルゴやデータ構造のパターンとか、評価基準をまとめた本なりサイトなり御存じでしたら教えてください。
403 :デフォルトの名無しさん :2019/01/26(土) 17:42:01.46 ID:stTjLhtD.net 400MBのデータを一括でコピーする処理を並列化してもノイマンボトルネックに掛かってスケールしないと思うんですが、boolの配列(newしたもの)でやるとある程度スケールします。 何でですか?
404 :デフォルトの名無しさん :2019/01/26(土) 18:19:40.68 ID:yUYodqfD.net >>403 bool の配列が、例えば、8個の bool 値をまとめて 1バイトとして格納している場合で、 for ( i =0; i < 100000; i++ ) { dst[i] = src[i]; } のように書いて、かつ、コンパイラがこのループを「そこまでの」最適化はしなかった場合、 32BIT 環境の場合なら、32回のループで 1 DWORD 分の実メモリやキャッシュ・メモリへの 転送が生じるだけになるかも知れない。その他のメモリアクセスは、基本、code の fetch だけになり、全てCPU内部のキャッシュ・メモリに乗ってしまう。 だから、マルチスレッドでこのループを分割して行えば、32スレッドまでなら、 高速化が起きる気がする。 そういう問題でなくて?
405 :デフォルトの名無しさん :2019/01/26(土) 18:25:13.78 ID:VVr2JTND.net >>403 あ、あと >399MBのデータを一括でコピーする処理を並列化してもノイマンボトルネックに >掛かってスケールしないと思う これだけど、以外に高速化されたりするかもしれない。 実際の CPUはそんなに賢くないので。 色々複雑。
406 :デフォルトの名無しさん :2019/01/27(日) 00:13:20.29 ID:UeSsBKpf.net チップセットや DDR DRAM、バス・アービタなどの事はそんなに詳しくは無いけど、 「ブロック転送命令」みたいなのがあるかも知れない。そして、 CPU で、rep movsd などが実行されるとき、CPU は、自分で転送せずに チップセットと連携してバス・アービタにその命令を発行し、すぐに次の命令 から実行を再開したりするかも知れない。昔で言う「バスマスタ転送」や「DMA転送」 に似たようなやり方。 なんでそう思うかというと、主記憶(外部メモリ)はCPUのクロック速度にはついていけない はずなのに、以外に CPU のブロック転送が速い気がするから。 確認は取ってない。
407 :デフォルトの名無しさん :2019/01/27(日) 19:38:20.44 ID:0CxMXTRb.net 返信ありがとう。 DMA転送できるものをコンパイラが探知できるか疑問に思ってました。CPU機能としてのブロック転送は関係ありそうですね。 ワード単位処理は確かにやってそうです。 マルチコアでスケールできる処理って割りと限られてますね(汗。
408 :デフォルトの名無しさん :2019/01/27(日) 19:45:29.93 ID:upukWAKG.net バイナリ見れば済む話だよね^^
409 :デフォルトの名無しさん :2019/01/27(日) 19:45:46.51 ID:UADZfhGv.net >>407 [追加] DMAでなくとも、CPU自身が命令実行の処理とは独立して主記憶の間で 転送をする仕組みは当然あるので、ブロック転送の予約みたいな事で、 実際の転送処理が終わってなくても次の命令に進んだりするようなことは あるかも知れないと想像してみる。 無いかもしれないけど。
410 :デフォルトの名無しさん :2019/01/27(日) 19:48:31.17 ID:UeSsBKpf.net >>408 いや。例えば、バイナリだと、 rep movsd の1命令がそこにあるだけで、命令表を見ればブロック転送をする命令とあって、 擬似命令レベルでの処理までは書かれているが、バス転送レベルでそれをCPUが どう処理してるかまでは分からない。
411 :デフォルトの名無しさん :2019/01/28(月) 03:22:00.62 ID:3CrwaDYk.net double 1GBをコピー元のデータを加工してからコピーする場合は、どうやってもスケールしないんですかね、この話の感じからして。 書き込みタイミングが結果論でずらせるので、並列化で多少は見込みアルのかな。ーー自分で実験した方が良いですね。
412 :デフォルトの名無しさん :2019/01/28(月) 11:26:24.99 ID:jKaiFfBH.net >>411 1. 「加工」が単純に N 個に分割して処理できるものなら、N core の CPU の場合は、 大体 N 倍高速化できる可能性がある。 2. 加工の処理を大体同じ時間がかかる N 回のステージに分割できる場合、1つずつの ステージを別々のCore で処理すれば、上手くすれば、大体 N 倍高速化できる。 ステージ 1 の出力をステージ2の入力にして、ステージ2の出力をステージ3の 入力にして・・・、という具合にするが、N が十分大きければ、高速化できる。 CPU 内部のスーパー・パイプラインも同じ考え方で、1つの命令をなるべく たくさんのステージに分割することで、1つずつのステージの処理自体は軽く されている。処理が軽ければロジックの入力から出力結果が出るまでの時間が 短く出来るのでクロック数を上げることができる。これと同じことが、ソフトウェア の世界でも成り立つ。。 3. コピーの処理が完全に終わるのを待つ必要が無いなら、コピーを Sub Core で行えば、 Main Core は、待ち時間 0 で次の命令の実行に移れる。コピー後のデータを読み取る 必要が出てきた場所で初めて、同期オブジェクトの WaitForSingleObject()、 SetEvent() などで Main Core が Sub Core の処理が終わるまで待機すれば良い。
413 :デフォルトの名無しさん :2019/01/31(木) 02:15:04.55 ID:1/qzJ5j1.net キャッシュにデータを書き込むけどメモリに書き込まない、とか キャッシュのデータをメモリに書き込む動作をC++など言語で実装できないでしょうか。 勘でやる他ないのでしょうか。
414 :デフォルトの名無しさん :2019/01/31(木) 13:32:39.64 ID:OGxiQZdZ.net >>413 自分で inline アセンブラか、単体のアセンブラを使えば出来る。 ただし、VC++ の inline アセンブラを使う場合は、結局、どんなコード になるか分からない部分があるので、アセンブリ・ソース出力オプションか、 または、IDE の逆アセンブラでコードを確認する必要があると思うが。 ただ、個人的には、それ以上に、IA32のキャッシュ制御命令は、大量の 文書を読んで理解するのが大変に思うけれど。
415 :デフォルトの名無しさん :2019/04/02(火) 09:07:07.70 ID:KCTAV4Kj.net >>413 intelの大体i5以上の新しい石だと _xbegin _xend 等の1次キャッシュから下位のメモリへの ストアタイミングをコントロールできるTSX命令群がそれっぽいかと思う
416 :デフォルトの名無しさん :2019/04/02(火) 12:22:49.68 ID:ZD2r0ERn.net 確か、もっと古いCPUでも、 mfence や、movxxxxx 系の命令でも色々出来たと思う。 物凄い複雑なので、ちゃんと理解してないけど。
417 :デフォルトの名無しさん :2019/04/02(火) 12:29:24.16 ID:LpV8NoZ4.net 以下のようなものも関係している。複雑すぎて理解してない。 https://xem.github.io/minix86/manual/intel-x86-and-64-manual-vol3/o_fe12b1e2a880e0ce-429.html ・WBINVD, PREFETCHh, CLFLUSH, CLFLUSHOPT, ・非一時的な移動命令(MOVNTI, MOVNTQ, MOVNTDQ, MOVNTPS, MOVNTPD, INVD) ・第3レベルのキャッシュ無効化フラグ(IA32_MISC_ENABLE MSRのビット6)
418 :デフォルトの名無しさん :2019/07/19(金) 00:38:16.38 ID:eyVpHwMv.net 質問: ある資源を生成破棄するメーカースレッドがひとつと、その資源を使うユーザースレッドが複数ある。 メーカースレッドとユーザースレッドは排他的に資源にアクセスするが、ユーザースレッド同士は排他的でない。 どのように排他処理を実装すればよいか。
419 :デフォルトの名無しさん :2019/07/19(金) 02:31:14.72 ID:jdncuoqE.net >>418 Producer-Consumerパターンか 間にChannel挟めばちゃんと動くよ
420 :デフォルトの名無しさん :2019/07/19(金) 03:55:47.52 ID:J62Ms8NU.net 課題
421 :デフォルトの名無しさん :2019/07/19(金) 20:31:45.43 ID:XW48gDPw.net 2コア4スレッドってCPUだと 4スレッド同時に動くの?
422 :デフォルトの名無しさん :2019/07/19(金) 21:19:16.26 ID:oxWniFkv.net 動くよ ただしハードウェアリソース的に余裕がある部分(SSEとか)位しかあまり効果がないな マルチスレッドではやや分がある というのはコンテキストスイッチの負荷が純粋に1/2になる レジスタの内容をメモリに退避する回数が1/2になればそりゃ軽くなるよね 整数演算ではあまり期待しない方がいい
423 :デフォルトの名無しさん :2019/07/19(金) 22:46:03.30 ID:tF13LP95.net 同時に動いてないなら排他制御しなくていいみたいな勘違いしてそうな質問だ。
424 :デフォルトの名無しさん :2019/07/19(金) 23:08:15.01 ID:JGHPeX3b.net そこまで深くは考えてなかったんだけど。 CPUコアひとつなのにどうやって2スレッド同時に動くのか不思議だったから。
425 :デフォルトの名無しさん :2019/07/20(土) 10:22:32.66 ID:aCn5nh8Q.net 実際に鯖用CPUではHT切ってあるもんな かえってパフォーマンスが低下するとかで 最近の例の脆弱性との絡みもある その代わり最初からコアいっぱい積んでいる
426 :デフォルトの名無しさん :2019/07/20(土) 10:23:03.60 ID:aCn5nh8Q.net ×切ってある ◯BIOSで自分で切っている
427 :デフォルトの名無しさん :2019/07/20(土) 12:15:42.11 ID:D7d7RY7Z.net on/offをアプリ側で指定できないし、 性能が線形に上がらない時点でHTを考慮した設計は面倒すぎる。
428 :デフォルトの名無しさん :2019/07/20(土) 13:01:11.01 ID:aCn5nh8Q.net マルチスレッド・デザインパターンの本にあった例だけど ワーカースレッド(スレッドプール)を実装せよ なお言語は自由とする
429 :デフォルトの名無しさん :2019/07/20(土) 22:48:42.36 ID:xFVhhGJz.net マルチスレッドの解説本はいくつもあるけど マルチプロセッサのプログラミングって参考書ないのかね。
430 :デフォルトの名無しさん :2019/07/21(日) 00:29:38.70 ID:9qa3Jnjy.net マルチスレッドの解説本でカバー出来ないくらいのマルチプロセッサのプログラミングだと かなりマニアックというかプロセッサ固有の問題の割合が大きくなると思うので そういう方面で探すしかないのではないか それだけに特化した専門書は無いかもね
431 :デフォルトの名無しさん :2019/07/21(日) 00:46:58.94 ID:gryZIvyQ.net 行列演算を並列処理とかそういう粒度の細かな並列化の話ばっかりで。 せっかく10コアとかあるんだから、各コアに別々のプログラムを走らせておいて 同期しながら処理とかしたいんだけどどうするのがいいかよく分からない。 fork させてメッセージやりとりすれば良さそうなんだけど。 やりたいことがちょっと特殊かもね。
432 :デフォルトの名無しさん :2019/07/21(日) 01:03:16.42 ID:oN+9KGia.net 質問の低レベル化が甚だしい。アセンブラを勉強して基礎固めを。
433 :デフォルトの名無しさん :2019/07/21(日) 01:24:11.69 ID:YuxLcsPo.net OpenMPみたいなのを手動でやるって話かな マルチコアだとメモリ帯域がボトルネックになりやすいから 巨大な行列計算は少し粒度を荒くしたMPIの方が強いよね
434 :デフォルトの名無しさん :2019/07/21(日) 01:57:36.05 ID:dcJVZcgj.net 10コアとかいってるからマルチプロセッサというよりメニーコア活用術?
435 :デフォルトの名無しさん :2019/07/21(日) 08:19:29.20 ID:gryZIvyQ.net >>432 むしろアセンブラのほうが分かりやすいんだけど。 各コアにPCセットして起動すればいいの? プロセッサの仕様書読んでみるわ。
436 :デフォルトの名無しさん :2019/07/21(日) 08:23:47.17 ID:nevBE1rB.net 並列処理じゃなくて並行処理で探せば
437 :デフォルトの名無しさん :2019/12/05(木) 19:00:58.65 ID:sV2dE7Px.net マルチスレッドの排他処理で詰まってスレ検索して来てみたけどこのスレは高尚過ぎるなw 初心者スレにでも行こう
438 :デフォルトの名無しさん :2021/03/04(木) 23:27:05.69 ID:320wEDvY.net _beginthreadex() を使ったマルチスレッドプログラムについて質問です。 この関数の説明を見ると、「_beginthreadex() のコールに成功すると、スレッドのために タイムスライスが割り当てられたか否かによらず、スレッドはアクティブ(non-signal)になる」 とあったのですが、_beginthread() がスレッドハンドルを返すよりも前にスレッド関数内の 処理が実行される(完了する)ことはありえますか?
439 :デフォルトの名無しさん :2021/03/05(金) 15:45:04.28 ID:0Dz+Yobc.net >成功した場合、これらの各関数は、新しく作成されたスレッドへのハンドルを返します。ただし、新しく作成されたスレッドが短時間で終了した場合、 _beginthread は有効なハンドルを返さない可能性があります。 (「解説」の説明を参照してください)。 >_Beginthread よりも _beginthreadex を使用する方が安全です。 _Beginthread によって生成されるスレッドが短時間で終了した場合は、 _beginthread の呼び出し元に返されるハンドルが無効であるか、別のスレッドを指している可能性があります。 ただし、 _beginthreadex によって返されるハンドルは _beginthreadex の呼び出し元によって閉じられる必要があるため、 _beginthreadex がエラーを返さなかった場合は、有効なハンドルであることが保証されます。 ハンドルが有効であることは保証されているけど 実行順についての言及はないし、 そもそも別スレッドなら、どちらが先に行われるかについては何の保証もないと考えるべきじゃないのかな 「APIから戻る」のだって実行権がなければ後回しにされる可能性はあるんだから
440 :sage :2021/03/06(土) 05:17:04.33 ID:0GCeIGT3.net >>439 ご返信ありがとうございます。概ね理解できました。 勉強不足で、マルチスレッドの仕組みについて誤解していたようです。
441 :デフォルトの名無しさん :2021/03/06(土) 11:08:41.13 ID:pd/Aiz5V.net ちなみにCentOSはスレッドのコアが指定できるよ。
442 :デフォルトの名無しさん :2021/03/06(土) 11:30:24.47 ID:UzpsIFsk.net macOSだとコア指定できない。
443 :デフォルトの名無しさん :2021/03/06(土) 13:08:47.51 ID:VGFn/kw3.net あわしろ氏によると、Macは既にオワコンなので、WSLを使うと良いらしい。
444 :デフォルトの名無しさん :2021/03/25(木) 15:15:49.52 ID:LuSagST9.net 針に糸を通す( thread a needle 糸をつむぐ( spin thread [yarn] 糸が切れた( The thread broke. 琴の糸を締める( tighten a string of a koto 糸をかき鳴らす( strum the strings
445 :デフォルトの名無しさん :2021/04/03(土) 09:59:34.29 ID:CHs8071g.net このスレ来年で10年か スレ推奨図書とかないの?
446 :デフォルトの名無しさん :2022/04/14(木) 16:49:21.50 ID:wwxSZsaE.net マルチスレッド処理の花形といえばハードなリアルタイムスレッドとバックグラウンドスレッドの間のデータのやり取りだと思ってるんだが スレの過疎っぷりを見るに、殆どの人にとって必要のないものだったんだな
447 :デフォルトの名無しさん :2022/05/26(木) 01:42:01.15 ID:EhvYdlEg.net >>446 MS-DOS のデバイスドライバにでも痕跡が残っていたような‥ どうするつもりだったんだろう?
448 :デフォルトの名無しさん :2022/05/26(木) 16:41:59.49 ID:kr4vk/7I.net >>446 ハードな略が動いている間はバック略を動かさないから大して考えることは無い DOSの頃と同じだな
449 :デフォルトの名無しさん :2023/05/02(火) 09:17:00.95 ID:Q2sUG9pn5 世界最惡の殺人組織公明党強盗殺人の首魁齊藤鉄夫らテ口リストに乗っ取られた國土破壞省に天下り賄賂癒着しなか゛ら莫大な温室効果カ゛スに 騷音にコ口ナにとまき散らして氣侯変動させて日本と゛ころか世界中で土砂崩れに洪水.暴風、猛暑、干は゛つ.大雪.森林火災にと災害連発 させて大量殺戮して,エネ価格に物価にと暴騰させて、住民の生活を破壞して私腹を肥やしてるクソ公務員個人に徹底報復しよう!東京都港区 赤坂2丁目17‐1Οがクソ議員宿舎なのは有名た゛が「省庁別宿舎一覧表』なと゛て゛検索すれば全國の公務員宿舎の位置が容易に確認て゛きるので 拡声器や,騒音ハ゛イクて゛乗り付けてフ゛ァンブアンやりに出向いてやろう!もちろん力による━方的な現状変更によって都心まて゛数珠つなぎて゛ クソ航空機飛は゛して閑静な住宅地た゛ろうと航空騒音まみれにして生活に仕事にと公然と妨害してるこいつら利権害虫のことた゛から騷音なんて どうということはないと考えてるんた゛ろうし、航空騒音に比へ゛れば屁みたいな騷音しか出せないた゛ろうか゛、遠慮なく大騒音まき散らしに出向い てやろう!図書館やらて゛騒音まき散らして税金泥棒利権壞滅させるのも正義!政府という傘で好き放題やってる公務員には個人攻撃か゛有効な 創価学会員は,何百萬人も殺傷して損害を与えて私腹を肥やし続けて逮捕者まで出てる世界最惡の殺人腐敗組織公明党を 池田センセ─か゛ロをきけて容認するとか本気て゛思ってるとしたら侮辱にもほと゛か゛あるぞ! hтTрs://i,imgur,cοm/hnli1ga.jpeg
450 :デフォルトの名無しさん :2023/07/13(木) 19:06:47.26 ID:VPZGKcXRK おい天下り組織シ゛ャクソ、HЗ(笑)ミサヰルで地球汚したた゛けた゛ったんた゛から三菱重エと連帯して国民から強盜した2O○О億はよ返せや 大企業従業員だの安定した地位に安住している利権寄生虫や税金泥棒か゛成果なんか出せるわけがないことの分かりやすい証明だったわけだか゛ どこそ゛の成功國家みたく失敗と処刑を深く結ひ゛付けろとまて゛は言わんが税金返金させることくらいはしないと永遠にポンコツ国家のままだろ つか,もはやロケットなんさ゛民間のみて゛完結て゛きる時代なんた゛し.このハ゛力丸出しの税金泥棒ポンコツ無能利権団体とっとと解体しろやカス 国か゛やるべきことは公平性を大原則とした最低限の生活保障のみて゛充分なんた゛から,ヘ゛ーシックヰンカ厶以外の給付を全て廃止するのか゛正解 特に世界最惡の腐敗組織自民公明に乗っ取られた日本て゛税金泥棒1Ο0%の無能公務員に何らかの判断をさせるほど國か゛壊れてゆくのが現実 最低限の公共事業は直接民主制による合議をもとに完全成功報酬と完全競爭入札でのみ実施可能にするように憲法に書き込めやクソ腐敗政府 BIやれば食うに困らないんた゛から研究員枠た゛のアホな利権に拘ることなく自由に創造性発揮て゛きるし,これが自由主義国の國力形成の基本 創価学會員は.何百萬人も殺傷して損害を与えて私腹を肥やし続けて逮捕者まで出てる世界最悪の殺人腐敗組織公明党を 池田センセーか゛ロをきけて容認するとか本気て゛思ってるとしたら侮辱にもほと゛があるぞ! hтTps://i,imgur、cоm/hnli1ga.jpeg
451 :デフォルトの名無しさん :2023/10/18(水) 18:12:44.04 ID:k+tvnK8M.net >>431 とりあえず、メインスレッド1個にサブスレッドを9個用意し、基本的な管理はメインスレッド管理。 イベントハンドルは9×2個用意する。 サブスレッドはイベント処理とWaitForSingleObjectで待たせておいて、メインスレッドから情報を送って SetEventでイベントを動かす。メインスレッドはサブスレッド9個からSetEventでイベントが返らない限り イベントとWaitForSingleObjectを駆使して止めておく。
452 :デフォルトの名無しさん :2023/10/18(水) 18:13:06.20 ID:k+tvnK8M.net >>431 とりあえず、メインスレッド1個にサブスレッドを9個用意し、基本的な管理はメインスレッド管理。 イベントハンドルは9×2個用意する。 サブスレッドはイベント処理とWaitForSingleObjectで待たせておいて、メインスレッドから情報を送って SetEventでイベントを動かす。メインスレッドはサブスレッド9個からSetEventでイベントが返らない限り イベントとWaitForSingleObjectを駆使して止めておく。
453 :デフォルトの名無しさん :2023/10/18(水) 18:16:53.34 ID:k+tvnK8M.net >>451-452 あ”、二重投稿になったか。 えっと、ちょっと補完。 サブスレッドの処理についてはループして待たせておく。終わったら終了を知らせるイベントを発生させる。
454 :デフォルトの名無しさん :2023/10/19(木) 01:25:35.07 ID:8UDFhheE.net >>365 REID 1 みたいな例があるから必ずしも昔の技術というわけではないな。
455 :デフォルトの名無しさん :2023/10/19(木) 01:28:22.25 ID:8UDFhheE.net >>16 あれって、OSの機能だから気にしなくても良いというのでは駄目か?
116 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★
本文 スレッドタイトル 投稿者