◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

マルチスレッドプログラミング相談室 その9YouTube動画>1本 ->画像>1枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1339691517/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん
2012/06/15(金) 01:31:57.88
マルチスレッドプログラミングについて語るスレ

■前スレ
マルチスレッドプログラミング相談室 その8
http://toro.2ch.net/test/read.cgi/tech/1253521167/

■過去スレ
その1 http://pc3.2ch.net/tech/kako/997/997345868.html
その2 http://pc5.2ch.net/test/read.cgi/tech/1037636153/
その3 http://pc8.2ch.net/test/read.cgi/tech/1098268137/
その4 http://pc8.2ch.net/test/read.cgi/tech/1130984585/
その5 http://pc11.2ch.net/test/read.cgi/tech/1157814833/
その6 http://pc11.2ch.net/test/read.cgi/tech/1187008532/
その7 http://pc12.2ch.net/test/read.cgi/tech/1215253576/

OS・言語・環境は問わないが、それゆえ明記すべし。
テンプレ
【OS】
【言語】
【実行環境】
【その他特記する事項】
2デフォルトの名無しさん
2012/06/15(金) 01:35:25.58
■関連スレ・関連性の高いスレ

ネットワークプログラミング相談室 Port28
http://toro.2ch.net/test/read.cgi/tech/1334736934/
3デフォルトの名無しさん
2012/06/15(金) 03:59:42.18
>>1

前スレ >>994
並列実行「可能」でも「スケールする」かは知らんぞ。

OpenMP なら !$omp parallel do としてコンパイルオプション /Qopenmp
4デフォルトの名無しさん
2012/06/15(金) 16:15:07.07
>>前すれ995
そういうオプションがあるのですね,レポートと書き直したソースを添付します.

http://www5.puny.jp/uploader/download/1339744079.zip
pass:giko

potential OUTPUT 依存関係
らしいですが,ググってもよくわかりません.依存関係がないように>>前すれ999のようにpureに書き換えたのですが.

>>前すれ997
これは試しにつけてみただけのものです,やはり使い方が違いますか・・.
5デフォルトの名無しさん
2012/06/15(金) 18:14:50.61
gfortran -O3 20120528_fast_pararell_subroutine.f90 -ftree-vectorize -msse2 -ftree-vectorizer-verbose=2
6デフォルトの名無しさん
2012/06/15(金) 18:54:01.14
彼女二人と同時にデートする時はマルチスレッドじゃないといけないんだけど
どうすればいいかな
7デフォルトの名無しさん
2012/06/15(金) 19:08:46.12
時分割でがんばれ
8デフォルトの名無しさん
2012/06/15(金) 21:41:34.19
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
>>4
ループ間で出力変数に依存関係があるかも、という判断。

○ i, j は value 属性を付け、b は戻り値にする。
○ サブルーチン inv の宣言部に interface で sho_det の引数属性を書く。

ここまでで依存はクリア、反復回数が少ないかも、というようになる。
/Qpar-threshold0 オプション (100〜0) で並列化は完了。
10デフォルトの名無しさん
2012/06/16(土) 12:48:12.18
bに依存がないことくらい解析できてもよさそうなのにね
11デフォルトの名無しさん
2012/06/16(土) 16:27:05.54
sho_det呼び出しの2重ループで並列化できるの?
12デフォルトの名無しさん
2012/06/16(土) 16:52:50.21
双子と付き合う時はマルチスレッドのチンポ子が欲しい。
13デフォルトの名無しさん
2012/06/16(土) 16:54:32.86
クリティカルセクションとかミューテクスって重いんですか?
秒間2500回とかマジキチですか?
14デフォルトの名無しさん
2012/06/16(土) 17:00:15.54
400μ秒は今のパソコン環境でも、厳しいんじゃね
何をしたいかにもよるけど、専用環境作ったほうがハマらんかもね
15デフォルトの名無しさん
2012/06/16(土) 17:19:32.25
ロックフリー!
16デフォルトの名無しさん
2012/06/16(土) 17:33:56.57
>>13
そのあたりだと、API 呼び出しのオーバーヘッドもバカにならないから
自前で実装したほうがいいんじゃね?
17デフォルトの名無しさん
2012/06/16(土) 21:17:30.95
https://gist.github.com/2841832
によれば
> Mutex lock/unlock 25 ns
18デフォルトの名無しさん
2012/06/16(土) 22:25:28.46
>>13
重いけどそれくらいならいけると思う
できるならスレッドごとにリソースもって
最後に合体させたほうが速い
194
2012/06/16(土) 23:07:53.93
申し訳ありません,並列化ですが,解決しました.
/Qpar-threshold(並列化のしきい値)の値を100から20ぐらいまで下げたら5スレッドで実行されました.

ただ,ものすごく,計算が遅くなってしまって,なおかつ不必要なところまで並列化されてしまったようです.
このループだけ並列化したいっていうような指定ってできるのでしょうか?
20デフォルトの名無しさん
2012/06/16(土) 23:18:15.13
>>17
Mutexってスレッド数によると思うんだけどな。
シングルコアならオンキャッシュで対応できるけど、
マルチコアだったりマルチCPUだったらメモリ参照と大差ないと思う。
21デフォルトの名無しさん
2012/06/17(日) 02:24:44.41
答え教えてもらって、闇雲にやるのが今風なの?
22デフォルトの名無しさん
2012/06/17(日) 02:28:46.34
それって、単純ループがスレッド化されただけじゃねえの?
23デフォルトの名無しさん
2012/06/17(日) 03:56:01.16
実行環境に寄って自動で最適化して欲しいよね。
ちょっと違うけどjitみたいに自分でプロファイルとって実行処理罹る所を重点的に最適化とかさ。

4coreの環境と64coreの環境といちいち最適化するのめんどくさい。
24デフォルトの名無しさん
2012/06/17(日) 04:08:44.71
core数増えたから、早くなるってわけでもないでしょうに
25デフォルトの名無しさん
2012/06/17(日) 06:28:14.10
効率が悪かろうと並列化したいループには !DEC$ PARALLEL ALWAYS
※ 依存性に目をつぶれという指示ではない

> 64core の対応
3日かかる計算を1時間に押し込みたいなら、やる価値はある。
1分の処理が1秒になることを期待するなら、最適化する時間のほうが長い。

そもそも、大体の 64core での性能問題は 4core では小さくて見えないだけ。
スケールするとかしないとかはそういう話。
26デフォルトの名無しさん
2012/06/17(日) 14:48:00.38
速くなってくれないと高額な多コア買った意味無いんだが。
27デフォルトの名無しさん
2012/06/17(日) 19:02:58.50
それは、プログラム作ったベンダーに言え。
場合によっては、どれくらい高速化するかの見積もりくらい出してくれるだろ。
28デフォルトの名無しさん
2012/06/17(日) 20:27:37.75
分散処理できるように考えるほうが難しいのに
道具によってはできることとできないことがあるでしょ
29デフォルトの名無しさん
2012/07/06(金) 19:30:56.61
多コア化すれば、将来は、割込優先スレッド用コア、時分割スレッド用コア、OS用コアに別れて、それぞれのコアが空き時間でどうでもしてくれスレッドを処理するようになる気がする。
そうしないとスケジューリングに費やすコストが無駄だ。
30デフォルトの名無しさん
2012/07/06(金) 19:38:42.21
あまり賢そうに見えないな
31デフォルトの名無しさん
2012/07/06(金) 19:45:56.15
gpuが標準的になった時点で、非対称プログラミングが当たり前になるから、コア間に使い分け、役割分担が発生するのは必然じゃないかな。もっともどのコアがどの役割をやるかは、スケジューラが決めることになるけど。
32デフォルトの名無しさん
2012/07/06(金) 19:58:44.83
標準的な入出力は動くコア決めたほうがいいかもしれんけど
プロセス、スレッドはどのコアで動こうが関係無いような
どうせ、暇な?コアに割り当てられるだろうから
33デフォルトの名無しさん
2012/07/06(金) 20:28:22.95
linuxだとこういう指定が出来るようだ
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/sched_setaffinity.2.html
34デフォルトの名無しさん
2012/07/06(金) 22:01:45.18
それぐらいは WindowsNT 4.0 からあるが。

SetProcessAffinityMask
http://msdn.microsoft.com/ja-jp/library/cc429334.aspx
35デフォルトの名無しさん
2012/07/06(金) 22:04:26.89
コア数とかうるさい割にapiのことは言わんのね?
36デフォルトの名無しさん
2012/07/21(土) 14:53:22.69
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
馬鹿には無理
38デフォルトの名無しさん
2012/07/21(土) 15:18:21.14
>>36
broadcast を受ける側のスレッドは、 broadcast するときに wait していなければいけない
broadcast したときに wait しているスレッドがいなければ、無駄撃ちになる
通常 cond が mutex と一緒に使われるのは、ターゲットが wait に入る一瞬前に broadcast を撃って運悪く外れたりするような事態を回避し、確実に当たるようにするため
思ったとおりに動いてくれないというのなら、あなたの使い方には何か誤りがあって、そういった問題を防ぎ切れていないのだろう
39デフォルトの名無しさん
2012/07/21(土) 15:33:58.32
>>38
素朴に待っていると思っていたスレッドが、実は待っていないせいで
シグナルがすり抜けていたということですね

このての、「関数を素朴に並べただけでは思いどおりに動作しない」問題の対応方法には
それぞれに決まった「お作法」「イディオム」がありそうな気がしますが、どうなんでしょう?


ともかく、ありがとうございました
40デフォルトの名無しさん
2012/07/21(土) 15:42:20.05
>>39
pthreadの粒度が小さい場合、threadの実行順序がぐだぐだになるから要注意。
結論としては、充分長い処理でもない限りcond_waitは使えない。
41デフォルトの名無しさん
2012/07/21(土) 15:49:59.71
>>40
頭で考えたアルゴリズムを実験するときに「安全装置」を省略したせいで
かんたんなこーどなのにはまるなんてありそうですね・・・・

自分が使いたい本番コードは、各スレッドの処理に十分なマスがあるので
素朴なつくりでもそれなりに動いたかもしれませんが、
再現性のないトラブルが発生する前にそういう問題を認識できてよかったです

ありがとうございました
42デフォルトの名無しさん
2012/07/21(土) 16:06:39.87
>>41
去年の暮れ辺りに悩んでいたのが、mutexでスレッドプールを管理していたツールなんだよね。
mutexは相手がロックしていれば待つけど、相手がスケジュールはずされてロックしてくれていないと
自分が待たずにロックしちゃうことに。
メインスレッドでmutex_unlock(); mutex_lock()のように書いているのにunlockしたあと
lockするところまで実行できないなんてちょっと想像しにくいぞ。
# 詳細不明だけど、unlockした時点でプールスレッドがスケジュールされてメインスレッドがスケジュールからはずされるっぽい。
43デフォルトの名無しさん
2012/08/25(土) 18:20:47.36
いつでもどんな時にでも
スケジュールから外されても動かされても
大丈夫なように作るのが鉄則
44デフォルトの名無しさん
2012/08/26(日) 08:54:03.71
そうそう。
だから、Web上のサンプルは当てにならない。
45デフォルトの名無しさん
2012/08/26(日) 09:32:08.49
そもそも並列化したいのは高速に処理したいからじゃん?
サンプルにかならずあるsleep()を消すと、途端にまともに動かなくなる
まともに動かなくなるならまだいいけど、「ときどき動作がおかしい」これ最悪
46デフォルトの名無しさん
2012/08/26(日) 09:34:18.81
て言うかサンプルってそういうもんだし。

そもそも >>42

> mutexは相手がロックしていれば待つけど、相手がスケジュールはずされてロックしてくれていないと
> 自分が待たずにロックしちゃうことに。

って書いてるけど、それ以外にどんな動作を期待してるのか、よくよわからん。
47デフォルトの名無しさん
2012/08/26(日) 09:57:42.57
マトが止まっていないとシグナルがすり抜けちゃうなんて最初はわかんないでしょ

そんなことより、マトがトマるだって・・・・・!喜w
48デフォルトの名無しさん
2012/09/01(土) 15:54:33.37
ダレモイナイ・・・・・・ダジャレオソルベシ・・・・・


素朴なQなんですが、マルチCPUのマシンで、

@ひとつのプロセスに属するスレッドは、全部同じCPU(プロセスがいる)で動く

Aひとつひとつのスレッドが独立してCPUを渡り歩いているように見えるのは、
 スレッド単体ではなく、それの属するプロセスが渡り歩いているため



こういう理解は正しいですか?
49デフォルトの名無しさん
2012/09/01(土) 15:58:04.54
スレッドの割り当てとかはOSが決めてることだからね
OSの挙動に影響しないようなことを考えながらやりませう

マルチCPUじゃなく
単一CPUの時のスレッド等の挙動を考えてみませう
50デフォルトの名無しさん
2012/09/01(土) 16:04:51.98
同じプロセッサ内のコアを移動するならまだしも、別のプロセッサに移動してしまったら、
せっかく溜め込んだキャッシュがおじゃんになってしまうのではないでしょうか?
51デフォルトの名無しさん
2012/09/01(土) 16:11:29.80
逝ってるなマルチコアはCPU毎に命令データキャッシュ持ってるでしょ
52デフォルトの名無しさん
2012/09/01(土) 16:12:43.77
でも分岐したらダメなのでは?
53デフォルトの名無しさん
2012/09/01(土) 16:16:42.15
よく考えたら、分岐するんだったらCPU移らなくてもダメだった
ドピュッ
54デフォルトの名無しさん
2012/09/01(土) 16:27:35.25
命令の先読みとかやってるの知ってる?

