■ このスレッドは過去ログ倉庫に格納されています
マルチスレッドプログラミング相談室 その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の機能だから気にしなくても良いというのでは駄目か?
総レス数 455
116 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★