マルチスレッドプログラミングについて語るスレ
■前スレ
マルチスレッドプログラミング相談室 その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】
【言語】
【実行環境】
【その他特記する事項】
探検
マルチスレッドプログラミング相談室 その9
2012/06/15(金) 01:31:57.88
2012/10/01(月) 00:06:38.53
タスクキューのことだよ。
てかスレッドセーフなキューってなんだよ。それだったら
別にキューに限定せずスレッドセーフなコンテナの話でいいだろ。
てかスレッドセーフなキューってなんだよ。それだったら
別にキューに限定せずスレッドセーフなコンテナの話でいいだろ。
2012/10/01(月) 07:53:47.16
java.util.concurrent.BlockingQueueのことだろ
2012/10/12(金) 23:18:24.02
同期処理を間違いなく設計するための、何か良い手法やツールはないですかね?
ペーペーのビギナーだというのもあるのですが、
複数のmutexを混在させなければいけない時にぼんやり書いたコードでデッドロックを発生させたり、
waitに到達していないのにシグナル発射する可能性のあるコードを書いてしまって、
そのデバッグで無駄に体力を消耗しています
ペーペーのビギナーだというのもあるのですが、
複数のmutexを混在させなければいけない時にぼんやり書いたコードでデッドロックを発生させたり、
waitに到達していないのにシグナル発射する可能性のあるコードを書いてしまって、
そのデバッグで無駄に体力を消耗しています
100デフォルトの名無しさん
2012/10/13(土) 11:18:48.75 馬鹿には無理
101デフォルトの名無しさん
2012/10/13(土) 13:05:32.66102デフォルトの名無しさん
2012/10/13(土) 18:57:49.84103デフォルトの名無しさん
2012/10/13(土) 22:12:39.46 >>101
やんないと、他に仕事ないんで・・・・
>>102
かなり頭がよくないと、サラリと正しいコード書けないですよね(棋士的な意味の頭のよさ)
そうか、地道にやるしかないのか(´・ω・`)
・・・売り物なんですねimagix
自分の担当業務以外にも使えそうなので、ちょっとチーム内に紹介してみます
とりあえず、今の自分のレベルでミスりやすいところを正しく実装するための比喩をいくつか考案中です
↓
例1
スレッド間同期は、キャッチボール
ボールを受け取る側は、しゃがんでいないとボールをキャッチできない
例2
スレッド再開時の手順は、競馬のスタートと同じ
@ゲートを閉じる(送信側mutexロック)
A馬がゲート前に並ぶ(受信側wait)
Bファンファーレが鳴る(signal)
Cゲートが開く(送信側mutex開放)
やんないと、他に仕事ないんで・・・・
>>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.79106デフォルトの名無しさん
2012/10/14(日) 18:33:06.95 まず10年間C++を勉強しろ
107デフォルトの名無しさん
2012/10/14(日) 20:43:53.62 >>106
C++関係ないやん
C++関係ないやん
108デフォルトの名無しさん
2012/10/15(月) 01:03:58.39109デフォルトの名無しさん
2012/10/15(月) 09:17:51.40 結局無理てことか、初心者というより基本が
110デフォルトの名無しさん
2012/10/21(日) 14:23:48.88111デフォルトの名無しさん
2012/10/21(日) 14:42:59.60112デフォルトの名無しさん
2012/10/21(日) 23:06:50.68 Joel on softwareの和訳ページ『間違ったコードは間違って見えるようにする』
を紹介しようと思ったが今ちょっと繋がらないようなので原文で読んでちょ↓↓↓
http://www.joelonsoftware.com/articles/Wrong.html
を紹介しようと思ったが今ちょっと繋がらないようなので原文で読んでちょ↓↓↓
http://www.joelonsoftware.com/articles/Wrong.html
113デフォルトの名無しさん
2012/10/26(金) 20:45:55.33 教えてください
g++でコンパイルしたプログラムのプロファイリング、特にスレッドの動作の
効率を見たいのですが、Linux環境で使える定番のフリーツールはないでしょうか?
g++でコンパイルしたプログラムのプロファイリング、特にスレッドの動作の
効率を見たいのですが、Linux環境で使える定番のフリーツールはないでしょうか?
114デフォルトの名無しさん
2012/10/28(日) 11:59:56.78 gdb
115デフォルトの名無しさん
2012/10/28(日) 21:28:29.42 マ
ジ ハ ,,ハ
デ (;゚◇゚)z
!?
ジ ハ ,,ハ
デ (;゚◇゚)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を使う。スレッドでの変更が反映されている?
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()より前に
という事は行われないように思えるのですが。
どういった理由でしょうか?
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スレッドをローレベルで使うよりお手軽な気がする。
ちょっと試してみるわ。
の発言で思い出した。
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
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
突っ込みどころあったらご指摘よろ。
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とかあるみたいだけど、そこまではまだ調べられてない。
時間があったらもっと調べてみて、追記してみるよ。
そうみたい。
基本的にはマルチプラットフォームでやりたい場合は${ ~ }の記法と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の方が重いのではないかと考えています
1. ポーリング=Mutexで保護された共有リソースの変更を常に監視
2. サーバー(orクライアント)スレッドでEvent監視+Mutexで共有リソースを保護
余計なCPUリソースを食うのはどちらなんでしょうか?定性的な評価と理由を教えてください
(定性的な評価=プロファイルで調べろは無しでお願いします)
自分は「重さ:Mutex>>>>Event>>>>>>>CriticalSection」というイメージがあるので、
2のマルチスレッドのコンテキストスイッチの重さを考慮しても1の方が重いのではないかと考えています
129デフォルトの名無しさん
2013/01/30(水) 20:42:56.62 (゚Д゚)ハァ?
Mutexを奪い合えばいいだけだし。
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リソースを食うのはどちらなんでしょうか?定性的な評価と理由を教えてください
人から聞いたことを信じるの?
> 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
この順番が逆になることあり、てことだよね?
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
ttp://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html
write -> 0x1000
...
read -> 0x2000
と明らかに異なる場所へのアクセスであり、... の間に他のメモリアクセスが
無ければ、read を write の前に持ってきても結果は変わらないはず。
シングルスレッドのメモリ命令は 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 >>135
WARはレジスタリネーミングと同じだよ。
上書きするなら依存関係が切れるので命令の実行順序は入れ替え可能になる。
結果を内部で保持しておいて後で書き出す。
そして実際のメモリの内容は命令の順序通りの結果になる(ならなかったら大変)。
でいいかと。
WARはレジスタリネーミングと同じだよ。
上書きするなら依存関係が切れるので命令の実行順序は入れ替え可能になる。
結果を内部で保持しておいて後で書き出す。
そして実際のメモリの内容は命令の順序通りの結果になる(ならなかったら大変)。
でいいかと。
138137
2013/02/18(月) 22:30:08.38 >>137の補足しとくと、同一プロセッサでも異なるアドレスだとリオーダ可能なので
順序が重要な場合はメモリフェンスが必要になる。
別のプロセッサ間でもリオーダ可能ということになる。
別のプロセッサとの同じメモリに対するアクセス順序はタイミング次第で複雑なので
必要に応じてロックプレフィックスを使う。
順序が重要な場合はメモリフェンスが必要になる。
別のプロセッサ間でもリオーダ可能ということになる。
別のプロセッサとの同じメモリに対するアクセス順序はタイミング次第で複雑なので
必要に応じてロックプレフィックスを使う。
139デフォルトの名無しさん
2013/02/18(月) 23:53:52.86140デフォルトの名無しさん
2013/02/19(火) 07:57:34.41 >>139
キャッシュラインがコピーされた状態ではRARの順番は替わりうると思うけど
RAW自体は入れ替わらないんじゃないかな。
実際のWriteの前にReadが割り込む可能性があるけど、それはタイミング次第ってことで。
キャッシュラインがコピーされた状態では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ごとの実装は
なかったのであまり役にたたなかったです。
MDSNが正しかったのですか。
> それ RAW じゃね
でした。コードの順番と英語表記は逆になるんですよね。誤解してました・・・。
この辺を勉強する本とかないでしょうか?
「The Art of Multiprocessor Programming 並行プログラミングの原理から実践まで」
は読んでみたのですがロックレスアルゴリズムの原理だけでCPUごとの実装は
なかったのであまり役にたたなかったです。
144デフォルトの名無しさん
2013/02/24(日) 10:17:55.94 ハードウェアを実装するとなったらそれこそ本一冊どころではすまないだろうけど、
データの同期に関しては何が危険でどうすれば安全に扱えるかが区別できればいいんじゃない?
だから本を買って読むほどでもないような。
CPU内の順序はOut of Orderが関係していて、CPUは可能な限り速く実行しようとするから
順番が入れ替わってしまうってことで、それをコントロールするのにメモリバリア命令がある。
アセンブラの最適化にも関係してるから、プロセッサの最適化マニュアルとかも参考になるかも。
マルチプロセッサではキャッシュコヒーレンシやMESIプロトコルとかの概略を知ってればいいんじゃないかな。
他のプロセッサに割り込まれて困る部分にはlockで保護するとか。
データの同期に関しては何が危険でどうすれば安全に扱えるかが区別できればいいんじゃない?
だから本を買って読むほどでもないような。
CPU内の順序はOut of Orderが関係していて、CPUは可能な限り速く実行しようとするから
順番が入れ替わってしまうってことで、それをコントロールするのにメモリバリア命令がある。
アセンブラの最適化にも関係してるから、プロセッサの最適化マニュアルとかも参考になるかも。
マルチプロセッサではキャッシュコヒーレンシやMESIプロトコルとかの概略を知ってればいいんじゃないかな。
他のプロセッサに割り込まれて困る部分にはlockで保護するとか。
145デフォルトの名無しさん
2013/02/26(火) 14:50:30.35 Java の資料だけど「コンパイラ開発者のためのJSR133クックブック」ってのはどう?
146デフォルトの名無しさん
2013/02/27(水) 12:54:04.48147デフォルトの名無しさん
2013/02/27(水) 23:21:29.29 RafterWってシングルスレッドなら絶対安全?
途中で実行cpuが変わってもosが面倒見てくれるから気にする必要はないってこと?
実行cpuが変わることあるかしらないけど
まぁ普通にコード書いてて入れ替わる訳ないから大丈夫か
途中で実行cpuが変わってもosが面倒見てくれるから気にする必要はないってこと?
実行cpuが変わることあるかしらないけど
まぁ普通にコード書いてて入れ替わる訳ないから大丈夫か
148デフォルトの名無しさん
2013/03/02(土) 16:47:32.29149デフォルトの名無しさん
2013/03/03(日) 20:26:49.52 >>148
書き方が悪かった。
マルチプロセッサの環境でシングルスレッドのコードを実行してて、
実行CPUが変わったとしても読み書き順が入れ替わらないでしょう?
そこはOSがプロセス切り替え時に勝手にバリアをかけてるはずだよね?ってこと
書き方が悪かった。
マルチプロセッサの環境でシングルスレッドのコードを実行してて、
実行CPUが変わったとしても読み書き順が入れ替わらないでしょう?
そこはOSがプロセス切り替え時に勝手にバリアをかけてるはずだよね?ってこと
150デフォルトの名無しさん
2013/03/03(日) 20:30:18.24 >>149
ああそういうことか、それは大丈夫だと思うよ。
ああそういうことか、それは大丈夫だと思うよ。
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/
なんで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ではこうゆうハードウェア構成は想定してないはず。
外部キャッシュや主記憶のシステムコントローラが、
CPU本体より弱いメモリモデルを採用してる場合に意味を持ってくる。
Windowsではこうゆうハードウェア構成は想定してないはず。
154デフォルトの名無しさん
2013/03/04(月) 10:40:54.32155デフォルトの名無しさん
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
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に劣る。
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言語でも自作できるんですか?
以前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.84176デフォルトの名無しさん
2013/06/21(金) 19:38:33.60 スレち
177デフォルトの名無しさん
2013/06/21(金) 19:52:56.34 スレチというほどじゃないんじゃない?
OSレベルでスレッドのサポートが無い場合は、
言語ランタイムレベルのグリーンスレッド
タイマー等の割り込みの利用
メッセージポンプのループ利用
NT Fiber
スレッドはないけどプロセスのマルチが出来るなら、
パイプなどでプロセス間通信の利用
といったところかな
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 のことね
win31 のことね
182デフォルトの名無しさん
2013/06/21(金) 22:38:33.58 気が早いな
まだ8だぞ
まだ8だぞ
183デフォルトの名無しさん
2013/06/21(金) 23:18:56.88184デフォルトの名無しさん
2013/06/21(金) 23:38:19.83 ファイアー少なくてレアすぎ
185デフォルトの名無しさん
2013/06/21(金) 23:40:35.43 広義だと含むのとちゃうかな
おさ〜ん的にはTSS(TSO)のホスト端末を思い浮かべるけど
おさ〜ん的にはTSS(TSO)のホスト端末を思い浮かべるけど
186デフォルトの名無しさん
2013/06/23(日) 12:58:55.01 ファイバー使ってみたけど、
フェーズとswitchより
シンプルに書けたよ。
フェーズとswitchより
シンプルに書けたよ。
187デフォルトの名無しさん
2013/11/22(金) 08:18:08.42 C/C++ で勉強したいのですが、おすすめの書籍などありますか?
もしくは一から学べるようなWebページがあれば教えてください
もしくは一から学べるような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.02191デフォルトの名無しさん
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();
std::thread th{
[]{std::this_thread::sleep_for(std::chrono::milliseconds(3000));}
};
std::printf("うんこ\n");
th.join();
レスを投稿する
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★5 [BFU★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 【ローソン】ロゴの「L」で誤解生んだコーヒーカップ、デザイン変更へ 在庫使い切る3か月後にリニューアル [ぐれ★]
- 【悲報】SANA、発言撤回拒否 [769931615]
- 米シンクタンク「アメリカは台湾問題で"あいまい戦略"を取っている。高市早苗はこの方針から逸脱している」 [603416639]
- アラフィフおぢだが、意外と人生悪くない
- ジャーナリストがテレビで解説「台湾問題は高市総理から言ったのではなく、立憲民主が日本の対応可能能力を暴こうとしたから」 [359572271]
- 【朗報】スキースノーボードの季節がやってきた!
- 俺性格悪いなって思った瞬間あげてけ
