探検
マルチスレッドプログラミング相談室 その9
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
あるいは「カーネル型」の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至上主義者が通りますよ〜
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内で完結させようとしても終わらない。
参考になるサイトとかコードとかを教えて欲しい。
特にワーカスレッドを複数立て、たくさんのデータブロックを順に渡して処理させるようなサンプルとか。
ネットを検索しても、スレッドが延々と動きつづけるか、処理が終われば使い捨てるものばかりで、
処理の終わったワーカスレッドに次のデータを渡して連続して処理させるものが見つからない。
また、可変長の演算結果を親スレッドに返す方法についても、どうすればいいのやら。
1個の結果データは固定長だけど出てくる個数が可変なので、固定長の電文を複数投げるようなイメージでも可。
動作環境はWin7-x64で、VC++を使いマルチコアCPUのコア数分ワーカスレッドを立てようと思う。
うちのは6コアなので、単純計算で6倍弱には高速化できると思う。
処理内容の原理試作としてシングルスレッドのDOSアプリとして組んで、鍵値に5を与えて動かしてみた結果、
データブロック数は320万個余り、データブロック1個あたりの演算結果はゼロ〜100KBと幅があるw
そして総処理時間の見込みは60〜150時間(まだ終わってない)。
鍵値を6にするとブロック数も処理時間も莫大に跳ね上がるから、
たぶん1台のPC内で完結させようとしても終わらない。
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でも
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処理とかを真面目に考えないと無理そうだけど。
トン
スレッドの使いまわしについて、ちょっと説明が言葉足らずだったかな。
やりたいのは最初に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
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倍くらいだった。
もしも、それで済む用件だったら、一番楽だね。
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のコア数より多くしても意味ないよね?
CPUのコア数より多くしても意味ないよね?
276デフォルトの名無しさん
2014/03/10(月) 17:42:02.40 >>275
スレッド内の処理でI/O待ちとかしてる場合は意味あるんじゃないの?
スレッド内の処理でI/O待ちとかしてる場合は意味あるんじゃないの?
277デフォルトの名無しさん
2014/03/10(月) 18:28:34.27 ひたすら計算し続けるなら意味はない。
計算メインというだけならコア数の倍ぐらいまでは
スループットが上がることはある。
計算メインというだけならコア数の倍ぐらいまでは
スループットが上がることはある。
278デフォルトの名無しさん
2014/03/10(月) 19:11:36.58 書きたいアルゴリズムを自然に書けるという理由で
マルチスレッドに意味があることはある
GUIなんかそうだろうね
マルチスレッドに意味があることはある
GUIなんかそうだろうね
279デフォルトの名無しさん
2014/03/10(月) 19:22:36.70 そんなGUIの実装は見たこと無いです。
280デフォルトの名無しさん
2014/03/10(月) 19:40:06.12 GUI スレッドと別に好きなスレッドを立ててうまくやっていけるってことだろうに‥‥
win16 の泣きそうな世界を知らないのか?
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も定番になるって感じになっているし。
そして、今後は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でやったら電気代で赤字になりそうだ。
主戦場が移った。消費電力が段違いなんだとさ。
GPUでやったら電気代で赤字になりそうだ。
288デフォルトの名無しさん
2014/03/13(木) 20:49:30.32ID:/ZWTiswr289デフォルトの名無しさん
2014/03/13(木) 21:06:24.71ID:k4ocBl+v FPGA経由でASICな。
しかも最近じゃあ、専用マシン(アクセラレータ?)を手に入れても、掘るより転売するほうが儲かるとかw
しかも最近じゃあ、専用マシン(アクセラレータ?)を手に入れても、掘るより転売するほうが儲かるとかw
290デフォルトの名無しさん
2014/03/13(木) 22:02:39.26ID:gEHR9Glb で、自販機の下に落ちてる100円玉を地道に拾うぐらいなら
ショベルカーでATMごと盗んじゃえってのがマウントゴックス。
ショベルカーでATMごと盗んじゃえってのがマウントゴックス。
291デフォルトの名無しさん
2014/03/13(木) 22:18:30.00ID:hR60BOrR292デフォルトの名無しさん
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の正規のビットパターンは計算で求まる、でこれの正しい組み合わせを計算する事を採掘(マイニング)って言うだけの話
むちゃくちゃ簡単に言うと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に比べて頭が固定な分だけメモリの利用効率が高そうだったことと、
データの順番には意味がないから逆順になっても問題がないことによるものなので、
別のコンテナを使ったほうがいいなら、それでも構わない。
データ処理とファイル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を待たす方法が一番簡単じゃないか。
そもそも一旦メモリに載せる必要があるのか?非同期IOじゃだめ?
どうしても載せなきゃいけないとして、Aはあまり意味がない。
よほど頭の悪い実装をしてなければ、現状メモリを喰ってるってことは
inputよりoutputの方が遅いってことだ。頻度で解決する問題じゃない。
Bの方は、conditon variableでスタックのサイズが一定より大きくなったら
inputを待たす方法が一番簡単じゃないか。
>調子のいいときは数MBしか食わないのに、最悪は2GB食って落ちることもある。
常識的に考えてバグ持ち。
>コピーが終わった時点で共用stack占有状態を開放、
ふつーstack<void *>。
常識的に考えてバグ持ち。
>コピーが終わった時点で共用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:PqTylRc6308デフォルトの名無しさん
2014/03/15(土) 14:16:36.02ID:1lWAVkUO 書き出すデータのフォーマットを工夫してサイズを小さくするとか、
書き込み先をSSDにしたりとか、動作環境のスペックを見直すという手も。
書き込み先をSSDにしたりとか、動作環境のスペックを見直すという手も。
309デフォルトの名無しさん
2014/03/15(土) 14:17:30.95ID:y0lYdZ+H310デフォルトの名無しさん
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で圧縮する
圧縮で減るようなデータなら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が減って低レイテンシにできる
送信側か他のタスクが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データのやり取りのバグを潰せばほぼ完成
(結果の個数が少し足りない)
速度面でも、現在使用中の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のこと?
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とかのメモリ管理の効率?それともキャッシュヒット率のような意味?
mallocとかのメモリ管理の効率?それともキャッシュヒット率のような意味?
328デフォルトの名無しさん
2014/11/10(月) 09:36:09.81ID:W8sKwQAR オライリーのTBBの本買ったけど途中まで読んで放置してたw
ラムダ式を使えばoperator()使わなくていいなら改めて勉強しなおそうかな
>>325
コンカレントコンテナとかは並列にメモリ割り当てしたり、キャッシュラインの競合を考慮した
アロケータを持ってるみたいだから、自前でやるのと変わらないぐらいにはなってるんじゃない?
TBBの本も中古ならかなり安いから買ってみるといいよ
ラムダ式を使えば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#の関数の中でシグナルを使っているのですが
他のスレッドからその関数を呼ぼうとするとエラーが起こるのです・・・
もしかしたら関数自体にシグナルをかけなければいけないのかなぁと思って
今書いているプログラムで
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変数さえ使わなければ何個起動しても排他も何も考えなくてよいぞ
同じ関数は実行するのは、スレッドが違えばコンテキストスイッチが起きて、レジスタとかスタックが入れ替わるから大丈夫
メンバ変数と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 のクリティカルセクションとイベントオブジェクトでおなかいっぱい、というかこれだけでたいがいうまくいくのでは?
もう 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+V352デフォルトの名無しさん
2015/05/29(金) 22:45:34.32ID:gXnjRwZ6 Win8.1 Cygwin64bit g++のpthreadなんですが、マルチコアCPUなのに性能改善しません。
なにか特別なコンパイルオプションがあるとか
特別なライブラリをリンクしなければいけないとかあるのでしょうか。
-lpthreadはつけてます。
なにか特別なコンパイルオプションがあるとか
特別なライブラリをリンクしなければいけないとかあるのでしょうか。
-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秒以上掛かりますが、
之をスレッドを起こしても意味無い?
・・・
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とメモリの方がディスクよりも遙かに速い)
純粋にバイナリデータとしてファイルをメモリに丸ごと読み込むのであればスレッド分ける意味ない(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鹿児島県
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が処理している間に次に読むべきディスク上の物理セクタが通り過ぎてしまうからシーケンシャルなセクタ処理でなくインターリーブした順序付けのセクタ使うって奴
インターリーブってCPUが遅い時代の話だろ?
セクタリードの後でCPUが処理している間に次に読むべきディスク上の物理セクタが通り過ぎてしまうからシーケンシャルなセクタ処理でなくインターリーブした順序付けのセクタ使うって奴
366デフォルトの名無しさん
2015/10/10(土) 23:10:25.42ID:bMLX+QzX 趣味プログラムでInterlockedCompareExchange
で値が交換できた時だけそのスレッドが処理を進められるような感じで
作りこんでいるんだけど、何かこれだと問題ある?
一般的にはクリティカルセクションを使った方がいい的な話を聞くんだけど
sizeof(CRITICAL_SECTION)がチョット大きすぎるので使うのをためらってしまう
で値が交換できた時だけそのスレッドが処理を進められるような感じで
作りこんでいるんだけど、何かこれだと問題ある?
一般的にはクリティカルセクションを使った方がいい的な話を聞くんだけど
sizeof(CRITICAL_SECTION)がチョット大きすぎるので使うのをためらってしまう
367デフォルトの名無しさん
2015/10/11(日) 01:12:22.19ID:DeMvW0Ba368デフォルトの名無しさん
2015/10/11(日) 01:16:20.15ID:DeMvW0Ba369デフォルトの名無しさん
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+oF2h374デフォルトの名無しさん
2016/03/08(火) 01:40:29.32ID:YkHc2UTm レース状態のことやね
375デフォルトの名無しさん
2016/03/20(日) 12:54:59.05ID:upopZnIF 同じcondition_variableでブロックしているスレッドが複数ある場合に、
notify_oneをしたら、どのスレッドが起床するのだろうか。
notify_oneをしたら、どのスレッドが起床するのだろうか。
376デフォルトの名無しさん
2016/03/29(火) 08:51:54.17ID:/c8bAcK4 サッカーブッシュ日本代表日程ぷあたん(しゅっちょうまいくろ教育長交代)春文執行40代売上差額シュガーチョコ
https://www.youtube.com/watch?v=NDq1QoJY0nY宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題
マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス
FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了
校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント
高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート
https://www.youtube.com/watch?v=NDq1QoJY0nY宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ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
_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?
排他制御していない状態で複数のスレッドが同じ変数に同時にアクセスすることそのものは問題ないよね?
読み取り最中に書き換えたり、書き換え最中に読み取った場合にデータが破壊されるというだけの話だよね?
例えば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ビットの半分だけ違う値になる、
ということはありえない。そういう心配をしてるなら大丈夫
>>マルチスレッドにおける変数の排他処理についてなんだけど、
>>排他制御していない状態で複数のスレッドが同じ変数に同時にアクセスすることそのものは問題ないよね?
変数というだけでは分からない。
構造体とか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通りのどちらかになることは保証されるよね?
できるだけ高速化したいから、できるだけ排他処理はしたくない。
大丈夫かどうかというのは、
排他制御が行われていない変数へのアクセスそのものが原因となってソフトウェアがクラッシュしたり、
OSやハードウェアレベルの問題は起きたりしないよね?って意味
C言語で下位1bitしか使わない排他処理が行われてない変数があり、その1bitをif文で判定して処理を2通りに分ける場合、
必ずその2通りのどちらかになることは保証されるよね?
できるだけ高速化したいから、できるだけ排他処理はしたくない。
383デフォルトの名無しさん
2016/12/09(金) 18:10:37.82ID:uxrmDz9Z やっぱりアホか
384デフォルトの名無しさん
2016/12/09(金) 18:37:52.31ID:R3c5DqP6385デフォルトの名無しさん
2016/12/09(金) 21:27:34.75ID:WzSsU1Dc386デフォルトの名無しさん
2016/12/10(土) 23:59:30.12ID:mx8/lQPw すいません質問します。
Matlobで、
例えば5000×5000の行列をAとして
その10×10の区分行列をBとします。
Aの対角線上にあるBだけを取り出して他が0行列の行列を作るにはどうすればいいですか?
また、各Bの対角要素だけ取り出すにはどうすればいいですか?
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を代入する
・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 でもやってみたのですが、直列の方が速いです。
上記の環境ではマルチスレッドで効率化を図るには、何か設定が必要なのでしょうか。
ざっくりした質問ですがヒントになるようなことでも教えて下さい。
【言語】 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するのもスイッチするのも時間が掛かるので、
それらがペイしないと意味がない。
ちゃんと作っていて遅いのなら、キャッシュの競合の可能性があるかも
プログラムを見ないと分からない。
マカーじゃないから見ても分からないかもしれないけど。
大前提として、マルチスレッド化して速くなるようなジョブなんだよね?
スレッドを作るのも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; }
};
下記のコードを試したのですが、直列実行した方が速かったです。
これってそもそも並列化しても速くならない類の処理なのでしょうか?
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 )
関数 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);
offsetof(type, member-designator);
400デフォルトの名無しさん
2018/05/23(水) 21:43:17.32ID:Au5e7VGg 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
4DXJZ
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
4DXJZ
401デフォルトの名無しさん
2018/07/05(木) 00:17:03.60ID:RfoszcD2 Z1B
402デフォルトの名無しさん
2018/10/28(日) 23:21:28.63ID:bVjvgsxo403デフォルトの名無しさん
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スレッドまでなら、
高速化が起きる気がする。
そういう問題でなくて?
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はそんなに賢くないので。
色々複雑。
あ、あと
>400MBのデータを一括でコピーする処理を並列化してもノイマンボトルネックに
>掛かってスケールしないと思う
これだけど、以外に高速化されたりするかもしれない。
実際の CPUはそんなに賢くないので。
色々複雑。
407デフォルトの名無しさん
2019/01/27(日) 00:13:20.29ID:UeSsBKpf チップセットや DDR DRAM、バス・アービタなどの事はそんなに詳しくは無いけど、
「ブロック転送命令」みたいなのがあるかも知れない。そして、
CPU で、rep movsd などが実行されるとき、CPU は、自分で転送せずに
チップセットと連携してバス・アービタにその命令を発行し、すぐに次の命令
から実行を再開したりするかも知れない。昔で言う「バスマスタ転送」や「DMA転送」
に似たようなやり方。
なんでそう思うかというと、主記憶(外部メモリ)はCPUのクロック速度にはついていけない
はずなのに、以外に CPU のブロック転送が速い気がするから。
確認は取ってない。
「ブロック転送命令」みたいなのがあるかも知れない。そして、
CPU で、rep movsd などが実行されるとき、CPU は、自分で転送せずに
チップセットと連携してバス・アービタにその命令を発行し、すぐに次の命令
から実行を再開したりするかも知れない。昔で言う「バスマスタ転送」や「DMA転送」
に似たようなやり方。
なんでそう思うかというと、主記憶(外部メモリ)はCPUのクロック速度にはついていけない
はずなのに、以外に CPU のブロック転送が速い気がするから。
確認は取ってない。
408デフォルトの名無しさん
2019/01/27(日) 19:38:20.44ID:0CxMXTRb 返信ありがとう。
DMA転送できるものをコンパイラが探知できるか疑問に思ってました。CPU機能としてのブロック転送は関係ありそうですね。
ワード単位処理は確かにやってそうです。
マルチコアでスケールできる処理って割りと限られてますね(汗。
DMA転送できるものをコンパイラが探知できるか疑問に思ってました。CPU機能としてのブロック転送は関係ありそうですね。
ワード単位処理は確かにやってそうです。
マルチコアでスケールできる処理って割りと限られてますね(汗。
409デフォルトの名無しさん
2019/01/27(日) 19:45:29.93ID:upukWAKG バイナリ見れば済む話だよね^^
410デフォルトの名無しさん
2019/01/27(日) 19:45:46.51ID:UADZfhGv >>408
[追加]
DMAでなくとも、CPU自身が命令実行の処理とは独立して主記憶の間で
転送をする仕組みは当然あるので、ブロック転送の予約みたいな事で、
実際の転送処理が終わってなくても次の命令に進んだりするようなことは
あるかも知れないと想像してみる。
無いかもしれないけど。
[追加]
DMAでなくとも、CPU自身が命令実行の処理とは独立して主記憶の間で
転送をする仕組みは当然あるので、ブロック転送の予約みたいな事で、
実際の転送処理が終わってなくても次の命令に進んだりするようなことは
あるかも知れないと想像してみる。
無いかもしれないけど。
411デフォルトの名無しさん
2019/01/27(日) 19:48:31.17ID:UeSsBKpf >>409
いや。例えば、バイナリだと、
rep movsd
の1命令がそこにあるだけで、命令表を見ればブロック転送をする命令とあって、
擬似命令レベルでの処理までは書かれているが、バス転送レベルでそれをCPUが
どう処理してるかまでは分からない。
いや。例えば、バイナリだと、
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 の処理が終わるまで待機すれば良い。
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++など言語で実装できないでしょうか。
勘でやる他ないのでしょうか。
キャッシュのデータをメモリに書き込む動作をC++など言語で実装できないでしょうか。
勘でやる他ないのでしょうか。
415デフォルトの名無しさん
2019/01/31(木) 13:32:39.64ID:OGxiQZdZ >>414
自分で inline アセンブラか、単体のアセンブラを使えば出来る。
ただし、VC++ の inline アセンブラを使う場合は、結局、どんなコード
になるか分からない部分があるので、アセンブリ・ソース出力オプションか、
または、IDE の逆アセンブラでコードを確認する必要があると思うが。
ただ、個人的には、それ以上に、IA32のキャッシュ制御命令は、大量の
文書を読んで理解するのが大変に思うけれど。
自分で inline アセンブラか、単体のアセンブラを使えば出来る。
ただし、VC++ の inline アセンブラを使う場合は、結局、どんなコード
になるか分からない部分があるので、アセンブリ・ソース出力オプションか、
または、IDE の逆アセンブラでコードを確認する必要があると思うが。
ただ、個人的には、それ以上に、IA32のキャッシュ制御命令は、大量の
文書を読んで理解するのが大変に思うけれど。
416デフォルトの名無しさん
2019/04/02(火) 09:07:07.70ID:KCTAV4Kj417デフォルトの名無しさん
2019/04/02(火) 12:22:49.68ID:ZD2r0ERn 確か、もっと古いCPUでも、
mfence や、movxxxxx 系の命令でも色々出来たと思う。
物凄い複雑なので、ちゃんと理解してないけど。
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)
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:jdncuoqE421デフォルトの名無しさん
2019/07/19(金) 03:55:47.52ID:J62Ms8NU 課題
422デフォルトの名無しさん
2019/07/19(金) 20:31:45.43ID:XW48gDPw 2コア4スレッドってCPUだと
4スレッド同時に動くの?
4スレッド同時に動くの?
423デフォルトの名無しさん
2019/07/19(金) 21:19:16.26ID:oxWniFkv 動くよ
ただしハードウェアリソース的に余裕がある部分(SSEとか)位しかあまり効果がないな
マルチスレッドではやや分がある
というのはコンテキストスイッチの負荷が純粋に1/2になる
レジスタの内容をメモリに退避する回数が1/2になればそりゃ軽くなるよね
整数演算ではあまり期待しない方がいい
ただしハードウェアリソース的に余裕がある部分(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スレッド同時に動くのか不思議だったから。
CPUコアひとつなのにどうやって2スレッド同時に動くのか不思議だったから。
426デフォルトの名無しさん
2019/07/20(土) 10:22:32.66ID:aCn5nh8Q 実際に鯖用CPUではHT切ってあるもんな
かえってパフォーマンスが低下するとかで
最近の例の脆弱性との絡みもある
その代わり最初からコアいっぱい積んでいる
かえってパフォーマンスが低下するとかで
最近の例の脆弱性との絡みもある
その代わり最初からコアいっぱい積んでいる
427デフォルトの名無しさん
2019/07/20(土) 10:23:03.60ID:aCn5nh8Q ×切ってある
◯BIOSで自分で切っている
◯BIOSで自分で切っている
428デフォルトの名無しさん
2019/07/20(土) 12:15:42.11ID:D7d7RY7Z on/offをアプリ側で指定できないし、
性能が線形に上がらない時点でHTを考慮した設計は面倒すぎる。
性能が線形に上がらない時点で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 させてメッセージやりとりすれば良さそうなんだけど。
やりたいことがちょっと特殊かもね。
せっかく10コアとかあるんだから、各コアに別々のプログラムを走らせておいて
同期しながら処理とかしたいんだけどどうするのがいいかよく分からない。
fork させてメッセージやりとりすれば良さそうなんだけど。
やりたいことがちょっと特殊かもね。
433デフォルトの名無しさん
2019/07/21(日) 01:03:16.42ID:oN+9KGia 質問の低レベル化が甚だしい。アセンブラを勉強して基礎固めを。
434デフォルトの名無しさん
2019/07/21(日) 01:24:11.69ID:YuxLcsPo OpenMPみたいなのを手動でやるって話かな
マルチコアだとメモリ帯域がボトルネックになりやすいから
巨大な行列計算は少し粒度を荒くしたMPIの方が強いよね
マルチコアだとメモリ帯域がボトルネックになりやすいから
巨大な行列計算は少し粒度を荒くしたMPIの方が強いよね
435デフォルトの名無しさん
2019/07/21(日) 01:57:36.05ID:dcJVZcgj 10コアとかいってるからマルチプロセッサというよりメニーコア活用術?
436デフォルトの名無しさん
2019/07/21(日) 08:19:29.20ID:gryZIvyQ437デフォルトの名無しさん
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() がスレッドハンドルを返すよりも前にスレッド関数内の
処理が実行される(完了する)ことはありえますか?
この関数の説明を見ると、「_beginthreadex() のコールに成功すると、スレッドのために
タイムスライスが割り当てられたか否かによらず、スレッドはアクティブ(non-signal)になる」
とあったのですが、_beginthread() がスレッドハンドルを返すよりも前にスレッド関数内の
処理が実行される(完了する)ことはありえますか?
440デフォルトの名無しさん
2021/03/05(金) 15:45:04.28ID:0Dz+Yobc >成功した場合、これらの各関数は、新しく作成されたスレッドへのハンドルを返します。ただし、新しく作成されたスレッドが短時間で終了した場合、 _beginthread は有効なハンドルを返さない可能性があります。 (「解説」の説明を参照してください)。
>_Beginthread よりも _beginthreadex を使用する方が安全です。 _Beginthread によって生成されるスレッドが短時間で終了した場合は、 _beginthread の呼び出し元に返されるハンドルが無効であるか、別のスレッドを指している可能性があります。 ただし、 _beginthreadex によって返されるハンドルは _beginthreadex の呼び出し元によって閉じられる必要があるため、 _beginthreadex がエラーを返さなかった場合は、有効なハンドルであることが保証されます。
ハンドルが有効であることは保証されているけど
実行順についての言及はないし、
そもそも別スレッドなら、どちらが先に行われるかについては何の保証もないと考えるべきじゃないのかな
「APIから戻る」のだって実行権がなければ後回しにされる可能性はあるんだから
>_Beginthread よりも _beginthreadex を使用する方が安全です。 _Beginthread によって生成されるスレッドが短時間で終了した場合は、 _beginthread の呼び出し元に返されるハンドルが無効であるか、別のスレッドを指している可能性があります。 ただし、 _beginthreadex によって返されるハンドルは _beginthreadex の呼び出し元によって閉じられる必要があるため、 _beginthreadex がエラーを返さなかった場合は、有効なハンドルであることが保証されます。
ハンドルが有効であることは保証されているけど
実行順についての言及はないし、
そもそも別スレッドなら、どちらが先に行われるかについては何の保証もないと考えるべきじゃないのかな
「APIから戻る」のだって実行権がなければ後回しにされる可能性はあるんだから
441sage
2021/03/06(土) 05:17:04.33ID:0GCeIGT3442デフォルトの名無しさん
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
糸をつむぐ( 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:EhvYdlEg449デフォルトの名無しさん
2022/05/26(木) 16:41:59.49ID:kr4vk/7I450デフォルトの名無しさん
2023/10/18(水) 18:12:44.04ID:k+tvnK8M >>432
とりあえず、メインスレッド1個にサブスレッドを9個用意し、基本的な管理はメインスレッド管理。
イベントハンドルは9×2個用意する。
サブスレッドはイベント処理とWaitForSingleObjectで待たせておいて、メインスレッドから情報を送って
SetEventでイベントを動かす。メインスレッドはサブスレッド9個からSetEventでイベントが返らない限り
イベントとWaitForSingleObjectを駆使して止めておく。
とりあえず、メインスレッド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を駆使して止めておく。
とりあえず、メインスレッド1個にサブスレッドを9個用意し、基本的な管理はメインスレッド管理。
イベントハンドルは9×2個用意する。
サブスレッドはイベント処理とWaitForSingleObjectで待たせておいて、メインスレッドから情報を送って
SetEventでイベントを動かす。メインスレッドはサブスレッド9個からSetEventでイベントが返らない限り
イベントとWaitForSingleObjectを駆使して止めておく。
452デフォルトの名無しさん
2023/10/18(水) 18:16:53.34ID:k+tvnK8M453デフォルトの名無しさん
2023/10/19(木) 01:25:35.07ID:8UDFhheE >>365
REID 1 みたいな例があるから必ずしも昔の技術というわけではないな。
REID 1 みたいな例があるから必ずしも昔の技術というわけではないな。
454デフォルトの名無しさん
2023/10/19(木) 01:28:22.25ID:8UDFhheE >>16
あれって、OSの機能だから気にしなくても良いというのでは駄目か?
あれって、OSの機能だから気にしなくても良いというのでは駄目か?
455デフォルトの名無しさん
2025/05/12(月) 13:23:26.42ID:Zw0HuL6G 1000msecでコンテキストスイッチ何回発生するんだこれ
456デフォルトの名無しさん
2025/05/12(月) 13:41:45.50ID:zCv6/zTu ここで multi process な質問は反則?
457デフォルトの名無しさん
2025/05/13(火) 15:19:11.88ID:lpqGnCjc 高級言語しか使えない身で話すけど
Pythonで超重量級のCPU処理とOpenAIに対するリクエストで数秒I/Oに飛ぶ処理の二つがそれぞれタスクに分解されてるとき、
前者のタスクが処理完了すると後者のタスクで数個~数十個くらいタスクが新規作成されて、(c, c, c, i, i, i, i, i, i, c, i, i,...)
内部どうなってるのか知らんけどI/OでGIL解放されても後続のタスクが何個も後者のタスクだから前者のタスクがくそ遅延するってあり得る?
両者のタスクを別々のプロセスに切り分けたら前者のタスクが遅延するとかいうことなくなったんだけどさ
Pythonで超重量級のCPU処理とOpenAIに対するリクエストで数秒I/Oに飛ぶ処理の二つがそれぞれタスクに分解されてるとき、
前者のタスクが処理完了すると後者のタスクで数個~数十個くらいタスクが新規作成されて、(c, c, c, i, i, i, i, i, i, c, i, i,...)
内部どうなってるのか知らんけどI/OでGIL解放されても後続のタスクが何個も後者のタスクだから前者のタスクがくそ遅延するってあり得る?
両者のタスクを別々のプロセスに切り分けたら前者のタスクが遅延するとかいうことなくなったんだけどさ
458デフォルトの名無しさん
2025/05/14(水) 17:07:33.93ID:uDIzjmjF そういう場合
同じ状況になる再現コードを貼りましょう
同じ状況になる再現コードを貼りましょう
459デフォルトの名無しさん
2025/05/14(水) 17:34:26.40ID:Ga6mti+e 5次方程式に新公式を発見:ルートを超える新理論
2025.05.14 17:05:56 WEDNESDAY
https://nazology.kusuguru.co.jp/archives/177496
>>オーストラリアのニューサウスウェールズ大学(UNSW)で行われた研究
プログらまーも覚えるとよい
125年越しに解決したかもしれない「ヒルベルトの第6問題」とは?
2025年05月10日 15時00分
https://gigazine.net/news/20250510-hilberts-6th-problem-solved/
2025.05.14 17:05:56 WEDNESDAY
https://nazology.kusuguru.co.jp/archives/177496
>>オーストラリアのニューサウスウェールズ大学(UNSW)で行われた研究
プログらまーも覚えるとよい
125年越しに解決したかもしれない「ヒルベルトの第6問題」とは?
2025年05月10日 15時00分
https://gigazine.net/news/20250510-hilberts-6th-problem-solved/
レスを投稿する
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★3 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 【大分】佐賀関で大規模火災、170棟以上が延焼中 70代男性1人と連絡取れず [ぐれ★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 「クマはなるべく山に返す努力を」「クマと戦争は間違っている」動物保護活動家の主張 棲み分けと学習放獣でクマ被害なくなるのか?★7 [ぐれ★]
- とらせん IPあり
- 巨専】
- こいせん 全レス転載禁止
- 侍ジャパンシリーズ2025「日本vs韓国」その12
- 【DAZN】ワールドカップ欧州予選総合 ★5
- 【ATP】テニス総合実況スレ2025 Part 211【WTA】
- アンケート調査で「高市発言は問題なし」 93.5%wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 【悲報】大分市佐賀関の火事、20軒→170軒に延焼🔥 [481941988]
- 自閉症が「んなっしょい」と連呼するお🏡
- 日本人の海外旅行したきのマナーよくなったのはいつから
- 【二次】この中で種付けセックスしたい女の子早い者勝ちwwwwwwwwwwwwwwwwwwwwwwwwwwww
- へそグリグリ