同じ領域を読み込む場合に早くなるってのがキャッシなのでは?

HDDキャッシュとかも同じでしょ
55デフォルトの名無しさん
2012/09/01(土) 16:29:03.73
別のプロセッサに移動してしまったらキャッシュとかおじゃんになってしまうかもしれないが、
ひとつのプロセッサに多数のスレッドが集中して別のプロセッサを遊ばせておくくらいならいくつかのスレッドを移した方がいい場合もある
OSの裁量次第
56デフォルトの名無しさん
2012/09/01(土) 16:32:16.93
キャッシュ知らんでも
スレッド系のプログラム作るのには関係無いような

速度ウンタラは動いてから考えればいい話でしょ
57デフォルトの名無しさん
2012/09/05(水) 01:11:52.99
初心者の質問です

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
>>57
先ず基本的にblReference, blDeletingとも、きちんと扱えるようにしないとダメ。
要は、OSの用意しているクリティカルセクションなどの機構を使う必要がある。
つーか、マルチスレッドプログラミングの基本なんだが、大丈夫なんか?
それと、cpにNULLが代入されること自体は問題ないの?
59デフォルトの名無しさん
2012/09/05(水) 06:16:48.24
weak_ptr使えハゲと言うしかないレベル
60デフォルトの名無しさん
2012/09/05(水) 08:13:29.83
weak_ptrってboost?
マルチスレッドを考慮されていたの?
61デフォルトの名無しさん
2012/09/09(日) 01:13:55.50
>>58
volatileしておけば、
まあいいんじゃない

sleep で待つのは効率はよくなさそうだけど
62デフォルトの名無しさん
2012/09/09(日) 01:44:44.97
volatile使ったとしてもコンパイラによっては安全だとは言えないんだよ
63デフォルトの名無しさん
2012/09/09(日) 01:51:51.18
安全って、思いたい理由の方に興味があるんだけど
64デフォルトの名無しさん
2012/09/09(日) 07:41:49.96
むしろ安全だといえるコンパイラを知りたい
65デフォルトの名無しさん
2012/09/09(日) 14:24:32.10
volatile使っても結果変わらない事の方が多い気がする
66デフォルトの名無しさん
2012/09/09(日) 15:54:34.19
そりゃそうだ
67デフォルトの名無しさん
2012/09/09(日) 16:30:00.96
安全だと思うと、コンピュータがそれを理解して動いてくれると思いたいのかな
68デフォルトの名無しさん
2012/09/12(水) 00:03:54.96
volatileしてダメだったケースに遭遇したことないなあ。

まあboolでの同期・排他は簡単なケースにしか使ってなくて、
まじめなのはcritical sectionとかmutexで排他・同期するから
気がついてないだけかもしれないけど。
69デフォルトの名無しさん
2012/09/12(水) 07:22:51.47
>>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
>>69
InterlockedExchangePointerは?
71デフォルトの名無しさん
2012/09/29(土) 20:38:32.52
質問ですが、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
も一個、volatile bool a, b; があるとして、
 a = c;
 b = d;
の代入順序は、a, bがたとえatomicな型でvolatileだからといって
プロセッサのアウトオブオーダー実行のレベルでは実施される順序が保たれる保証はない、
よって、上記代入を行ったコア以外のコアからaやbを代入順序依存で参照する場合は
メモリバリアが 必 須 、
という理解で合っていますか
73デフォルトの名無しさん
2012/09/29(土) 21:08:56.80
>>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
>>64
javacやcscじゃね
75デフォルトの名無しさん
2012/09/30(日) 00:12:53.41
メモリバリアってのはgcc特有の表現で
atomicな処理とは関係ないんだけど
76デフォルトの名無しさん
2012/09/30(日) 00:30:58.05
>>73
dクス
SetEvent()は2番目(・Functions that signal synchronization objects)、
WaitForSingleObject()は3番目(・Wait functions)ってことでおkそうですね

>>75
メモリバリアはアウトオブオーダー実行するアーキテクチャに共通する概念であってGCC固有というわけではないですにょ
とかいろいろあるが説明がマンドクセ、
77デフォルトの名無しさん
2012/09/30(日) 00:56:39.75
ただの最適化抑止のおまじないみたいなもんだよ
78デフォルトの名無しさん
2012/09/30(日) 01:05:56.81
>>77
ちょっそれvolatileの方wwwww

まあ>73の通り、Windows API内部でよろしくやってくれるので普通はメモリバリアの方は意識しなくて良いっぽい
おそらくUNIXのシステムコールも同様でよろしくやってくれるから知る人ぞ知る知識になってしまうのだろう…
79デフォルトの名無しさん
2012/09/30(日) 01:13:58.15
マルチコア時代の並列プログラミング
〜ロックとメモリオーダリング〜
http://www.nminoru.jp/~nminoru/data/b2con2006_nminoru.pdf
80デフォルトの名無しさん
2012/09/30(日) 01:14:33.03
gccのvolatileってのは、ちょっと特殊なんだよ
81デフォルトの名無しさん
2012/09/30(日) 01:21:19.22
>>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
ここらへんの話は
 ・(インラインでない)関数呼び出しの副作用を恐れてコンパイラが最適化を自粛
 ・volatileによって明示的に最適化が抑制
 ・システムコール内でメモリバリアの面倒をみてくれる
 ・ハードウェアがコア間でキャッシュのコヒーレンスをとってくれる
といった事情が絡み合った結果、運よく問題を生じないケースも多々あるので
コードをバリバリ書いているような人でもきちんと理解していないことがある(あった)
83デフォルトの名無しさん
2012/09/30(日) 01:27:48.80
アトミック変数とか作って、ド素人に誤解釈されたらどうすんだろ、この人
84デフォルトの名無しさん
2012/09/30(日) 02:22:23.12
>>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
>>83
ドシロウトがなんでスレッド使った開発に加わるんだよ
86デフォルトの名無しさん
2012/09/30(日) 13:35:58.01
なんで排他の話ばっか出てくるんだ。
スレッド間で書き換えしまくるような変数なんて殆ど無いだろ。

それはともかく、C++向けのクロスプラとフォームなスレッドキューって無いものか。
87デフォルトの名無しさん
2012/09/30(日) 14:26:20.27
>>86
>なんで排他の話ばっか出てくるんだ。

マルチスレッドで問題になるところと言うか、排他を最近覚えた奴が
使いたくてしょうがないんだろ。
88デフォルトの名無しさん
2012/09/30(日) 15:13:14.28
>>86
スレッドの実装が違うだろう、LinuxとUNIXなら同じだが
89デフォルトの名無しさん
2012/09/30(日) 15:25:27.37
>>85
じゃあ、うわっつらの言葉だけ知ってる甘ちゃん系ではどう?
90デフォルトの名無しさん
2012/09/30(日) 16:54:17.48
>>88
boostとか抽象化レイヤー用意すればできるだろ。

しかし、仕様の安定したスレッドキューがない。
もう、自作スレッドキューを保守するのは嫌だお
91デフォルトの名無しさん
2012/09/30(日) 17:01:09.98
>>90
皮かぶせりゃいいだろうけど、

そこまでして、

そこまでしても
92デフォルトの名無しさん
2012/09/30(日) 21:04:28.14
おまえら何回C++におけるatomicとvolatileの話を繰り返せば気がすむの
93デフォルトの名無しさん
2012/09/30(日) 21:20:03.98
それしかネタがないからさ
94デフォルトの名無しさん
2012/09/30(日) 22:09:45.89
>>92
スレッドキューの話しだせ
95デフォルトの名無しさん
2012/09/30(日) 23:24:16.01
だって手法なんて先駆者が出し尽くしただろ
96デフォルトの名無しさん
2012/09/30(日) 23:53:26.29
スレッドキューって何だ?
スレッドセーフなキューってことか?
それともGCDみたいなタスクキューのことか?
97デフォルトの名無しさん
2012/10/01(月) 00:06:38.53
タスクキューのことだよ。
てかスレッドセーフなキューってなんだよ。それだったら
別にキューに限定せずスレッドセーフなコンテナの話でいいだろ。
98デフォルトの名無しさん
2012/10/01(月) 07:53:47.16
java.util.concurrent.BlockingQueueのことだろ
99デフォルトの名無しさん
2012/10/12(金) 23:18:24.02
同期処理を間違いなく設計するための、何か良い手法やツールはないですかね?

ペーペーのビギナーだというのもあるのですが、
複数のmutexを混在させなければいけない時にぼんやり書いたコードでデッドロックを発生させたり、
waitに到達していないのにシグナル発射する可能性のあるコードを書いてしまって、
そのデバッグで無駄に体力を消耗しています
100デフォルトの名無しさん
2012/10/13(土) 11:18:48.75
馬鹿には無理
101デフォルトの名無しさん
2012/10/13(土) 13:05:32.66
>>99
排他処理、スレッドモデルと実装を勉強すれば

ビギナーには無理と思うが
102デフォルトの名無しさん
2012/10/13(土) 18:57:49.84
>>99
もうそこは、共有している資源と mutex の一覧表作って、地道に設計してレビューで
確認するしかない。

imagix とか確認を支援するツールはあるけど。
103デフォルトの名無しさん
2012/10/13(土) 22:12:39.46
>>101
やんないと、他に仕事ないんで・・・・

