2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

マルチスレッドプログラミング相談室 その9

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

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

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

OS・言語・環境は問わないが、それゆえ明記すべし。
テンプレ
【OS】
【言語】
【実行環境】
【その他特記する事項】

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

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

確認は取ってない。

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

マルチコアでスケールできる処理って割りと限られてますね(汗。

408 :デフォルトの名無しさん:2019/01/27(日) 19:45:29.93 ID:upukWAKG.net
バイナリ見れば済む話だよね^^

409 :デフォルトの名無しさん:2019/01/27(日) 19:45:46.51 ID:UADZfhGv.net
>>407
[追加]

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

無いかもしれないけど。

410 :デフォルトの名無しさん:2019/01/27(日) 19:48:31.17 ID:UeSsBKpf.net
>>408
いや。例えば、バイナリだと、
rep movsd
の1命令がそこにあるだけで、命令表を見ればブロック転送をする命令とあって、
擬似命令レベルでの処理までは書かれているが、バス転送レベルでそれをCPUが
どう処理してるかまでは分からない。

411 :デフォルトの名無しさん:2019/01/28(月) 03:22:00.62 ID:3CrwaDYk.net
double 1GBをコピー元のデータを加工してからコピーする場合は、どうやってもスケールしないんですかね、この話の感じからして。
書き込みタイミングが結果論でずらせるので、並列化で多少は見込みアルのかな。ーー自分で実験した方が良いですね。

412 :デフォルトの名無しさん:2019/01/28(月) 11:26:24.99 ID:jKaiFfBH.net
>>411
1. 「加工」が単純に N 個に分割して処理できるものなら、N core の CPU の場合は、
  大体 N 倍高速化できる可能性がある。

2. 加工の処理を大体同じ時間がかかる N 回のステージに分割できる場合、1つずつの
  ステージを別々のCore で処理すれば、上手くすれば、大体 N 倍高速化できる。
  ステージ 1 の出力をステージ2の入力にして、ステージ2の出力をステージ3の
  入力にして・・・、という具合にするが、N が十分大きければ、高速化できる。
  CPU 内部のスーパー・パイプラインも同じ考え方で、1つの命令をなるべく
  たくさんのステージに分割することで、1つずつのステージの処理自体は軽く
  されている。処理が軽ければロジックの入力から出力結果が出るまでの時間が
  短く出来るのでクロック数を上げることができる。これと同じことが、ソフトウェア
  の世界でも成り立つ。。

3. コピーの処理が完全に終わるのを待つ必要が無いなら、コピーを Sub Core で行えば、
  Main Core は、待ち時間 0 で次の命令の実行に移れる。コピー後のデータを読み取る
  必要が出てきた場所で初めて、同期オブジェクトの WaitForSingleObject()、
  SetEvent() などで Main Core が Sub Core の処理が終わるまで待機すれば良い。

413 :デフォルトの名無しさん:2019/01/31(木) 02:15:04.55 ID:1/qzJ5j1.net
キャッシュにデータを書き込むけどメモリに書き込まない、とか
キャッシュのデータをメモリに書き込む動作をC++など言語で実装できないでしょうか。
勘でやる他ないのでしょうか。

414 :デフォルトの名無しさん:2019/01/31(木) 13:32:39.64 ID:OGxiQZdZ.net
>>413
自分で inline アセンブラか、単体のアセンブラを使えば出来る。
ただし、VC++ の inline アセンブラを使う場合は、結局、どんなコード
になるか分からない部分があるので、アセンブリ・ソース出力オプションか、
または、IDE の逆アセンブラでコードを確認する必要があると思うが。

ただ、個人的には、それ以上に、IA32のキャッシュ制御命令は、大量の
文書を読んで理解するのが大変に思うけれど。

415 :デフォルトの名無しさん:2019/04/02(火) 09:07:07.70 ID:KCTAV4Kj.net
>>413
intelの大体i5以上の新しい石だと
_xbegin _xend 等の1次キャッシュから下位のメモリへの
ストアタイミングをコントロールできるTSX命令群がそれっぽいかと思う

416 :デフォルトの名無しさん:2019/04/02(火) 12:22:49.68 ID:ZD2r0ERn.net
確か、もっと古いCPUでも、
mfence や、movxxxxx 系の命令でも色々出来たと思う。

物凄い複雑なので、ちゃんと理解してないけど。

417 :デフォルトの名無しさん:2019/04/02(火) 12:29:24.16 ID:LpV8NoZ4.net
以下のようなものも関係している。複雑すぎて理解してない。

https://xem.github.io/minix86/manual/intel-x86-and-64-manual-vol3/o_fe12b1e2a880e0ce-429.html

・WBINVD, PREFETCHh, CLFLUSH, CLFLUSHOPT,
・非一時的な移動命令(MOVNTI, MOVNTQ, MOVNTDQ, MOVNTPS,
 MOVNTPD, INVD)
・第3レベルのキャッシュ無効化フラグ(IA32_MISC_ENABLE MSRのビット6)

418 :デフォルトの名無しさん:2019/07/19(金) 00:38:16.38 ID:eyVpHwMv.net
質問:
ある資源を生成破棄するメーカースレッドがひとつと、その資源を使うユーザースレッドが複数ある。
メーカースレッドとユーザースレッドは排他的に資源にアクセスするが、ユーザースレッド同士は排他的でない。
どのように排他処理を実装すればよいか。

419 :デフォルトの名無しさん:2019/07/19(金) 02:31:14.72 ID:jdncuoqE.net
>>418
Producer-Consumerパターンか
間にChannel挟めばちゃんと動くよ

420 :デフォルトの名無しさん:2019/07/19(金) 03:55:47.52 ID:J62Ms8NU.net
課題

421 :デフォルトの名無しさん:2019/07/19(金) 20:31:45.43 ID:XW48gDPw.net
2コア4スレッドってCPUだと
4スレッド同時に動くの?

422 :デフォルトの名無しさん:2019/07/19(金) 21:19:16.26 ID:oxWniFkv.net
動くよ
ただしハードウェアリソース的に余裕がある部分(SSEとか)位しかあまり効果がないな
マルチスレッドではやや分がある
というのはコンテキストスイッチの負荷が純粋に1/2になる
レジスタの内容をメモリに退避する回数が1/2になればそりゃ軽くなるよね
整数演算ではあまり期待しない方がいい

423 :デフォルトの名無しさん:2019/07/19(金) 22:46:03.30 ID:tF13LP95.net
同時に動いてないなら排他制御しなくていいみたいな勘違いしてそうな質問だ。

424 :デフォルトの名無しさん:2019/07/19(金) 23:08:15.01 ID:JGHPeX3b.net
そこまで深くは考えてなかったんだけど。
CPUコアひとつなのにどうやって2スレッド同時に動くのか不思議だったから。

425 :デフォルトの名無しさん:2019/07/20(土) 10:22:32.66 ID:aCn5nh8Q.net
実際に鯖用CPUではHT切ってあるもんな
かえってパフォーマンスが低下するとかで
最近の例の脆弱性との絡みもある
その代わり最初からコアいっぱい積んでいる

426 :デフォルトの名無しさん:2019/07/20(土) 10:23:03.60 ID:aCn5nh8Q.net
×切ってある
◯BIOSで自分で切っている

427 :デフォルトの名無しさん:2019/07/20(土) 12:15:42.11 ID:D7d7RY7Z.net
on/offをアプリ側で指定できないし、
性能が線形に上がらない時点でHTを考慮した設計は面倒すぎる。

428 :デフォルトの名無しさん:2019/07/20(土) 13:01:11.01 ID:aCn5nh8Q.net
マルチスレッド・デザインパターンの本にあった例だけど
ワーカースレッド(スレッドプール)を実装せよ
なお言語は自由とする

429 :デフォルトの名無しさん:2019/07/20(土) 22:48:42.36 ID:xFVhhGJz.net
マルチスレッドの解説本はいくつもあるけど
マルチプロセッサのプログラミングって参考書ないのかね。

430 :デフォルトの名無しさん:2019/07/21(日) 00:29:38.70 ID:9qa3Jnjy.net
マルチスレッドの解説本でカバー出来ないくらいのマルチプロセッサのプログラミングだと
かなりマニアックというかプロセッサ固有の問題の割合が大きくなると思うので
そういう方面で探すしかないのではないか
それだけに特化した専門書は無いかもね

431 :デフォルトの名無しさん:2019/07/21(日) 00:46:58.94 ID:gryZIvyQ.net
行列演算を並列処理とかそういう粒度の細かな並列化の話ばっかりで。
せっかく10コアとかあるんだから、各コアに別々のプログラムを走らせておいて
同期しながら処理とかしたいんだけどどうするのがいいかよく分からない。
fork させてメッセージやりとりすれば良さそうなんだけど。
やりたいことがちょっと特殊かもね。

432 :デフォルトの名無しさん:2019/07/21(日) 01:03:16.42 ID:oN+9KGia.net
質問の低レベル化が甚だしい。アセンブラを勉強して基礎固めを。

433 :デフォルトの名無しさん:2019/07/21(日) 01:24:11.69 ID:YuxLcsPo.net
OpenMPみたいなのを手動でやるって話かな
マルチコアだとメモリ帯域がボトルネックになりやすいから
巨大な行列計算は少し粒度を荒くしたMPIの方が強いよね

434 :デフォルトの名無しさん:2019/07/21(日) 01:57:36.05 ID:dcJVZcgj.net
10コアとかいってるからマルチプロセッサというよりメニーコア活用術?

435 :デフォルトの名無しさん:2019/07/21(日) 08:19:29.20 ID:gryZIvyQ.net
>>432
むしろアセンブラのほうが分かりやすいんだけど。

各コアにPCセットして起動すればいいの?
プロセッサの仕様書読んでみるわ。

436 :デフォルトの名無しさん:2019/07/21(日) 08:23:47.17 ID:nevBE1rB.net
並列処理じゃなくて並行処理で探せば

437 :デフォルトの名無しさん:2019/12/05(木) 19:00:58.65 ID:sV2dE7Px.net
マルチスレッドの排他処理で詰まってスレ検索して来てみたけどこのスレは高尚過ぎるなw
初心者スレにでも行こう

438 :デフォルトの名無しさん:2021/03/04(木) 23:27:05.69 ID:320wEDvY.net
_beginthreadex() を使ったマルチスレッドプログラムについて質問です。
この関数の説明を見ると、「_beginthreadex() のコールに成功すると、スレッドのために
タイムスライスが割り当てられたか否かによらず、スレッドはアクティブ(non-signal)になる」
とあったのですが、_beginthread() がスレッドハンドルを返すよりも前にスレッド関数内の
処理が実行される(完了する)ことはありえますか?

439 :デフォルトの名無しさん:2021/03/05(金) 15:45:04.28 ID:0Dz+Yobc.net
>成功した場合、これらの各関数は、新しく作成されたスレッドへのハンドルを返します。ただし、新しく作成されたスレッドが短時間で終了した場合、 _beginthread は有効なハンドルを返さない可能性があります。 (「解説」の説明を参照してください)。

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


ハンドルが有効であることは保証されているけど
実行順についての言及はないし、
そもそも別スレッドなら、どちらが先に行われるかについては何の保証もないと考えるべきじゃないのかな
「APIから戻る」のだって実行権がなければ後回しにされる可能性はあるんだから

440 :sage:2021/03/06(土) 05:17:04.33 ID:0GCeIGT3.net
>>439
ご返信ありがとうございます。概ね理解できました。
勉強不足で、マルチスレッドの仕組みについて誤解していたようです。

441 :デフォルトの名無しさん:2021/03/06(土) 11:08:41.13 ID:pd/Aiz5V.net
ちなみにCentOSはスレッドのコアが指定できるよ。

442 :デフォルトの名無しさん:2021/03/06(土) 11:30:24.47 ID:UzpsIFsk.net
macOSだとコア指定できない。

443 :デフォルトの名無しさん:2021/03/06(土) 13:08:47.51 ID:VGFn/kw3.net
あわしろ氏によると、Macは既にオワコンなので、WSLを使うと良いらしい。

444 :デフォルトの名無しさん:2021/03/25(木) 15:15:49.52 ID:LuSagST9.net
針に糸を通す( thread a needle
糸をつむぐ( spin thread [yarn]
糸が切れた( The thread broke.
琴の糸を締める( tighten a string of a koto
糸をかき鳴らす( strum the strings

445 :デフォルトの名無しさん:2021/04/03(土) 09:59:34.29 ID:CHs8071g.net
このスレ来年で10年か
スレ推奨図書とかないの?

446 :デフォルトの名無しさん:2022/04/14(木) 16:49:21.50 ID:wwxSZsaE.net
マルチスレッド処理の花形といえばハードなリアルタイムスレッドとバックグラウンドスレッドの間のデータのやり取りだと思ってるんだが
スレの過疎っぷりを見るに、殆どの人にとって必要のないものだったんだな

447 :デフォルトの名無しさん:2022/05/26(木) 01:42:01.15 ID:EhvYdlEg.net
>>446
MS-DOS のデバイスドライバにでも痕跡が残っていたような‥
どうするつもりだったんだろう?

448 :デフォルトの名無しさん:2022/05/26(木) 16:41:59.49 ID:kr4vk/7I.net
>>446
ハードな略が動いている間はバック略を動かさないから大して考えることは無い
DOSの頃と同じだな

449 :デフォルトの名無しさん:2023/05/02(火) 09:17:00.95 ID:Q2sUG9pn5
世界最惡の殺人組織公明党強盗殺人の首魁齊藤鉄夫らテ口リストに乗っ取られた國土破壞省に天下り賄賂癒着しなか゛ら莫大な温室効果カ゛スに
騷音にコ口ナにとまき散らして氣侯変動させて日本と゛ころか世界中で土砂崩れに洪水.暴風、猛暑、干は゛つ.大雪.森林火災にと災害連発
させて大量殺戮して,エネ価格に物価にと暴騰させて、住民の生活を破壞して私腹を肥やしてるクソ公務員個人に徹底報復しよう!東京都港区
赤坂2丁目17‐1Οがクソ議員宿舎なのは有名た゛が「省庁別宿舎一覧表』なと゛て゛検索すれば全國の公務員宿舎の位置が容易に確認て゛きるので
拡声器や,騒音ハ゛イクて゛乗り付けてフ゛ァンブアンやりに出向いてやろう!もちろん力による━方的な現状変更によって都心まて゛数珠つなぎて゛
クソ航空機飛は゛して閑静な住宅地た゛ろうと航空騒音まみれにして生活に仕事にと公然と妨害してるこいつら利権害虫のことた゛から騷音なんて
どうということはないと考えてるんた゛ろうし、航空騒音に比へ゛れば屁みたいな騷音しか出せないた゛ろうか゛、遠慮なく大騒音まき散らしに出向い
てやろう!図書館やらて゛騒音まき散らして税金泥棒利権壞滅させるのも正義!政府という傘で好き放題やってる公務員には個人攻撃か゛有効な

創価学会員は,何百萬人も殺傷して損害を与えて私腹を肥やし続けて逮捕者まで出てる世界最惡の殺人腐敗組織公明党を
池田センセ─か゛ロをきけて容認するとか本気て゛思ってるとしたら侮辱にもほと゛か゛あるぞ!
hтTрs://i,imgur,cοm/hnli1ga.jpeg

450 :デフォルトの名無しさん:2023/07/13(木) 19:06:47.26 ID:VPZGKcXRK
おい天下り組織シ゛ャクソ、HЗ(笑)ミサヰルで地球汚したた゛けた゛ったんた゛から三菱重エと連帯して国民から強盜した2O○О億はよ返せや
大企業従業員だの安定した地位に安住している利権寄生虫や税金泥棒か゛成果なんか出せるわけがないことの分かりやすい証明だったわけだか゛
どこそ゛の成功國家みたく失敗と処刑を深く結ひ゛付けろとまて゛は言わんが税金返金させることくらいはしないと永遠にポンコツ国家のままだろ
つか,もはやロケットなんさ゛民間のみて゛完結て゛きる時代なんた゛し.このハ゛力丸出しの税金泥棒ポンコツ無能利権団体とっとと解体しろやカス
国か゛やるべきことは公平性を大原則とした最低限の生活保障のみて゛充分なんた゛から,ヘ゛ーシックヰンカ厶以外の給付を全て廃止するのか゛正解
特に世界最惡の腐敗組織自民公明に乗っ取られた日本て゛税金泥棒1Ο0%の無能公務員に何らかの判断をさせるほど國か゛壊れてゆくのが現実
最低限の公共事業は直接民主制による合議をもとに完全成功報酬と完全競爭入札でのみ実施可能にするように憲法に書き込めやクソ腐敗政府
BIやれば食うに困らないんた゛から研究員枠た゛のアホな利権に拘ることなく自由に創造性発揮て゛きるし,これが自由主義国の國力形成の基本

創価学會員は.何百萬人も殺傷して損害を与えて私腹を肥やし続けて逮捕者まで出てる世界最悪の殺人腐敗組織公明党を
池田センセーか゛ロをきけて容認するとか本気て゛思ってるとしたら侮辱にもほと゛があるぞ!
hтTps://i,imgur、cоm/hnli1ga.jpeg

451 :デフォルトの名無しさん:2023/10/18(水) 18:12:44.04 ID:k+tvnK8M.net
>>431
 とりあえず、メインスレッド1個にサブスレッドを9個用意し、基本的な管理はメインスレッド管理。
イベントハンドルは9×2個用意する。

 サブスレッドはイベント処理とWaitForSingleObjectで待たせておいて、メインスレッドから情報を送って
SetEventでイベントを動かす。メインスレッドはサブスレッド9個からSetEventでイベントが返らない限り
イベントとWaitForSingleObjectを駆使して止めておく。

452 :デフォルトの名無しさん:2023/10/18(水) 18:13:06.20 ID:k+tvnK8M.net
>>431
 とりあえず、メインスレッド1個にサブスレッドを9個用意し、基本的な管理はメインスレッド管理。
イベントハンドルは9×2個用意する。

 サブスレッドはイベント処理とWaitForSingleObjectで待たせておいて、メインスレッドから情報を送って
SetEventでイベントを動かす。メインスレッドはサブスレッド9個からSetEventでイベントが返らない限り
イベントとWaitForSingleObjectを駆使して止めておく。

453 :デフォルトの名無しさん:2023/10/18(水) 18:16:53.34 ID:k+tvnK8M.net
>>451-452
あ”、二重投稿になったか。

えっと、ちょっと補完。
サブスレッドの処理についてはループして待たせておく。終わったら終了を知らせるイベントを発生させる。

454 :デフォルトの名無しさん:2023/10/19(木) 01:25:35.07 ID:8UDFhheE.net
>>365
REID 1 みたいな例があるから必ずしも昔の技術というわけではないな。

455 :デフォルトの名無しさん:2023/10/19(木) 01:28:22.25 ID:8UDFhheE.net
>>16
 あれって、OSの機能だから気にしなくても良いというのでは駄目か?

116 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★