>>102
かなり頭がよくないと、サラリと正しいコード書けないですよね(棋士的な意味の頭のよさ)
そうか、地道にやるしかないのか(´・ω・`)

・・・売り物なんですねimagix
自分の担当業務以外にも使えそうなので、ちょっとチーム内に紹介してみます




とりあえず、今の自分のレベルでミスりやすいところを正しく実装するための比喩をいくつか考案中です

例1
スレッド間同期は、キャッチボール
ボールを受け取る側は、しゃがんでいないとボールをキャッチできない

例2
スレッド再開時の手順は、競馬のスタートと同じ
@ゲートを閉じる(送信側mutexロック)
A馬がゲート前に並ぶ(受信側wait)
Bファンファーレが鳴る(signal)
Cゲートが開く(送信側mutex開放)
104デフォルトの名無しさん
2012/10/13(土) 23:51:02.32
mutexなんか使わずfuture、promisで凌げ
105デフォルトの名無しさん
2012/10/14(日) 17:05:55.79
>>103
転職したほうがよくね
ハロワ通いでもしてみたら
106デフォルトの名無しさん
2012/10/14(日) 18:33:06.95
まず10年間C++を勉強しろ
107デフォルトの名無しさん
2012/10/14(日) 20:43:53.62
>>106
C++関係ないやん
108デフォルトの名無しさん
2012/10/15(月) 01:03:58.39
>>103
比喩を作ることができるならすでに理解できてるんじゃないの?ってことで、
結局比喩は不要だよねって流れにならないのかな。
109デフォルトの名無しさん
2012/10/15(月) 09:17:51.40
結局無理てことか、初心者というより基本が
110デフォルトの名無しさん
2012/10/21(日) 14:23:48.88
>>103
とにかくソースコードをきれいに書け
そうすれば、ソースコードが間違いを教えてくれる
111デフォルトの名無しさん
2012/10/21(日) 14:42:59.60
>>110
> そうすれば、ソースコードが間違いを教えてくれる

おっ、なんか響きがいい言葉だな。
112デフォルトの名無しさん
2012/10/21(日) 23:06:50.68
Joel on softwareの和訳ページ『間違ったコードは間違って見えるようにする』
を紹介しようと思ったが今ちょっと繋がらないようなので原文で読んでちょ↓↓↓
http://www.joelonsoftware.com/articles/Wrong.html
113デフォルトの名無しさん
2012/10/26(金) 20:45:55.33
教えてください

g++でコンパイルしたプログラムのプロファイリング、特にスレッドの動作の
効率を見たいのですが、Linux環境で使える定番のフリーツールはないでしょうか?
114デフォルトの名無しさん
2012/10/28(日) 11:59:56.78
gdb
115デフォルトの名無しさん
2012/10/28(日) 21:28:29.42

ジ  ハ ,,ハ
デ (;゚◇゚)z
!?
116デフォルトの名無しさん
2012/12/05(水) 09:54:15.94
プロファイラでわかるのはどの部分が処理時間の何%を使ってるか
ぐらいであって、スレッドの動作効率なんていう個人の価値観みたい
なものは測定できんだろ。
117デフォルトの名無しさん
2012/12/31(月) 15:20:38.31
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
あります
119デフォルトの名無しさん
2012/12/31(月) 19:09:35.15
>>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
判ってるのに質問するなボケが
121デフォルトの名無しさん
2013/01/01(火) 12:37:44.23
それを否定されたから理由を聞いてるんじゃないのか
122デフォルトの名無しさん
2013/01/04(金) 04:09:28.62
C#が自ら自身の仕様を質問すること自体が。
まぁ、人間だって自身についてどれだけ知っているか怪しいもんだが。
123デフォルトの名無しさん
2013/01/05(土) 12:19:18.18
>>96
の発言で思い出した。
GCDといえば、最近WindowsとLinuxにも移植されたっぽいんだよね。
http://opensource.mlba-team.de/xdispatch/docs/current/index.html

pThreadとかWin32スレッドをローレベルで使うよりお手軽な気がする。
ちょっと試してみるわ。
124デフォルトの名無しさん
2013/01/05(土) 18:17:06.97
123だけど、
XDispatchだが、Windowsであっけなく使えた。
こりゃいいぜ。Win、Mac、Linuxで同一ソースでGrand Central Dispatchが使える。
マルチスレッドプログラミング新時代到来って感じだw
125デフォルトの名無しさん
2013/01/08(火) 19:15:30.57
XDispatchの導入記事を書いてみた。
https://docs.google.com/document/pub?id=1miIRZh8QteYzjIiU7GjcGSshTp470qHbRQUh0wf12Sw

突っ込みどころあったらご指摘よろ。
126デフォルトの名無しさん
2013/01/08(火) 20:13:02.13
libdispatch + α、って感じなのか
127デフォルトの名無しさん
2013/01/09(水) 01:22:43.52
>>126
そうみたい。
基本的にはマルチプラットフォームでやりたい場合は${ ~ }の記法とautoを使えばオッケー。
他にも標準のlibdispathには無い機能とか、Qtユーザー向けのQtDispatchとかあるみたいだけど、そこまではまだ調べられてない。
時間があったらもっと調べてみて、追記してみるよ。
128デフォルトの名無しさん
2013/01/30(水) 19:59:09.23
Win32でのプロセス間リソース共有の仕方で悩んでます

1. ポーリング=Mutexで保護された共有リソースの変更を常に監視
2. サーバー(orクライアント)スレッドでEvent監視+Mutexで共有リソースを保護

余計なCPUリソースを食うのはどちらなんでしょうか?定性的な評価と理由を教えてください
(定性的な評価=プロファイルで調べろは無しでお願いします)
自分は「重さ:Mutex>>>>Event>>>>>>>CriticalSection」というイメージがあるので、
2のマルチスレッドのコンテキストスイッチの重さを考慮しても1の方が重いのではないかと考えています
129デフォルトの名無しさん
2013/01/30(水) 20:42:56.62
(゚Д゚)ハァ?
Mutexを奪い合えばいいだけだし。
130デフォルトの名無しさん
2013/01/30(水) 21:22:17.63
Event vs. Pollingは宗教戦争
131デフォルトの名無しさん
2013/01/30(水) 21:52:45.99
何もすることがなきゃ寝て待ってればいいだけ
何かしたけりゃイベント来るまでしてればよかろう
132デフォルトの名無しさん
2013/01/31(木) 08:42:39.84
Mutexが重いんじゃなくてポーリングが重いんだろ
イベントやメッセージ等の非同期通知が使えるなら、そっちのほうが軽いのは当然
133デフォルトの名無しさん
2013/01/31(木) 22:24:51.03
>>128
> Win32でのプロセス間リソース共有の仕方で悩んでます
winすれで聞いたら
> 余計なCPUリソースを食うのはどちらなんでしょうか?定性的な評価と理由を教えてください
人から聞いたことを信じるの?
134デフォルトの名無しさん
2013/02/01(金) 07:29:56.93
効率を気にする香具師が2chで質問するとかもうね
135デフォルトの名無しさん
2013/02/17(日) 17:37:32.78
>>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
>>135 それ RAW じゃね

シングルスレッドのメモリ命令は RAW (対象アドレスが被らない) と
WAW (命令による) の特定ケースを除いて命令順通り、
マルチスレッドの各スレッド間では、全パターンに入れ替えの可能性あり。

たぶん MSDN の記載は誤解を招くかと。
こちらの根拠は以下の Volume 3A, Chapter 8.2

Intel 64 and IA-32 Architectures Software Developer's Manuals
http://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
>>135
WARはレジスタリネーミングと同じだよ。
上書きするなら依存関係が切れるので命令の実行順序は入れ替え可能になる。
結果を内部で保持しておいて後で書き出す。
そして実際のメモリの内容は命令の順序通りの結果になる(ならなかったら大変)。

でいいかと。
138137
2013/02/18(月) 22:30:08.38
>>137の補足しとくと、同一プロセッサでも異なるアドレスだとリオーダ可能なので
順序が重要な場合はメモリフェンスが必要になる。
別のプロセッサ間でもリオーダ可能ということになる。

別のプロセッサとの同じメモリに対するアクセス順序はタイミング次第で複雑なので
必要に応じてロックプレフィックスを使う。
139デフォルトの名無しさん
2013/02/18(月) 23:53:52.86
>>135
MSDNのほうが正しい。
昔はIntelのdeveloper manualの記述が曖昧だったこともあり、
間違った解説が結構ある。

>>136-138
マルチスレッドでもRAW以外は入れ替わらないよ。
140デフォルトの名無しさん
2013/02/19(火) 07:57:34.41
>>139
キャッシュラインがコピーされた状態ではRARの順番は替わりうると思うけど
RAW自体は入れ替わらないんじゃないかな。
実際のWriteの前にReadが割り込む可能性があるけど、それはタイミング次第ってことで。
141デフォルトの名無しさん
2013/02/19(火) 09:15:14.16
lockプリフィックス使うんじゃあ
142デフォルトの名無しさん
2013/02/23(土) 20:04:20.23
>>139
そうか、マルチスレッドでもリオーダは無いな。他から割り込まれる可能性があるだけだ。
143135
2013/02/23(土) 23:41:17.41
>>136-142さん、さんくすでした。
MDSNが正しかったのですか。

> それ RAW じゃね
でした。コードの順番と英語表記は逆になるんですよね。誤解してました・・・。

この辺を勉強する本とかないでしょうか?
「The Art of Multiprocessor Programming 並行プログラミングの原理から実践まで」
は読んでみたのですがロックレスアルゴリズムの原理だけでCPUごとの実装は
なかったのであまり役にたたなかったです。
144デフォルトの名無しさん
2013/02/24(日) 10:17:55.94
ハードウェアを実装するとなったらそれこそ本一冊どころではすまないだろうけど、
データの同期に関しては何が危険でどうすれば安全に扱えるかが区別できればいいんじゃない?
だから本を買って読むほどでもないような。

CPU内の順序はOut of Orderが関係していて、CPUは可能な限り速く実行しようとするから
順番が入れ替わってしまうってことで、それをコントロールするのにメモリバリア命令がある。
アセンブラの最適化にも関係してるから、プロセッサの最適化マニュアルとかも参考になるかも。

マルチプロセッサではキャッシュコヒーレンシやMESIプロトコルとかの概略を知ってればいいんじゃないかな。
他のプロセッサに割り込まれて困る部分にはlockで保護するとか。
145デフォルトの名無しさん
2013/02/26(火) 14:50:30.35
Java の資料だけど「コンパイラ開発者のためのJSR133クックブック」ってのはどう?
146デフォルトの名無しさん
2013/02/27(水) 12:54:04.48
>>145
邦訳版はダメ。
肝心のアーキテクチャ毎の表などが古いままで間違っている。
147デフォルトの名無しさん
2013/02/27(水) 23:21:29.29
RafterWってシングルスレッドなら絶対安全?
途中で実行cpuが変わってもosが面倒見てくれるから気にする必要はないってこと?
実行cpuが変わることあるかしらないけど

まぁ普通にコード書いてて入れ替わる訳ないから大丈夫か
148デフォルトの名無しさん
2013/03/02(土) 16:47:32.29
>>147
> まぁ普通にコード書いてて入れ替わる訳ないから大丈夫か

普通に入れ替わるだろ。
切替前に読み込んだ情報は、違う CPU でもちゃんと復帰するから
問題ないはず。
149デフォルトの名無しさん
2013/03/03(日) 20:26:49.52
>>148
書き方が悪かった。

マルチプロセッサの環境でシングルスレッドのコードを実行してて、
実行CPUが変わったとしても読み書き順が入れ替わらないでしょう?

そこはOSがプロセス切り替え時に勝手にバリアをかけてるはずだよね?ってこと
150デフォルトの名無しさん
2013/03/03(日) 20:30:18.24
>>149
ああそういうことか、それは大丈夫だと思うよ。
151 ◆0uxK91AxII
2013/03/03(日) 22:58:29.83
バーリアー!平気だもーん!
152デフォルトの名無しさん
2013/03/04(月) 01:43:54.42
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
マルチコアでないマルチプロセッサ構成で、
外部キャッシュや主記憶のシステムコントローラが、
CPU本体より弱いメモリモデルを採用してる場合に意味を持ってくる。
Windowsではこうゆうハードウェア構成は想定してないはず。
154デフォルトの名無しさん
2013/03/04(月) 10:40:54.32
>>153
違うよ。全然違うよ。
とりあえず、これでもじっくり読め。
msdn.microsoft.com/ja-jp/magazine/jj883956.aspx
155デフォルトの名無しさん
2013/03/04(月) 11:45:37.38
ところでmfenceは何でSSE2の制御命令に分類されてるの?
156デフォルトの名無しさん
2013/03/04(月) 23:37:29.77
>>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
>>155
xFENCE命令はMOVNTPS, MOVNTPD,などのNon Temporal転送命令向けの機能で、
この系統の命令だけx86のメモリモデルに従わないので専用のFENCE命令が必要となった。
このうちLFENCEとMFENCEは普通のx86命令にも効果があるが、
パフォーマンスがxchgに劣る。
158デフォルトの名無しさん
2013/03/11(月) 15:38:43.70
なんでxchgがバリアとして使えるの?
159デフォルトの名無しさん
2013/03/11(月) 17:50:17.45
メモリに対するxchgは自動的にlockを伴う
160片山博文MZパンク ◆0lBZNi.Q7evd
2013/06/18(火) 23:59:01.86
確率的にいつ終わるかわからない時間の掛かる処理をマルチスレッドを使って複数同時に
実行させると、シングルスレッドよりも早い時間で終わる確率が高くなると思うが、これについて貴様らはどう思う?
161片山博文MZパンク ◆0lBZNi.Q7evd
2013/06/19(水) 00:04:03.77
ちなみにクロスワード自動作成ソフトを作ってますっ
162デフォルトの名無しさん
2013/06/19(水) 01:02:30.98
辞書ひく時間が糞長いから、マルチスレッドやっても大して変わらない
163デフォルトの名無しさん
2013/06/19(水) 06:32:32.99
>クロスワード自動作成ソフト

どこらへんを並列化できるのん?
164デフォルトの名無しさん
2013/06/19(水) 09:30:45.19
バックトラック乱れ打ちじゃねーの
165デフォルトの名無しさん
2013/06/20(木) 07:49:26.95
同じレスを各板に乱れ撃ちする作業だろ?
166デフォルトの名無しさん
2013/06/20(木) 15:25:09.57
マルチスレッドにしたら5〜8時間に1回エラーが出るようになった。でもデバックできないよorz
167デフォルトの名無しさん
2013/06/20(木) 20:17:10.50
つログ
168デフォルトの名無しさん
2013/06/20(木) 22:19:34.34
同期もわかってないのにマルチスレッドにするからだ。
169デフォルトの名無しさん
2013/06/20(木) 22:26:19.30
同期とったら並列の意味がなくなりそうでためらうときがあるな
待ち合わせキューにするくらいなら順番に処理した方がましな気がする
170デフォルトの名無しさん
2013/06/21(金) 00:07:54.88
つスーパースカラー
171デフォルトの名無しさん
2013/06/21(金) 00:28:22.79
粒度変えりゃいいじゃん
172デフォルトの名無しさん
2013/06/21(金) 04:34:35.98
マルチスレッドって自作できるんですか?
以前nyの書籍を読んだときに、開発者の人がマルチスレッドを自作したと書いてたような気がするのですが
C言語でも自作できるんですか?
173デフォルトの名無しさん
2013/06/21(金) 04:48:19.55
マルチスレッド・マルチタスクで動いているように見せることは出来る。

並列動作させたい複数の処理を細切れにしてちょっとづつ実行して
グルグル回す。
174デフォルトの名無しさん
2013/06/21(金) 15:03:05.45
>>173
タイムシェアリングみたいにやるってことですか
175デフォルトの名無しさん
2013/06/21(金) 19:27:29.84
>>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
スレち
177デフォルトの名無しさん
2013/06/21(金) 19:52:56.34
スレチというほどじゃないんじゃない?

OSレベルでスレッドのサポートが無い場合は、
言語ランタイムレベルのグリーンスレッド
タイマー等の割り込みの利用
メッセージポンプのループ利用
NT Fiber

スレッドはないけどプロセスのマルチが出来るなら、
パイプなどでプロセス間通信の利用
といったところかな
178デフォルトの名無しさん
2013/06/21(金) 20:25:17.31
俺もスレチじゃないと思う
179デフォルトの名無しさん
2013/06/21(金) 20:31:18.12
windows 3.1 を思い出すな
180デフォルトの名無しさん
2013/06/21(金) 20:41:54.83
ファイバーってレアすぎ
181デフォルトの名無しさん
2013/06/21(金) 22:30:00.37
>>175
win31 のことね
182デフォルトの名無しさん
2013/06/21(金) 22:38:33.58
気が早いな
まだ8だぞ
183デフォルトの名無しさん
2013/06/21(金) 23:18:56.88
2000があるのに…

>>175をタイムシェアリングだと思ってたな。もう少し勉強しよう。
184デフォルトの名無しさん
2013/06/21(金) 23:38:19.83
ファイアー少なくてレアすぎ
185デフォルトの名無しさん
2013/06/21(金) 23:40:35.43
広義だと含むのとちゃうかな
おさ〜ん的にはTSS(TSO)のホスト端末を思い浮かべるけど
186デフォルトの名無しさん
2013/06/23(日) 12:58:55.01
ファイバー使ってみたけど、
フェーズとswitchより
シンプルに書けたよ。
187デフォルトの名無しさん
2013/11/22(金) 08:18:08.42
C/C++ で勉強したいのですが、おすすめの書籍などありますか?
もしくは一から学べるようなWebページがあれば教えてください
188デフォルトの名無しさん
2013/11/22(金) 09:05:54.07
D の方が良いよ
189デフォルトの名無しさん
2013/11/22(金) 13:04:58.77
猫でもわかる
190デフォルトの名無しさん
2013/11/23(土) 05:39:10.02
>>188
D のほうが書きやすい?触れたことないのでわからんです
>>189
猫でもわかる は、Web版が俺にはちょっと分かりづらかった記憶が
書籍だとそうでもないのかな

C++のBoostを利用したThreadプログラミングの解説ページがあったので今はそれ見てます
191デフォルトの名無しさん
2013/11/23(土) 09:00:39.63
>>190
触ってもいいお
192デフォルトの名無しさん
2013/11/23(土) 13:19:59.45
>>191
どれどれ
193デフォルトの名無しさん
2013/11/23(土) 13:24:53.59
>>191
ペロペロ
194デフォルトの名無しさん
2014/02/23(日) 09:00:04.29
マルチスレッドって自力だとどうやって書くの?
195デフォルトの名無しさん
2014/02/23(日) 09:43:27.54
pthread_create()
196KUSO KOTE ◆unko./w.Osri
2014/02/23(日) 10:15:16.84
>>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
例の金子がny作るときにマルチスレッドは自作したんじゃなかったっけ?
198デフォルトの名無しさん
2014/02/24(月) 18:45:47.70
なんとかしてこれを読むと良い
http://ci.nii.ac.jp/naid/40000002652
199デフォルトの名無しさん
2014/02/25(火) 00:18:34.64
>>197
あれ、シングルスレッドだよ。
Windows3.1みたいな方法で複数のタスク回してる。
200デフォルトの名無しさん
2014/02/25(火) 06:43:17.74
小学生がBASICで弾の連射実装してるレベルだろ。
201デフォルトの名無しさん
2014/02/25(火) 12:01:20.77
グリーンスレッドとは違うの?
202デフォルトの名無しさん
2014/02/25(火) 17:16:14.73
グリーンスレッドなんて初耳。wikip見たらなんかトンデモな説明なんだが。
これは誰が言い出したんだ? バズワードくさい。
203デフォルトの名無しさん
2014/02/25(火) 17:27:19.90
レッドスレッド、ブルースレッドはあるのでしょうか?
204デフォルトの名無しさん
2014/02/25(火) 17:28:25.61
OSが関与しないスレッドの実装のこと。ウィキペディアの記述がタコってるのはいつものこと。

基本的な理屈はそう難しくないけど、実際にはreadとかでどれかのスレッドがプロセスごと
ブロックされると、他に走りたいスレッドが居ても走れなくなっちゃうので、そのへんを
どう手当てするかがカギ(そういった所だけOSが支援するとか、ブロックする可能性がある
システムコールに関連するものは全てスレッドライブラリが面倒を見るとか)。
205デフォルトの名無しさん
2014/02/25(火) 17:33:10.94
よく分らんな。スレッドってそもそもOSが定義したものだろう。
アプリ側がたかが永続性のあるサブルーチン程度のものを
勝手にグリーンススレッドって呼んでるだけじゃないのか?

まさしく小学生がBASICで弾の連射実装してるレベルの話。ガッカリ度120%。
206デフォルトの名無しさん
2014/02/25(火) 18:01:22.88
ユーザースレッド、ユーザ空間でか、なるほど
カーネルスレッド、カーネル空間でか、なるほど
グリーンスレッド、仮想機械上でか、で、なんでグリーンやねん。それこそ>>203
207デフォルトの名無しさん
2014/02/25(火) 18:14:03.00
http://dl.acm.org/citation.cfm?id=603551
↑これが「小学生がBASICで弾の連射実装してるレベルの話」に見えるのか。
さぞかしスーパープログラマ(笑)様なんだろうな。
208デフォルトの名無しさん
2014/02/25(火) 18:19:01.04
その例え話しとその提示したのと繋がりそしてなんでその皮肉になるのか、200文字以内で説明しなさい
209デフォルトの名無しさん
2014/02/25(火) 18:49:55.40
wikipediaのスレッドの項目の所まで加筆してやがるww
バズワード確定だな。エミュレータでゲーム動かしたらグリーンスレッドかよw

そんなのスレッドと何の関係もないのにスレッド言うなや。
210デフォルトの名無しさん
2014/02/25(火) 19:49:47.38
結局、逆の意味でのウィキペディア馬鹿か。
一人で言ってろw
211デフォルトの名無しさん
2014/02/26(水) 05:28:26.83
グリーンCPU。
グリーンプロセス。
グリーンヒープメモリ。
グリーンスタックメモリ。
グリーン仮想メモリ。
グリーン物理メモリ。
グリーンマルチタスク。
グリーンネットワーク。
グリーンアップル。

おれもいっぱい考えました。
212デフォルトの名無しさん
2014/02/26(水) 08:36:42.11
グリーンPC
グリーンディスプレイ

が抜けている
213デフォルトの名無しさん
2014/02/26(水) 08:51:32.57
ソイレント
214デフォルトの名無しさん
2014/02/26(水) 13:23:35.72
MZ-80Kの話をしてるのかと思ったぜ
215デフォルトの名無しさん
2014/02/26(水) 14:34:56.07
>>214
そりゃMZ80Cだ!
MZ80Kはモノクロだ!
216デフォルトの名無しさん
2014/02/26(水) 17:24:33.12
> ユーザースレッド、ユーザ空間でか、なるほど
> カーネルスレッド、カーネル空間でか、なるほど
> グリーンスレッド、仮想機械上でか、で、なんでグリーンやねん

ユーザースレッドとカーネルスレッドという言葉はそれぞれ、
M:Nスレッドモデルとかの議論で、カーネル空間のコードの実行におけるスレッドと、
ユーザー空間のコードの実行におけるスレッド、という意味で使われる。

グリーンスレッドというのは、スレッドAPIを(可能な限り)ユーザースレッド内で実装した
スレッドAPIの実装を指す。

以上のことが何も理解できないバカには、なにもかもがバズワードに見える。
217デフォルトの名無しさん
2014/02/26(水) 17:25:22.57
バカですがなにか?
218デフォルトの名無しさん
2014/02/26(水) 17:49:55.02
命名の由来のことなのに、Wikipediaから意訳したようなのを偉そうにのたまう、他人を馬鹿呼ばわりする自称天才様w
天才過ぎてどれもこれも バズワード 扱いしていると思い込んでいるようだしなあ。御愁傷様でw
219デフォルトの名無しさん
2014/02/26(水) 18:13:53.06
> バズワード確定だな。エミュレータでゲーム動かしたらグリーンスレッドかよw
>
> そんなのスレッドと何の関係もないのにスレッド言うなや。

この威勢はどこ行ったのかなぁw
220デフォルトの名無しさん
2014/02/26(水) 18:31:45.02
>グリーンスレッドというのは、スレッドAPIを(可能な限り)ユーザースレッド内で実装した
>スレッドAPIの実装を指す。

ハナからスレッドの定義に当てはまらないのにスレッド言われもなぁ。

WEB2.0と変わらんレベルの造語。
どうせまたジョブスオタクの低脳営業SEが言い出したんだろう。
221デフォルトの名無しさん
2014/02/26(水) 18:36:03.83
スレッドの定義ってなんだ?
222デフォルトの名無しさん
2014/02/26(水) 18:38:20.17
コイツの脳内ではシステムコールで実装されたものだけがスレッド、という定義なんだろう。
聞くだけ無駄だよ。
223デフォルトの名無しさん
2014/02/26(水) 18:43:07.52
>>221
OSが管理する最小の実行スタック。
224デフォルトの名無しさん
2014/02/26(水) 18:44:25.59
>>222
ではキミのスレッドの定義は?
225デフォルトの名無しさん
2014/02/26(水) 19:01:36.43
222じゃないけど、スレッドっていうのはプログラムを実行する最小単位のことでいいんじゃないかな
OSが管理しているかどうかは問わない

スレッドっていう概念が実装されてるプログラミング言語が多いと思うんだけど、
この場合のスレッドはOS上の実装とは切り離されてるんだよね
例えばJavaのThreadクラスとか

OSが管理するものだけをスレッドと定義するとしたら、上記のようなプログラミング言語で
抽象的に実装されてるスレッドはスレッドとは呼ぶべきじゃないということかな?
226デフォルトの名無しさん
2014/02/26(水) 19:17:09.57
実行スタックってなんだ、って思ったらウィキペディア(英語版含む)でそんな表現を使ってるのか。

一応GNU AWKと、.NETかCOMに、execution stackという用語はあるようだが。
227デフォルトの名無しさん
2014/02/26(水) 20:45:20.03
>>225
そんなトンデモ言われてるも議論する気にもならん。
じゃあ、関数もスレッドなんですね。

もうアホかと。しかもJavaの〜とかふざけてるとしか。
228デフォルトの名無しさん
2014/02/26(水) 21:45:14.58
ワロタw
229デフォルトの名無しさん
2014/02/26(水) 21:46:50.48
中途半端に脳内完結してるんだろな
230デフォルトの名無しさん
2014/02/26(水) 21:49:16.49
グリーンスレッド言ってた >>222 が定義を言わず逃げちゃった。

グリーンラナウェイ。
231デフォルトの名無しさん
2014/02/26(水) 22:31:24.56
ファイバー、タスク、ユーザーレベルスレッドと呼ばれ方はあるが
スクリプト言語のスレッドやゲームのタスクシステムの実装などに使われているありふれたテクニックだろ
OSの実装も同じだよ、ただカーネルレベルでやってるからCPUの特権命令が使えたりするってだけ
もしやOSを書いたことも言語処理系を書いたこともないのか?
232デフォルトの名無しさん
2014/02/26(水) 22:43:21.83
意味負
233デフォルトの名無しさん
2014/02/27(木) 06:36:49.81
>>227
JavaのThreadクラスの何処がふざけてるんだ?
234デフォルトの名無しさん
2014/02/27(木) 07:43:24.03
>>231
さっさとおまえの定義を言えよ、低脳。
235デフォルトの名無しさん
2014/02/27(木) 07:47:45.64
もはや人格攻撃しかできないモードに縮退したか。
236デフォルトの名無しさん
2014/02/27(木) 07:49:46.46
POSIXのスレッドAPIを実装したものがスレッド、という定義でいいだろ。
237デフォルトの名無しさん
2014/02/27(木) 07:54:15.34
トンデモグリーンスレッド連呼してたのにそのスレッドの定義聞いたら答えないで
逃げ回ってるんだからもはや人格の問題でしかない。

クズである。
238デフォルトの名無しさん
2014/02/27(木) 08:07:04.32
おまえが自分の定義と違うものに聞く耳を持たないクズってだけじゃないか。

自分がクズだろ。
239デフォルトの名無しさん
2014/02/27(木) 08:56:57.51
>>237
自己紹介乙、でどうでしょう
240デフォルトの名無しさん
2014/02/27(木) 09:11:19.33
>>238
その定義ってどれ?w いいかげにんしろよ、クズ。
241デフォルトの名無しさん
2014/02/27(木) 10:03:13.14
いい加減スレチ
242デフォルトの名無しさん
2014/02/27(木) 12:12:54.02
グリーンスレッドはどう考えてもスレッドじゃないからな。
スレチ。
243デフォルトの名無しさん
2014/02/27(木) 12:47:18.23
コンテキストの切り替えが出来るならスレッドの範疇でいいとちゃうの
LWTやFiberも範囲でいいだろ
244デフォルトの名無しさん
2014/02/27(木) 15:48:00.75
Java屋は馬鹿だからな。なに言っても無駄。
245デフォルトの名無しさん
2014/02/27(木) 17:43:54.80
馬鹿でわるかったなー
246デフォルトの名無しさん
2014/02/27(木) 18:44:32.81
キチガイに触るな
居座っちゃうだろ
247デフォルトの名無しさん
2014/02/28(金) 03:22:01.11
マルチスレッドとタイムシェアリングは違うの?
248デフォルトの名無しさん
2014/02/28(金) 04:10:21.51
>>247
まずプロセスとスレッドの違いを理解してから
249デフォルトの名無しさん
2014/02/28(金) 06:26:56.06
まずグリーンプロセスとグリーンスレッドの違いを説明してほしい。
250デフォルトの名無しさん
2014/02/28(金) 22:47:18.43
グリーンスライムよりは手強そうなイメージ
251デフォルトの名無しさん
2014/03/01(土) 06:43:57.25
グリーンプロセス()
252デフォルトの名無しさん
2014/03/01(土) 13:24:07.27
このスレはカーネルレベルでの実装オンリーのスレになりました、ってことでFAね。
あるいは「カーネル型」のw
253デフォルトの名無しさん
2014/03/01(土) 13:27:09.68
まだいるのかグリーンスレッド君
254デフォルトの名無しさん
2014/03/01(土) 14:11:27.38
まだいるのかカーネル至上主義者君
255デフォルトの名無しさん
2014/03/01(土) 14:14:20.18
v-sync割り込みでマルチタスクだお〜
DOS至上主義者が通りますよ〜
256デフォルトの名無しさん
2014/03/01(土) 19:50:36.19
[要出典]
257デフォルトの名無しさん
2014/03/01(土) 21:16:37.40
>>255
マウス用割り込みの方が良い。
258デフォルトの名無しさん
2014/03/02(日) 21:38:31.73
マウスの付いてるパソコンはカッコ悪い
259デフォルトの名無しさん
2014/03/02(日) 21:41:29.98
わーるかったな
260デフォルトの名無しさん
2014/03/06(木) 00:31:59.51
マルチスレッドって使えるところが限られてる
261デフォルトの名無しさん
2014/03/08(土) 13:27:50.88
これからマルチスレッドの勉強をしようと思うんだけど、
参考になるサイトとかコードとかを教えて欲しい。

特にワーカスレッドを複数立て、たくさんのデータブロックを順に渡して処理させるようなサンプルとか。
ネットを検索しても、スレッドが延々と動きつづけるか、処理が終われば使い捨てるものばかりで、
処理の終わったワーカスレッドに次のデータを渡して連続して処理させるものが見つからない。
また、可変長の演算結果を親スレッドに返す方法についても、どうすればいいのやら。
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
使い捨てと使い回しで、クロックにして1k~2kくらいの差が有るかどうかだから、使い捨てでOK。
263デフォルトの名無しさん
2014/03/08(土) 15:49:40.12
HotspotVMは?
と無茶振りしてみる
264デフォルトの名無しさん
2014/03/08(土) 15:57:35.44
VCならOpenCLかC++AMP使えば良いんじゃね
CPUとGPUで切り替えも出来るし
CPUだけならPPLでも
265デフォルトの名無しさん
2014/03/08(土) 16:20:54.15
VS2013か2012で、C++11のstd::threadとblockingできるqueueとstd::futureあたりを使えばいいんじゃないかな。
266デフォルトの名無しさん
2014/03/09(日) 12:57:11.91
>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
そこまで仕様が決まってるならさっさと書けよって話だが。
268デフォルトの名無しさん
2014/03/09(日) 19:14:48.84
自慢
269デフォルトの名無しさん
2014/03/09(日) 19:44:21.54
なんの?w
270デフォルトの名無しさん
2014/03/09(日) 21:24:29.64
典型的なコード書けない君だったか。
271デフォルトの名無しさん
2014/03/09(日) 21:29:22.95
>>261
OpenMPのparallel forで分割するだけでおk
272265
2014/03/10(月) 02:53:54.21
>>271
もしも、それで済む用件だったら、一番楽だね。
VS2012と2013なら、無料版でもOpenMP使えるし。
手元のコードでOpenMPでforループ2048周をi7-3760Xで6倍速度くらい。
CUDAで780Tiで2048*2048cudaスレッドでさらに18倍くらいだった。
273デフォルトの名無しさん
2014/03/10(月) 06:30:44.63
266の処理は、OpenMPのparallel for schedule (dynamic)でできる
274デフォルトの名無しさん
2014/03/10(月) 12:00:01.04
ここはおまえの日記じゃねーぞ。
275デフォルトの名無しさん
2014/03/10(月) 17:32:15.14
スレッドの数って
CPUのコア数より多くしても意味ないよね?
276デフォルトの名無しさん
2014/03/10(月) 17:42:02.40
>>275
スレッド内の処理でI/O待ちとかしてる場合は意味あるんじゃないの?
277デフォルトの名無しさん
2014/03/10(月) 18:28:34.27
ひたすら計算し続けるなら意味はない。
計算メインというだけならコア数の倍ぐらいまでは
スループットが上がることはある。
278デフォルトの名無しさん
2014/03/10(月) 19:11:36.58
書きたいアルゴリズムを自然に書けるという理由で
マルチスレッドに意味があることはある
GUIなんかそうだろうね
279デフォルトの名無しさん
2014/03/10(月) 19:22:36.70
そんなGUIの実装は見たこと無いです。
280デフォルトの名無しさん
2014/03/10(月) 19:40:06.12
GUI スレッドと別に好きなスレッドを立ててうまくやっていけるってことだろうに‥‥
win16 の泣きそうな世界を知らないのか?
281デフォルトの名無しさん
2014/03/10(月) 19:46:18.78
それはCUIでも同じだろう。
282デフォルトの名無しさん
2014/03/10(月) 21:47:19.99
処理内容・数によるけど大量のパラ処理はCPUのマルチコアやNvidiaのGPGPUからAMDのGPGPUでopenCLが定番になってきたからな
そして、今後はAMDのHSAも定番になるって感じになっているし。
283デフォルトの名無しさん
2014/03/11(火) 17:20:13.24
いつGPGPUが定番になってきたんだ。
むしろまじ使えないってスルーされてる感が半端ない。
284デフォルトの名無しさん
2014/03/11(火) 20:17:22.02
それは nvidia/cuda
285デフォルトの名無しさん
2014/03/13(木) 20:09:50.61ID:pPziPNkQ
インテルのやたらコア数が多い奴にビットコイン掘らせたらよさげよね
286デフォルトの名無しさん
2014/03/13(木) 20:31:14.10ID:gEHR9Glb
GPGPUは特定の局面に限って言えば使えるんだが、一般の用途では
その特定の局面が存在しないというかわいそうな技術。
287デフォルトの名無しさん
2014/03/13(木) 20:32:14.41ID:gEHR9Glb
ちなみにbit coinのマイナーはGPGPUから専用設計のASICに
主戦場が移った。消費電力が段違いなんだとさ。
GPUでやったら電気代で赤字になりそうだ。
288デフォルトの名無しさん
2014/03/13(木) 20:49:30.32ID:/ZWTiswr
>>287
特定用途のみならICにしたほうが良いだろうな。

確かbitcoinでよく使われていたVGAはAMDだったはず。
ゲーム用VGAのGPGPU性能はいまはAMDのほうが良いのかな
289デフォルトの名無しさん
2014/03/13(木) 21:06:24.71ID:k4ocBl+v
FPGA経由でASICな。

しかも最近じゃあ、専用マシン(アクセラレータ?)を手に入れても、掘るより転売するほうが儲かるとかw
290デフォルトの名無しさん
2014/03/13(木) 22:02:39.26ID:gEHR9Glb
で、自販機の下に落ちてる100円玉を地道に拾うぐらいなら
ショベルカーでATMごと盗んじゃえってのがマウントゴックス。
291デフォルトの名無しさん
2014/03/13(木) 22:18:30.00ID:hR60BOrR
>>290
ワラタ、でもまさにソレ
MtGoxってMTGのカード売りだったと知った時の苦笑いときたら
292デフォルトの名無しさん
2014/03/14(金) 16:35:28.14ID:8t3OXl/v
2年ほど前にbitcoin採掘をしていたが
お前らの想像の千倍くらい時間のかかる処理だったし
今もっと難しくなってるから既に個人で掘るのは無理なんじゃね
293デフォルトの名無しさん
2014/03/14(金) 16:57:23.89ID:90E4Zs91
で、結局どのくらい掘れた?
294デフォルトの名無しさん
2014/03/14(金) 17:00:16.55ID:UFFJd6rH
千倍台で分散する
295デフォルトの名無しさん
2014/03/14(金) 17:37:55.81ID:p2oYKy+P
>bitcoin採掘
どういうこと?
296デフォルトの名無しさん
2014/03/14(金) 17:57:18.99ID:I0jjMatv
>>295
むちゃくちゃ簡単に言うとBitCoinの正規のビットパターンは計算で求まる、でこれの正しい組み合わせを計算する事を採掘(マイニング)って言うだけの話
297デフォルトの名無しさん
2014/03/14(金) 17:59:12.49ID:Sx19eOr2
>>296
ありがとん
298デフォルトの名無しさん
2014/03/15(土) 00:32:35.88ID:IYjSi/+A
ちょいと相談。

データ処理とファイル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.81ID:CF1cuZUb
>>298
そもそも一旦メモリに載せる必要があるのか?非同期IOじゃだめ?
どうしても載せなきゃいけないとして、Aはあまり意味がない。
よほど頭の悪い実装をしてなければ、現状メモリを喰ってるってことは
inputよりoutputの方が遅いってことだ。頻度で解決する問題じゃない。
Bの方は、conditon variableでスタックのサイズが一定より大きくなったら
inputを待たす方法が一番簡単じゃないか。
300 ◆0uxK91AxII
2014/03/15(土) 01:15:15.11ID:4evGY2gy
>調子のいいときは数MBしか食わないのに、最悪は2GB食って落ちることもある。
常識的に考えてバグ持ち。

>コピーが終わった時点で共用stack占有状態を開放、
ふつーstack<void *>。
301デフォルトの名無しさん
2014/03/15(土) 08:03:00.01ID:B9xccETs
バッファに制限を設けて
書き込みが詰ったら待てばいいだけでは
302デフォルトの名無しさん
2014/03/15(土) 08:17:50.21ID:kVDIpCQy
リングバッファ、そして新しいバグ
303デフォルトの名無しさん
2014/03/15(土) 08:31:05.02ID:xmGMuN0W
リングバッファてメモリが一杯になったらファイルに書き出すように実装するのが普通?
304デフォルトの名無しさん
2014/03/15(土) 12:26:30.58ID:GnRScPte
普通じゃない
305デフォルトの名無しさん
2014/03/15(土) 13:36:30.86ID:royCDzaU
どうすんの?あふれたら捨てるの?
306デフォルトの名無しさん
2014/03/15(土) 13:43:41.30ID:E7qCmrfx
環境によっては勝手にswapしてくれるかもしれない
307デフォルトの名無しさん
2014/03/15(土) 14:07:58.75ID:PqTylRc6
>>305
ふつうは>>301の言うように空くまで書き込みを待たせるか捨てる。
待てないような要件ならサイズ固定のリングバッファじゃなく可変のキューを使うなりする。
308デフォルトの名無しさん
2014/03/15(土) 14:16:36.02ID:1lWAVkUO
書き出すデータのフォーマットを工夫してサイズを小さくするとか、
書き込み先をSSDにしたりとか、動作環境のスペックを見直すという手も。
309デフォルトの名無しさん
2014/03/15(土) 14:17:30.95ID:y0lYdZ+H
>>307
ありがとう、バッファーの構造を別にして最大容量は設定しないといけないということですね

>>306
後出しになるけど、リアルタイムシステムのデータ収集のようなもの考えていたので
310デフォルトの名無しさん
2014/03/15(土) 16:35:55.25ID:x1nRJa7F
いるんだよなー、そもそも不可能なことを引き受けちゃう奴って
311デフォルトの名無しさん
2014/03/15(土) 20:31:13.52ID:9prhxYaH
てへ、昔の話がねた
312デフォルトの名無しさん
2014/03/15(土) 22:04:58.47ID:B9xccETs
金あるならFusion-ioを使えばいい
圧縮で減るようなデータならsnappyで圧縮する
313デフォルトの名無しさん
2014/03/15(土) 23:24:57.03ID:Jbm5xDHA
普通のリアルタイムではありえん
314313
2014/03/15(土) 23:26:35.57ID:Jbm5xDHA
訂正 以上です
315デフォルトの名無しさん
2014/03/16(日) 01:00:35.01ID:67pIoXcC
リアルタイムシステムというのがRTOSを使っているという意味なら
送信側か他のタスクがwait入れてなくて書き込みタスクが動いていないとかってバグじゃないかな
>>313
時代は変わりCPUを使って圧縮したほうがIOが減って低レイテンシにできる
316デフォルトの名無しさん
2014/03/16(日) 01:13:20.61ID:CvhR8B+T
リアルタイムっていうのは入力があってから何ms以内に応答を
返せなければならないみたいなシステムのことでしょ。
コンピュータ制御の工作機械で応答が遅くて削りすぎましたとか
許されないから。
317デフォルトの名無しさん
2014/03/16(日) 01:14:58.23ID:Va0mC41/
>261だけど、概ね期待通りの動作になってきた
速度面でも、現在使用中のPCでシングルスレッドだと70時間ほど掛かってたから、
マルチスレッド化で6コアに分散して細部の調整込みで10時間切れれば恩の字と思ってたのに、なんと4時間半を切れたw
最新のCPUを使えば2時間も夢じゃないかも

あとは演算処理orデータのやり取りのバグを潰せばほぼ完成
(結果の個数が少し足りない)
318デフォルトの名無しさん
2014/03/17(月) 12:29:47.16ID:iella/tJ
シングルスレッドのまま細部の調整とやらだけでどこまで行くのやら
319デフォルトの名無しさん
2014/03/17(月) 15:11:57.25ID:ot8TfsyN
どんだけ時間がかかってるのやら。
320デフォルトの名無しさん
2014/06/13(金) 00:28:43.87ID:cRyKxN+T
共有/排他ができるロックと条件変数があるとき、これらを使って
共有から排他にエスカレーションできるロックを構成することってできる?
321デフォルトの名無しさん
2014/06/13(金) 01:34:28.10ID:+YSiec3A
ロックとか条件変数って排他するものだよね。共有できるロックって何?
RCUのこと?
322デフォルトの名無しさん
2014/06/13(金) 08:49:59.19ID:cRyKxN+T
ええと、いわゆるread-writeロックのこと。
323デフォルトの名無しさん
2014/11/06(木) 22:37:47.07ID:iaZsweTc
マルチスレッドは馬鹿には無理
馬鹿は使ったほうがいいところでマルチスレッドを使わずに
使わないほうがいいところっ使ってややこしくしたりする
324デフォルトの名無しさん
2014/11/06(木) 23:24:42.11ID:ETjlkHcn
負荷分散とか難易度高なのにね
325デフォルトの名無しさん
2014/11/09(日) 01:27:34.76ID:UGYkYxzf
スレッディング・ビルディング・ブロックについて勉強し始めた所なんだけど、どうなの?
理解して使うと安全で早くなりそうだとは思ったが、メモリ処理の効率とかどうなるんかな?
とか思ってる所なんだけど・・・
326デフォルトの名無しさん
2014/11/09(日) 07:37:34.59ID:SGm17f1c
安全にするには、ある程度やった人しか...
327デフォルトの名無しさん
2014/11/09(日) 22:48:01.80ID:wyNvyEnQ
メモリ処理の効率って具体的にどういう点?
mallocとかのメモリ管理の効率?それともキャッシュヒット率のような意味?
328デフォルトの名無しさん
2014/11/10(月) 09:36:09.81ID:W8sKwQAR
オライリーのTBBの本買ったけど途中まで読んで放置してたw
ラムダ式を使えばoperator()使わなくていいなら改めて勉強しなおそうかな

>>325
コンカレントコンテナとかは並列にメモリ割り当てしたり、キャッシュラインの競合を考慮した
アロケータを持ってるみたいだから、自前でやるのと変わらないぐらいにはなってるんじゃない?
TBBの本も中古ならかなり安いから買ってみるといいよ
329デフォルトの名無しさん
2014/11/12(水) 14:11:39.04ID:nS55KI9v
基礎的な質問で申し訳ないのですが
同じ変数に複数のスレッドがアクセスしてはいけないのはわかりますが
同じコードに複数のスレッドがアクセスするのはいいのでしょうか?
例えば何の変数にもアクセスしない関数を複数のスレッドが同時実行するのはいいのでしょうか?
330デフォルトの名無しさん
2014/11/12(水) 14:21:32.89ID:Tjo57cUc
ダメな理由でも探してるの?
331デフォルトの名無しさん
2014/11/12(水) 14:31:27.32ID:nS55KI9v
>>330
今書いているプログラムで
C#の関数の中でシグナルを使っているのですが
他のスレッドからその関数を呼ぼうとするとエラーが起こるのです・・・
もしかしたら関数自体にシグナルをかけなければいけないのかなぁと思って
332デフォルトの名無しさん
2014/11/12(水) 14:35:31.55ID:Tjo57cUc
C#のシグナルってよーしらんけど
エラーが出るってことは、質問の内容と違うことやってるんじゃないの
333デフォルトの名無しさん
2014/11/12(水) 15:18:29.39ID:ghkKScBM
同期オブジェクトを保持している変数を上書きしていそうな気がするんだが
334デフォルトの名無しさん
2014/11/12(水) 16:32:42.96ID:yNtQ/r84
いろいろ分かってないだけだろう
335デフォルトの名無しさん
2014/11/13(木) 06:29:27.90ID:w/Cn+ODk
ライブラリがマルチスレッドに対応してないだけかと
336デフォルトの名無しさん
2014/11/13(木) 06:35:25.00ID:4ACzZkWI
/MT
337デフォルトの名無しさん
2014/11/13(木) 13:44:55.73ID:t6y7WFqt
C#ならエラーメッセージやスタックトレースが出てるだろ
338デフォルトの名無しさん
2014/11/15(土) 11:02:51.29ID:JwZZHuNb
>>329
同じ関数は実行するのは、スレッドが違えばコンテキストスイッチが起きて、レジスタとかスタックが入れ替わるから大丈夫
メンバ変数とstatic変数さえ使わなければ何個起動しても排他も何も考えなくてよいぞ
339デフォルトの名無しさん
2014/11/16(日) 00:17:15.94ID:lWtIBSfv
同じ変数に複数のスレッドがアクセスするならクリティカルセクションが楽だ
340デフォルトの名無しさん
2014/11/16(日) 19:55:00.63ID:9ZsvKJox
linuxですがスレッドで同じファイルに書き込む場合、競合することってありますかね?
341デフォルトの名無しさん
2014/11/16(日) 20:11:07.08ID:1qsvk//V
勿論。
342デフォルトの名無しさん
2014/11/16(日) 21:20:39.95ID:4XTrCB2a
論外
343デフォルトの名無しさん
2014/11/16(日) 21:40:57.77ID:Kyr5+wjo
>>339
もう win32 のクリティカルセクションとイベントオブジェクトでおなかいっぱい、というかこれだけでたいがいうまくいくのでは?
344デフォルトの名無しさん
2014/11/30(日) 17:47:06.48ID:H8djdLBQ
複数のスレッドがひとつのミューテックスのアンロックを待っていた場合、
つぎにどのスレッドがミューテックスを取得するかはランダムですか
345デフォルトの名無しさん
2014/11/30(日) 18:09:41.22ID:ddtepLmv
はい
待っていなかった別のスレッドがちょうどいいところに来てミューテックスを取得していくこともあります
346デフォルトの名無しさん
2014/12/01(月) 00:39:51.39ID:Az7+Eliy
いいえ
待っていなかった別のスレッドがちょうどいいところに来てミューテックスを取得していくこともあります
347デフォルトの名無しさん
2014/12/08(月) 19:13:20.61ID:PHJZbN+V
スレッドとミューテックスだけ覚えたけど
なにを作ったらいいのかわからんたい
348デフォルトの名無しさん
2014/12/08(月) 22:37:39.16ID:PHJZbN+V
チャット作ることにしました
349デフォルトの名無しさん
2014/12/08(月) 22:57:10.96ID:x3KHTevM
consumerとproducerみたいのがいいんじゃないのかなと思ったけど、
チャット作ることにしたのね
がんばってください
350デフォルトの名無しさん
2014/12/08(月) 23:08:56.71ID:PHJZbN+V
>>349
チャットで詰まったら気分変えてConsumer-Producerにも挑戦してみます
あざす
351350
2014/12/09(火) 00:23:00.21ID:MJarMgeM
>>349
いや、ありがとうございます
352デフォルトの名無しさん
2015/05/29(金) 22:45:34.32ID:gXnjRwZ6
Win8.1 Cygwin64bit g++のpthreadなんですが、マルチコアCPUなのに性能改善しません。
なにか特別なコンパイルオプションがあるとか
特別なライブラリをリンクしなければいけないとかあるのでしょうか。
-lpthreadはつけてます。
353デフォルトの名無しさん
2015/05/30(土) 20:09:50.25ID:WwgHsNSJ
エスパー能力はありません
354デフォルトの名無しさん
2015/05/30(土) 20:21:35.33ID:h4Yx63EK
そこをなんとかスーパーエスパーでお願いします
355デフォルトの名無しさん
2015/05/30(土) 21:18:52.04ID:iD4l02SZ
誠意を見せてください
356デフォルトの名無しさん
2015/06/15(月) 23:17:16.10ID:SZnUF3Ky
DISKへのアクセスって並列にしたって意味ないですか?

・・・
FileA読み込み(::ReadFile) 10秒
FileB読み込み(::ReadFile) 20秒
・・・

で30秒以上掛かりますが、
之をスレッドを起こしても意味無い?
357デフォルトの名無しさん
2015/06/16(火) 00:49:42.46ID:s9cfeU7N
よくわかってないけどDISKの特性によるのかなぁとかいってみる。
358デフォルトの名無しさん
2015/06/16(火) 01:06:01.70ID:ILaOeTTR
どういった特性ならどうなるのですか?
359デフォルトの名無しさん
2015/06/16(火) 01:31:46.58ID:ZNZkvIJW
読み込みながら処理をしてみたいにな状態でない限りスレッド分けてファイル読むと遅くなるよ(デバイスが別であればまた違うのだが)
純粋にバイナリデータとしてファイルをメモリに丸ごと読み込むのであればスレッド分ける意味ない(CPUとメモリの方がディスクよりも遙かに速い)
360デフォルトの名無しさん
2015/06/16(火) 01:39:58.55ID:ILaOeTTR
遅くなる理由はなんですか?
361デフォルトの名無しさん
2015/06/16(火) 09:26:39.31ID:gU9w5dQ4
俺様の質問に答えろとさ
362デフォルトの名無しさん
2015/06/16(火) 22:30:15.77ID:45Me4wJl
まともに答えるとまた暴れだすだろ
363デフォルトの名無しさん
2015/06/20(土) 17:07:37.08ID:2GjEDXn2
>>360
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鹿児島県
364デフォルトの名無しさん
2015/08/25(火) 15:16:47.83ID:f9VpmzI5
いまどきのディスクはインターリーブなんか考慮しても意味無いぞ
365デフォルトの名無しさん
2015/08/25(火) 23:23:52.89ID:SuXh7n4E
>>364
インターリーブってCPUが遅い時代の話だろ?
セクタリードの後でCPUが処理している間に次に読むべきディスク上の物理セクタが通り過ぎてしまうからシーケンシャルなセクタ処理でなくインターリーブした順序付けのセクタ使うって奴
366デフォルトの名無しさん
2015/10/10(土) 23:10:25.42ID:bMLX+QzX
趣味プログラムでInterlockedCompareExchange
で値が交換できた時だけそのスレッドが処理を進められるような感じで
作りこんでいるんだけど、何かこれだと問題ある?
一般的にはクリティカルセクションを使った方がいい的な話を聞くんだけど
sizeof(CRITICAL_SECTION)がチョット大きすぎるので使うのをためらってしまう
367デフォルトの名無しさん
2015/10/11(日) 01:12:22.19ID:DeMvW0Ba
>>366
レースする可能性があるくらいじゃね?
まあ、ほとんど問題ないと思うけど。
368デフォルトの名無しさん
2015/10/11(日) 01:16:20.15ID:DeMvW0Ba
>>367
間違えた。
レースじゃなくてスタベーションだった。
369デフォルトの名無しさん
2015/10/11(日) 10:38:15.80ID:P9PvwsgL
370デフォルトの名無しさん
2016/02/06(土) 07:43:27.68ID:DtUiRvEm
int iで++iにミューテックスが必要ってことはiを同時に2つのスレッドが足しても2増えるだけで必要ないと思うんですけど?1しか増えないってこともあるんですか?
371デフォルトの名無しさん
2016/02/06(土) 08:26:40.76ID:DtUiRvEm
CPUによってアトムが違うから必要ってことですねわかりました。
372デフォルトの名無しさん
2016/02/06(土) 08:57:53.38ID:AVvIsuem
御茶ノ水の博士の設計
373デフォルトの名無しさん
2016/03/07(月) 00:30:59.08ID:jKz+oF2h
>>370
Aスレッド:iから1を読み込んで++して2を代入
Bスレッド:iから1を読み込んで++して2を代入
答えは1増える
374デフォルトの名無しさん
2016/03/08(火) 01:40:29.32ID:YkHc2UTm
レース状態のことやね
375デフォルトの名無しさん
2016/03/20(日) 12:54:59.05ID:upopZnIF
同じcondition_variableでブロックしているスレッドが複数ある場合に、
notify_oneをしたら、どのスレッドが起床するのだろうか。
376デフォルトの名無しさん
2016/03/29(火) 08:51:54.17ID:/c8bAcK4
サッカーブッシュ日本代表日程ぷあたん(しゅっちょうまいくろ教育長交代)春文執行40代売上差額シュガーチョコ

宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題
マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス
FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了
校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント
高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート
377デフォルトの名無しさん
2016/05/20(金) 22:39:11.46ID:/6R1fTEV
>>375
リファレンス読め
378デフォルトの名無しさん
2016/05/23(月) 02:01:11.63ID:xOdUGJqd
CAS命令でロックしている部分を
_xbegin _xend やら xxx_HLEAcquireで代用すればCAS命令分のWaitをチャラにできるかと思ったんだけど
結果微妙に遅くなっただけだった
使い方間違っているのかなTSX
379デフォルトの名無しさん
2016/12/09(金) 07:26:48.14ID:WzSsU1Dc
マルチスレッドにおける変数の排他処理についてなんだけど、
排他制御していない状態で複数のスレッドが同じ変数に同時にアクセスすることそのものは問題ないよね?
読み取り最中に書き換えたり、書き換え最中に読み取った場合にデータが破壊されるというだけの話だよね?

例えば2byteの変数があって、スレッドAが1byte目を読み込んだ時点でスレッドBが2byte目を書き換え、
そこでスレッドAが2byte目を読み取った場合に、
データが上位1byteと下位1byteで別のデータを読み取ったことになっておかしくなるってことだよね?

ということは何らかのフラグで下位1bitのみを利用するような変数であれば、
上記のような状況は起きないから排他処理しなくても大丈夫って認識でOK?
380デフォルトの名無しさん
2016/12/09(金) 09:38:28.68ID:uxrmDz9Z
馬鹿乙
381デフォルトの名無しさん
2016/12/09(金) 13:52:04.09ID:GFY666CI
>>379
>>マルチスレッドにおける変数の排他処理についてなんだけど、
>>排他制御していない状態で複数のスレッドが同じ変数に同時にアクセスすることそのものは問題ないよね?

変数というだけでは分からない。
構造体とかC++の変数とかはそちらから見ても明らかに問題のはず。

>>ということは何らかのフラグで下位1bitのみを利用するような変数であれば、
>>上記のような状況は起きないから排他処理しなくても大丈夫って認識でOK?

1bit(あるいは1バイト、1ワード)がアトミックにアクセスできる
ことはシステムによって保証されていることが多い。

だから、その1bitの読み書きは出来る。
しかし大丈夫とか問題ないかということは、何を問題とするかを
書かないと答えようがない。

1bitはこれ以上分割できないので1ビットの半分だけ違う値になる、
ということはありえない。そういう心配をしてるなら大丈夫
382デフォルトの名無しさん
2016/12/09(金) 16:50:23.32ID:WzSsU1Dc
ありがとう!
大丈夫かどうかというのは、
排他制御が行われていない変数へのアクセスそのものが原因となってソフトウェアがクラッシュしたり、
OSやハードウェアレベルの問題は起きたりしないよね?って意味

C言語で下位1bitしか使わない排他処理が行われてない変数があり、その1bitをif文で判定して処理を2通りに分ける場合、
必ずその2通りのどちらかになることは保証されるよね?
できるだけ高速化したいから、できるだけ排他処理はしたくない。
383デフォルトの名無しさん
2016/12/09(金) 18:10:37.82ID:uxrmDz9Z
やっぱりアホか
384デフォルトの名無しさん
2016/12/09(金) 18:37:52.31ID:R3c5DqP6
>>382
馬鹿が書くと機械的に壊れることもあります
ソレノイドが焼損とか日常茶飯事
385デフォルトの名無しさん
2016/12/09(金) 21:27:34.75ID:WzSsU1Dc
>>384
どのパーツのソレノイド?
説明してくれ。
パソコンは自作やら修理やらよく頼まれ続けてきてるから専門的な話OKだ。
386デフォルトの名無しさん
2016/12/10(土) 23:59:30.12ID:mx8/lQPw
すいません質問します。
Matlobで、
例えば5000×5000の行列をAとして
その10×10の区分行列をBとします。
Aの対角線上にあるBだけを取り出して他が0行列の行列を作るにはどうすればいいですか?
また、各Bの対角要素だけ取り出すにはどうすればいいですか?
387デフォルトの名無しさん
2016/12/11(日) 00:44:10.55ID:pm6ghExK
・とりあえず全てのパラメータから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を代入する
388デフォルトの名無しさん
2016/12/11(日) 09:12:59.03ID:nmNJ+GHK
アホ
389デフォルトの名無しさん
2016/12/11(日) 10:53:35.53ID:PFNTM+nw
>>387
ありがとうございます。やってみます。
390デフォルトの名無しさん
2016/12/17(土) 10:53:31.14ID:WxRoohcq
>>381
ウソ乙
391デフォルトの名無しさん
2017/03/29(水) 21:36:43.88ID:QetAZaUg
【OS】OSX 10.8.5、Core i5
【言語】 C, C++
【実行環境】 XCode5.1, pthread

pthread を使って for ループを分割して実行するプログラムを書いたのですが、直列処理の方が速いです。
tbbやOpenMP でもやってみたのですが、直列の方が速いです。

上記の環境ではマルチスレッドで効率化を図るには、何か設定が必要なのでしょうか。
ざっくりした質問ですがヒントになるようなことでも教えて下さい。
392デフォルトの名無しさん
2017/03/29(水) 22:31:24.61ID:urajtArt
マカーか
393デフォルトの名無しさん
2017/03/29(水) 23:09:26.86ID:TE60yoif
>>391
プログラムを見ないと分からない。
マカーじゃないから見ても分からないかもしれないけど。

大前提として、マルチスレッド化して速くなるようなジョブなんだよね?
スレッドを作るのもjoinするのもスイッチするのも時間が掛かるので、
それらがペイしないと意味がない。

ちゃんと作っていて遅いのなら、キャッシュの競合の可能性があるかも
394デフォルトの名無しさん
2017/04/02(日) 18:18:24.01ID:mBDn/7kD
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; }
};
395デフォルトの名無しさん
2017/04/02(日) 18:29:20.77ID:mBDn/7kD
書き忘れ >>391 のマカーです。
396デフォルトの名無しさん
2017/04/02(日) 18:45:45.15ID:mBDn/7kD
度々すみません、タイポありました。(多分本筋と関係ないですが)
関数 bool isPrime( int n ) のループ。
 誤 for ( int j = 3; j < n; ++j )
 正 for ( int j = 2; j < n; ++j )
397デフォルトの名無しさん
2017/05/03(水) 16:23:24.52ID:E3YCeKkn
RelativisticProgrammingを日本語で解説してるとこ、ないかな?
398デフォルトの名無しさん
2017/05/04(木) 03:11:44.69ID:N/fwOcUx
++j
399デフォルトの名無しさん
2017/09/17(日) 19:09:14.78ID:iyMogwhx
#include <stddef.h>
offsetof(type, member-designator);
400デフォルトの名無しさん
2018/05/23(水) 21:43:17.32ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

4DXJZ
401デフォルトの名無しさん
2018/07/05(木) 00:17:03.60ID:RfoszcD2
Z1B
402デフォルトの名無しさん
2018/10/28(日) 23:21:28.63ID:bVjvgsxo
>>394
超亀レスだしテキトーだけど、counterがシングルトンなら
countのインクリメントでシリアライズされるんじゃね?
403デフォルトの名無しさん
2019/01/13(日) 12:43:26.12ID:P4nmFhbL
Intelのハイパースレッドでスケールするか否かのアルゴやデータ構造のパターンとか、評価基準をまとめた本なりサイトなり御存じでしたら教えてください。
404デフォルトの名無しさん
2019/01/26(土) 17:42:01.46ID:stTjLhtD
400MBのデータを一括でコピーする処理を並列化してもノイマンボトルネックに掛かってスケールしないと思うんですが、boolの配列(newしたもの)でやるとある程度スケールします。
何でですか?
405デフォルトの名無しさん
2019/01/26(土) 18:19:40.68ID:yUYodqfD
>>404
bool の配列が、例えば、8個の bool 値をまとめて 1バイトとして格納している場合で、
for ( i =0; i < 100000; i++ ) {
dst[i] = src[i];
}
のように書いて、かつ、コンパイラがこのループを「そこまでの」最適化はしなかった場合、
32BIT 環境の場合なら、32回のループで 1 DWORD 分の実メモリやキャッシュ・メモリへの
転送が生じるだけになるかも知れない。その他のメモリアクセスは、基本、code の
fetch だけになり、全てCPU内部のキャッシュ・メモリに乗ってしまう。

だから、マルチスレッドでこのループを分割して行えば、32スレッドまでなら、
高速化が起きる気がする。

そういう問題でなくて?
406デフォルトの名無しさん
2019/01/26(土) 18:25:13.78ID:VVr2JTND
>>404
あ、あと
>400MBのデータを一括でコピーする処理を並列化してもノイマンボトルネックに
>掛かってスケールしないと思う

これだけど、以外に高速化されたりするかもしれない。
実際の CPUはそんなに賢くないので。

色々複雑。
407デフォルトの名無しさん
2019/01/27(日) 00:13:20.29ID:UeSsBKpf
チップセットや DDR DRAM、バス・アービタなどの事はそんなに詳しくは無いけど、
「ブロック転送命令」みたいなのがあるかも知れない。そして、
CPU で、rep movsd などが実行されるとき、CPU は、自分で転送せずに
チップセットと連携してバス・アービタにその命令を発行し、すぐに次の命令
から実行を再開したりするかも知れない。昔で言う「バスマスタ転送」や「DMA転送」
に似たようなやり方。

なんでそう思うかというと、主記憶(外部メモリ)はCPUのクロック速度にはついていけない
はずなのに、以外に CPU のブロック転送が速い気がするから。

確認は取ってない。
408デフォルトの名無しさん
2019/01/27(日) 19:38:20.44ID:0CxMXTRb
返信ありがとう。
DMA転送できるものをコンパイラが探知できるか疑問に思ってました。CPU機能としてのブロック転送は関係ありそうですね。
ワード単位処理は確かにやってそうです。

マルチコアでスケールできる処理って割りと限られてますね(汗。
409デフォルトの名無しさん
2019/01/27(日) 19:45:29.93ID:upukWAKG
バイナリ見れば済む話だよね^^
410デフォルトの名無しさん
2019/01/27(日) 19:45:46.51ID:UADZfhGv
>>408
[追加]

DMAでなくとも、CPU自身が命令実行の処理とは独立して主記憶の間で
転送をする仕組みは当然あるので、ブロック転送の予約みたいな事で、
実際の転送処理が終わってなくても次の命令に進んだりするようなことは
あるかも知れないと想像してみる。

無いかもしれないけど。
411デフォルトの名無しさん
2019/01/27(日) 19:48:31.17ID:UeSsBKpf
>>409
いや。例えば、バイナリだと、
rep movsd
の1命令がそこにあるだけで、命令表を見ればブロック転送をする命令とあって、
擬似命令レベルでの処理までは書かれているが、バス転送レベルでそれをCPUが
どう処理してるかまでは分からない。
412デフォルトの名無しさん
2019/01/28(月) 03:22:00.62ID:3CrwaDYk
double 1GBをコピー元のデータを加工してからコピーする場合は、どうやってもスケールしないんですかね、この話の感じからして。
書き込みタイミングが結果論でずらせるので、並列化で多少は見込みアルのかな。ーー自分で実験した方が良いですね。
413デフォルトの名無しさん
2019/01/28(月) 11:26:24.99ID:jKaiFfBH
>>412
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 の処理が終わるまで待機すれば良い。
414デフォルトの名無しさん
2019/01/31(木) 02:15:04.55ID:1/qzJ5j1
キャッシュにデータを書き込むけどメモリに書き込まない、とか
キャッシュのデータをメモリに書き込む動作をC++など言語で実装できないでしょうか。
勘でやる他ないのでしょうか。
415デフォルトの名無しさん
2019/01/31(木) 13:32:39.64ID:OGxiQZdZ
>>414
自分で inline アセンブラか、単体のアセンブラを使えば出来る。
ただし、VC++ の inline アセンブラを使う場合は、結局、どんなコード
になるか分からない部分があるので、アセンブリ・ソース出力オプションか、
または、IDE の逆アセンブラでコードを確認する必要があると思うが。

ただ、個人的には、それ以上に、IA32のキャッシュ制御命令は、大量の
文書を読んで理解するのが大変に思うけれど。
416デフォルトの名無しさん
2019/04/02(火) 09:07:07.70ID:KCTAV4Kj
>>414
intelの大体i5以上の新しい石だと
_xbegin _xend 等の1次キャッシュから下位のメモリへの
ストアタイミングをコントロールできるTSX命令群がそれっぽいかと思う
417デフォルトの名無しさん
2019/04/02(火) 12:22:49.68ID:ZD2r0ERn
確か、もっと古いCPUでも、
mfence や、movxxxxx 系の命令でも色々出来たと思う。

物凄い複雑なので、ちゃんと理解してないけど。
418デフォルトの名無しさん
2019/04/02(火) 12:29:24.16ID:LpV8NoZ4
以下のようなものも関係している。複雑すぎて理解してない。

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)
419デフォルトの名無しさん
2019/07/19(金) 00:38:16.38ID:eyVpHwMv
質問:
ある資源を生成破棄するメーカースレッドがひとつと、その資源を使うユーザースレッドが複数ある。
メーカースレッドとユーザースレッドは排他的に資源にアクセスするが、ユーザースレッド同士は排他的でない。
どのように排他処理を実装すればよいか。
420デフォルトの名無しさん
2019/07/19(金) 02:31:14.72ID:jdncuoqE
>>419
Producer-Consumerパターンか
間にChannel挟めばちゃんと動くよ
421デフォルトの名無しさん
2019/07/19(金) 03:55:47.52ID:J62Ms8NU
課題
422デフォルトの名無しさん
2019/07/19(金) 20:31:45.43ID:XW48gDPw
2コア4スレッドってCPUだと
4スレッド同時に動くの?
423デフォルトの名無しさん
2019/07/19(金) 21:19:16.26ID:oxWniFkv
動くよ
ただしハードウェアリソース的に余裕がある部分(SSEとか)位しかあまり効果がないな
マルチスレッドではやや分がある
というのはコンテキストスイッチの負荷が純粋に1/2になる
レジスタの内容をメモリに退避する回数が1/2になればそりゃ軽くなるよね
整数演算ではあまり期待しない方がいい
424デフォルトの名無しさん
2019/07/19(金) 22:46:03.30ID:tF13LP95
同時に動いてないなら排他制御しなくていいみたいな勘違いしてそうな質問だ。
425デフォルトの名無しさん
2019/07/19(金) 23:08:15.01ID:JGHPeX3b
そこまで深くは考えてなかったんだけど。
CPUコアひとつなのにどうやって2スレッド同時に動くのか不思議だったから。
426デフォルトの名無しさん
2019/07/20(土) 10:22:32.66ID:aCn5nh8Q
実際に鯖用CPUではHT切ってあるもんな
かえってパフォーマンスが低下するとかで
最近の例の脆弱性との絡みもある
その代わり最初からコアいっぱい積んでいる
427デフォルトの名無しさん
2019/07/20(土) 10:23:03.60ID:aCn5nh8Q
×切ってある
◯BIOSで自分で切っている
428デフォルトの名無しさん
2019/07/20(土) 12:15:42.11ID:D7d7RY7Z
on/offをアプリ側で指定できないし、
性能が線形に上がらない時点でHTを考慮した設計は面倒すぎる。
429デフォルトの名無しさん
2019/07/20(土) 13:01:11.01ID:aCn5nh8Q
マルチスレッド・デザインパターンの本にあった例だけど
ワーカースレッド(スレッドプール)を実装せよ
なお言語は自由とする
430デフォルトの名無しさん
2019/07/20(土) 22:48:42.36ID:xFVhhGJz
マルチスレッドの解説本はいくつもあるけど
マルチプロセッサのプログラミングって参考書ないのかね。
431デフォルトの名無しさん
2019/07/21(日) 00:29:38.70ID:9qa3Jnjy
マルチスレッドの解説本でカバー出来ないくらいのマルチプロセッサのプログラミングだと
かなりマニアックというかプロセッサ固有の問題の割合が大きくなると思うので
そういう方面で探すしかないのではないか
それだけに特化した専門書は無いかもね
432デフォルトの名無しさん
2019/07/21(日) 00:46:58.94ID:gryZIvyQ
行列演算を並列処理とかそういう粒度の細かな並列化の話ばっかりで。
せっかく10コアとかあるんだから、各コアに別々のプログラムを走らせておいて
同期しながら処理とかしたいんだけどどうするのがいいかよく分からない。
fork させてメッセージやりとりすれば良さそうなんだけど。
やりたいことがちょっと特殊かもね。
433デフォルトの名無しさん
2019/07/21(日) 01:03:16.42ID:oN+9KGia
質問の低レベル化が甚だしい。アセンブラを勉強して基礎固めを。
434デフォルトの名無しさん
2019/07/21(日) 01:24:11.69ID:YuxLcsPo
OpenMPみたいなのを手動でやるって話かな
マルチコアだとメモリ帯域がボトルネックになりやすいから
巨大な行列計算は少し粒度を荒くしたMPIの方が強いよね
435デフォルトの名無しさん
2019/07/21(日) 01:57:36.05ID:dcJVZcgj
10コアとかいってるからマルチプロセッサというよりメニーコア活用術?
436デフォルトの名無しさん
2019/07/21(日) 08:19:29.20ID:gryZIvyQ
>>433
むしろアセンブラのほうが分かりやすいんだけど。

各コアにPCセットして起動すればいいの?
プロセッサの仕様書読んでみるわ。
437デフォルトの名無しさん
2019/07/21(日) 08:23:47.17ID:nevBE1rB
並列処理じゃなくて並行処理で探せば
438デフォルトの名無しさん
2019/12/05(木) 19:00:58.65ID:sV2dE7Px
マルチスレッドの排他処理で詰まってスレ検索して来てみたけどこのスレは高尚過ぎるなw
初心者スレにでも行こう
439デフォルトの名無しさん
2021/03/04(木) 23:27:05.69ID:320wEDvY
_beginthreadex() を使ったマルチスレッドプログラムについて質問です。
この関数の説明を見ると、「_beginthreadex() のコールに成功すると、スレッドのために
タイムスライスが割り当てられたか否かによらず、スレッドはアクティブ(non-signal)になる」
とあったのですが、_beginthread() がスレッドハンドルを返すよりも前にスレッド関数内の
処理が実行される(完了する)ことはありえますか?
440デフォルトの名無しさん
2021/03/05(金) 15:45:04.28ID:0Dz+Yobc
>成功した場合、これらの各関数は、新しく作成されたスレッドへのハンドルを返します。ただし、新しく作成されたスレッドが短時間で終了した場合、 _beginthread は有効なハンドルを返さない可能性があります。 (「解説」の説明を参照してください)。

>_Beginthread よりも _beginthreadex を使用する方が安全です。 _Beginthread によって生成されるスレッドが短時間で終了した場合は、 _beginthread の呼び出し元に返されるハンドルが無効であるか、別のスレッドを指している可能性があります。 ただし、 _beginthreadex によって返されるハンドルは _beginthreadex の呼び出し元によって閉じられる必要があるため、 _beginthreadex がエラーを返さなかった場合は、有効なハンドルであることが保証されます。


ハンドルが有効であることは保証されているけど
実行順についての言及はないし、
そもそも別スレッドなら、どちらが先に行われるかについては何の保証もないと考えるべきじゃないのかな
「APIから戻る」のだって実行権がなければ後回しにされる可能性はあるんだから
441sage
2021/03/06(土) 05:17:04.33ID:0GCeIGT3
>>440
ご返信ありがとうございます。概ね理解できました。
勉強不足で、マルチスレッドの仕組みについて誤解していたようです。
442デフォルトの名無しさん
2021/03/06(土) 11:08:41.13ID:pd/Aiz5V
ちなみにCentOSはスレッドのコアが指定できるよ。
443デフォルトの名無しさん
2021/03/06(土) 11:30:24.47ID:UzpsIFsk
macOSだとコア指定できない。
444デフォルトの名無しさん
2021/03/06(土) 13:08:47.51ID:VGFn/kw3
あわしろ氏によると、Macは既にオワコンなので、WSLを使うと良いらしい。
445デフォルトの名無しさん
2021/03/25(木) 15:15:49.52ID:LuSagST9
針に糸を通す( thread a needle
糸をつむぐ( spin thread [yarn]
糸が切れた( The thread broke.
琴の糸を締める( tighten a string of a koto
糸をかき鳴らす( strum the strings
446デフォルトの名無しさん
2021/04/03(土) 09:59:34.29ID:CHs8071g
このスレ来年で10年か
スレ推奨図書とかないの?
447デフォルトの名無しさん
2022/04/14(木) 16:49:21.50ID:wwxSZsaE
マルチスレッド処理の花形といえばハードなリアルタイムスレッドとバックグラウンドスレッドの間のデータのやり取りだと思ってるんだが
スレの過疎っぷりを見るに、殆どの人にとって必要のないものだったんだな
448デフォルトの名無しさん
2022/05/26(木) 01:42:01.15ID:EhvYdlEg
>>447
MS-DOS のデバイスドライバにでも痕跡が残っていたような‥
どうするつもりだったんだろう?
449デフォルトの名無しさん
2022/05/26(木) 16:41:59.49ID:kr4vk/7I
>>447
ハードな略が動いている間はバック略を動かさないから大して考えることは無い
DOSの頃と同じだな
450デフォルトの名無しさん
2023/10/18(水) 18:12:44.04ID:k+tvnK8M
>>432
 とりあえず、メインスレッド1個にサブスレッドを9個用意し、基本的な管理はメインスレッド管理。
イベントハンドルは9×2個用意する。

 サブスレッドはイベント処理とWaitForSingleObjectで待たせておいて、メインスレッドから情報を送って
SetEventでイベントを動かす。メインスレッドはサブスレッド9個からSetEventでイベントが返らない限り
イベントとWaitForSingleObjectを駆使して止めておく。
451デフォルトの名無しさん
2023/10/18(水) 18:13:06.20ID:k+tvnK8M
>>432
 とりあえず、メインスレッド1個にサブスレッドを9個用意し、基本的な管理はメインスレッド管理。
イベントハンドルは9×2個用意する。

 サブスレッドはイベント処理とWaitForSingleObjectで待たせておいて、メインスレッドから情報を送って
SetEventでイベントを動かす。メインスレッドはサブスレッド9個からSetEventでイベントが返らない限り
イベントとWaitForSingleObjectを駆使して止めておく。
452デフォルトの名無しさん
2023/10/18(水) 18:16:53.34ID:k+tvnK8M
>>450-451
あ”、二重投稿になったか。

えっと、ちょっと補完。
サブスレッドの処理についてはループして待たせておく。終わったら終了を知らせるイベントを発生させる。
453デフォルトの名無しさん
2023/10/19(木) 01:25:35.07ID:8UDFhheE
>>365
REID 1 みたいな例があるから必ずしも昔の技術というわけではないな。
454デフォルトの名無しさん
2023/10/19(木) 01:28:22.25ID:8UDFhheE
>>16
 あれって、OSの機能だから気にしなくても良いというのでは駄目か?

lud20250213060329
このスレへの固定リンク: http://5chb.net/r/tech/1339691517/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「マルチスレッドプログラミング相談室 その9YouTube動画>1本 ->画像>1枚 」を見た人も見ています:
ドイツ戦車閑談室 その93
プログラミングのお題スレ Part13
prog:プログラマー[スレッド削除]
プログラム機能のある電卓で遊ぶスレッド
ヒッキーの競技プログラミングするスレ
Windowsゲームプログラミング 質問スレ
プログラミング学習サイトについて語るスレ
競技プログラミングにハマるガイジのスレ 93
プログラミング義務教育の全容について考えるスレ
競技プログラミングにハマるプログラマのスレ 91
競技プログラミングにハマるプログラマのスレ 38
競技プログラミングにハマるプログラマのスレ 57
競技プログラミングにハマるプログラマのスレ 71
競技プログラミングにハマるプログラマのスレ 98
競技プログラミングにハマるプログラマのスレ 46
競技プログラミングにハマるプログラマのスレ 15
競技プログラミングにハマるプログラマのスレ 205
競技プログラミングにハマるプログラマのスレ 189
競技プログラミングにハマるプログラマのスレ 195
競技プログラミングにハマるプログラマのスレ 192
NHK総合を常に実況し続けるスレ 145682 プログラミング
【粛々と?】忍法帖巻物質問スレ★27【相談室】
【粛々と?】忍法帖巻物質問スレ★34【相談室】
母乳育児スレッド その92
ドイツ戦車閑談室 その88
ドイツ戦車閑談室 その83
蟹座の恋愛相談室 その3
★マルチポスト〔スレッドのみ〕
★マルチポスト〔スレッドのみ〕
グランブルーファンタジー中級者マルチ禁止スレ97
グランブルーファンタジー中級者マルチ禁止スレ78
グランブルーファンタジー中級者マルチ禁止スレ99
グランブルーファンタジー中級者マルチ禁止スレ102
グランブルーファンタジー中級者マルチ禁止スレ149
★荒らし報告(埋め立て・マルチポスト・スレッド乱立など)★8
★荒らし報告(埋め立て・マルチポスト・スレッド乱立など)★18
★荒らし報告(埋め立て・マルチポスト・スレッド乱立など)★6
【mobage】グランブルーファンタジー中級者マルチ禁止スレ43
荒らし報告(埋め立て・マルチポスト・スレッド乱立など)代行要望スレ12
荒らし報告(埋め立て・マルチポスト・スレッド乱立など)代行要望スレ18
グランブルーファンタジー中級者マルチ禁止スレ49 [無断転載禁止]
★荒らし報告(埋め立て・マルチポスト・スレッド乱立など)代行要望スレ★5
★230929 クレジット板 埋め立て荒らし・マルチポスト荒らし報告スレッド
プログラミングにはMac
プログラミングがわからなすぎる
base:プロ野球[スレッド削除]
お前らプログラミングできるんだろ?
競技プログラミングをしないか?
プログラミング言語 Scala 12冊目
寺が学習塾、プログラミング指導
自己啓発、能力開発プログラムのスレ
isp:プロバイダー[スレッド削除]
プログラミングで通貨メーターを作りたい
女子プロレス総合スレッドPart11
暇つぶしにBTRONプログラミングでもするかー
プログラミングはRyzenでやってもエエ?
1行ずつC++を書いてプログラムを作成するスレ
関西私大でプログラミング学べる学部ある所
中1の5割以上 「プログラミングできる」
プログラミングを今日から学び始めたんですが
let s: プログラミング言語? = Swift
子供向けプログラミング言語ビスケット
Macがプログラミングに最適とかいう風潮
結局人気の高いプログラミング言語ってなに?
■何故プログラミングの初めの一歩って・・・■
プログラミング教育するだけで日本復活するのに
03:30:04 up 53 days, 4:33, 0 users, load average: 9.71, 11.88, 14.03

in 0.93978691101074 sec @0.93978691101074@0b7 on 030717