マルチスレッドプログラミング相談室 その9 (459レス)
上下前次1-新
1(1): 2012/06/15(金)01:31 AAS
マルチスレッドプログラミングについて語るスレ
■前スレ
マルチスレッドプログラミング相談室 その8
2chスレ:tech
■過去スレ
その1 2chスレ:tech
その2 2chスレ:tech
その3 2chスレ:tech
その4 2chスレ:tech
その5 2chスレ:tech
省8
333: 2014/11/12(水)15:18 ID:ghkKScBM(1) AAS
同期オブジェクトを保持している変数を上書きしていそうな気がするんだが
334: 2014/11/12(水)16:32 ID:yNtQ/r84(1) AAS
いろいろ分かってないだけだろう
335: 2014/11/13(木)06:29 ID:w/Cn+ODk(1) AAS
ライブラリがマルチスレッドに対応してないだけかと
336: 2014/11/13(木)06:35 ID:4ACzZkWI(1) AAS
/MT
337: 2014/11/13(木)13:44 ID:t6y7WFqt(1) AAS
C#ならエラーメッセージやスタックトレースが出てるだろ
338: 2014/11/15(土)11:02 ID:JwZZHuNb(1) AAS
>>329
同じ関数は実行するのは、スレッドが違えばコンテキストスイッチが起きて、レジスタとかスタックが入れ替わるから大丈夫
メンバ変数とstatic変数さえ使わなければ何個起動しても排他も何も考えなくてよいぞ
339(1): 2014/11/16(日)00:17 ID:lWtIBSfv(1) AAS
同じ変数に複数のスレッドがアクセスするならクリティカルセクションが楽だ
340: 2014/11/16(日)19:55 ID:9ZsvKJox(1) AAS
linuxですがスレッドで同じファイルに書き込む場合、競合することってありますかね?
341: 2014/11/16(日)20:11 ID:1qsvk//V(1) AAS
勿論。
342: 2014/11/16(日)21:20 ID:4XTrCB2a(1) AAS
論外
343: 2014/11/16(日)21:40 ID:Kyr5+wjo(1) AAS
>>339
もう win32 のクリティカルセクションとイベントオブジェクトでおなかいっぱい、というかこれだけでたいがいうまくいくのでは?
344: 2014/11/30(日)17:47 ID:H8djdLBQ(1) AAS
複数のスレッドがひとつのミューテックスのアンロックを待っていた場合、
つぎにどのスレッドがミューテックスを取得するかはランダムですか
345: 2014/11/30(日)18:09 ID:ddtepLmv(1) AAS
はい
待っていなかった別のスレッドがちょうどいいところに来てミューテックスを取得していくこともあります
346: 2014/12/01(月)00:39 ID:Az7+Eliy(1) AAS
いいえ
待っていなかった別のスレッドがちょうどいいところに来てミューテックスを取得していくこともあります
347: 2014/12/08(月)19:13 ID:PHJZbN+V(1/3) AAS
スレッドとミューテックスだけ覚えたけど
なにを作ったらいいのかわからんたい
348: 2014/12/08(月)22:37 ID:PHJZbN+V(2/3) AAS
チャット作ることにしました
349(2): 2014/12/08(月)22:57 ID:x3KHTevM(1) AAS
consumerとproducerみたいのがいいんじゃないのかなと思ったけど、
チャット作ることにしたのね
がんばってください
350(1): 2014/12/08(月)23:08 ID:PHJZbN+V(3/3) AAS
>>349
チャットで詰まったら気分変えてConsumer-Producerにも挑戦してみます
あざす
351: 350 2014/12/09(火)00:23 ID:MJarMgeM(1) AAS
>>349
いや、ありがとうございます
352: 2015/05/29(金)22:45 ID:gXnjRwZ6(1) AAS
Win8.1 Cygwin64bit g++のpthreadなんですが、マルチコアCPUなのに性能改善しません。
なにか特別なコンパイルオプションがあるとか
特別なライブラリをリンクしなければいけないとかあるのでしょうか。
-lpthreadはつけてます。
353: 2015/05/30(土)20:09 ID:WwgHsNSJ(1) AAS
エスパー能力はありません
354: 2015/05/30(土)20:21 ID:h4Yx63EK(1) AAS
そこをなんとかスーパーエスパーでお願いします
355: 2015/05/30(土)21:18 ID:iD4l02SZ(1) AAS
誠意を見せてください
356: 2015/06/15(月)23:17 ID:SZnUF3Ky(1) AAS
DISKへのアクセスって並列にしたって意味ないですか?
・・・
FileA読み込み(::ReadFile) 10秒
FileB読み込み(::ReadFile) 20秒
・・・
で30秒以上掛かりますが、
之をスレッドを起こしても意味無い?
357: 2015/06/16(火)00:49 ID:s9cfeU7N(1) AAS
よくわかってないけどDISKの特性によるのかなぁとかいってみる。
358: 2015/06/16(火)01:06 ID:ILaOeTTR(1/2) AAS
どういった特性ならどうなるのですか?
359: 2015/06/16(火)01:31 ID:ZNZkvIJW(1) AAS
読み込みながら処理をしてみたいにな状態でない限りスレッド分けてファイル読むと遅くなるよ(デバイスが別であればまた違うのだが)
純粋にバイナリデータとしてファイルをメモリに丸ごと読み込むのであればスレッド分ける意味ない(CPUとメモリの方がディスクよりも遙かに速い)
360(1): 2015/06/16(火)01:39 ID:ILaOeTTR(2/2) AAS
遅くなる理由はなんですか?
361: 2015/06/16(火)09:26 ID:gU9w5dQ4(1) AAS
俺様の質問に答えろとさ
362: 2015/06/16(火)22:30 ID:45Me4wJl(1) AAS
まともに答えるとまた暴れだすだろ
363: 2015/06/20(土)17:07 ID:2GjEDXn2(1) AAS
>>360
FileAとFileBが同一のディスクに存在するとして、FileAがFileBが以下の
内容である場合、論理的に近いデータ(青森県と岩手県)は論理的に遠いデータ
(宮城県と長崎県)よりも物理的にディスクの近い位置に存在する可能性が
高いので、02→03→…→07→40→41→…→46という順番で読み込むほうが
02→40→03→41→…07→46という順番で読み込むよりも速く完了する可能性が
あります。
[FileA]
02青森県
03岩手県
省12
364(1): 2015/08/25(火)15:16 ID:f9VpmzI5(1) AAS
いまどきのディスクはインターリーブなんか考慮しても意味無いぞ
365: 2015/08/25(火)23:23 ID:SuXh7n4E(1) AAS
>>364
インターリーブってCPUが遅い時代の話だろ?
セクタリードの後でCPUが処理している間に次に読むべきディスク上の物理セクタが通り過ぎてしまうからシーケンシャルなセクタ処理でなくインターリーブした順序付けのセクタ使うって奴
366(1): 2015/10/10(土)23:10 ID:bMLX+QzX(1) AAS
趣味プログラムでInterlockedCompareExchange
で値が交換できた時だけそのスレッドが処理を進められるような感じで
作りこんでいるんだけど、何かこれだと問題ある?
一般的にはクリティカルセクションを使った方がいい的な話を聞くんだけど
sizeof(CRITICAL_SECTION)がチョット大きすぎるので使うのをためらってしまう
367(1): 2015/10/11(日)01:12 ID:DeMvW0Ba(1/2) AAS
>>366
レースする可能性があるくらいじゃね?
まあ、ほとんど問題ないと思うけど。
368: 2015/10/11(日)01:16 ID:DeMvW0Ba(2/2) AAS
>>367
間違えた。
レースじゃなくてスタベーションだった。
369: 2015/10/11(日)10:38 ID:P9PvwsgL(1) AAS
マ
370(1): 2016/02/06(土)07:43 ID:DtUiRvEm(1/2) AAS
int iで++iにミューテックスが必要ってことはiを同時に2つのスレッドが足しても2増えるだけで必要ないと思うんですけど?1しか増えないってこともあるんですか?
371: 2016/02/06(土)08:26 ID:DtUiRvEm(2/2) AAS
CPUによってアトムが違うから必要ってことですねわかりました。
372: 2016/02/06(土)08:57 ID:AVvIsuem(1) AAS
御茶ノ水の博士の設計
373: 2016/03/07(月)00:30 ID:jKz+oF2h(1) AAS
>>370
Aスレッド:iから1を読み込んで++して2を代入
Bスレッド:iから1を読み込んで++して2を代入
答えは1増える
374: 2016/03/08(火)01:40 ID:YkHc2UTm(1) AAS
レース状態のことやね
375(1): 2016/03/20(日)12:54 ID:upopZnIF(1) AAS
同じcondition_variableでブロックしているスレッドが複数ある場合に、
notify_oneをしたら、どのスレッドが起床するのだろうか。
376: 2016/03/29(火)08:51 ID:/c8bAcK4(1) AAS
サッカーブッシュ日本代表日程ぷあたん(しゅっちょうまいくろ教育長交代)春文執行40代売上差額シュガーチョコ
動画リンク[YouTube]宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題
マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス
FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了
校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント
省1
377: 2016/05/20(金)22:39 ID:/6R1fTEV(1) AAS
>>375
リファレンス読め
378: 2016/05/23(月)02:01 ID:xOdUGJqd(1) AAS
CAS命令でロックしている部分を
_xbegin _xend やら xxx_HLEAcquireで代用すればCAS命令分のWaitをチャラにできるかと思ったんだけど
結果微妙に遅くなっただけだった
使い方間違っているのかなTSX
379(1): 2016/12/09(金)07:26 ID:WzSsU1Dc(1/3) AAS
マルチスレッドにおける変数の排他処理についてなんだけど、
排他制御していない状態で複数のスレッドが同じ変数に同時にアクセスすることそのものは問題ないよね?
読み取り最中に書き換えたり、書き換え最中に読み取った場合にデータが破壊されるというだけの話だよね?
例えば2byteの変数があって、スレッドAが1byte目を読み込んだ時点でスレッドBが2byte目を書き換え、
そこでスレッドAが2byte目を読み取った場合に、
データが上位1byteと下位1byteで別のデータを読み取ったことになっておかしくなるってことだよね?
ということは何らかのフラグで下位1bitのみを利用するような変数であれば、
上記のような状況は起きないから排他処理しなくても大丈夫って認識でOK?
380: 2016/12/09(金)09:38 ID:uxrmDz9Z(1/2) AAS
馬鹿乙
381(1): 2016/12/09(金)13:52 ID:GFY666CI(1) AAS
>>379
>>マルチスレッドにおける変数の排他処理についてなんだけど、
>>排他制御していない状態で複数のスレッドが同じ変数に同時にアクセスすることそのものは問題ないよね?
変数というだけでは分からない。
構造体とかC++の変数とかはそちらから見ても明らかに問題のはず。
>>ということは何らかのフラグで下位1bitのみを利用するような変数であれば、
>>上記のような状況は起きないから排他処理しなくても大丈夫って認識でOK?
1bit(あるいは1バイト、1ワード)がアトミックにアクセスできる
ことはシステムによって保証されていることが多い。
だから、その1bitの読み書きは出来る。
省4
382(1): 2016/12/09(金)16:50 ID:WzSsU1Dc(2/3) AAS
ありがとう!
大丈夫かどうかというのは、
排他制御が行われていない変数へのアクセスそのものが原因となってソフトウェアがクラッシュしたり、
OSやハードウェアレベルの問題は起きたりしないよね?って意味
C言語で下位1bitしか使わない排他処理が行われてない変数があり、その1bitをif文で判定して処理を2通りに分ける場合、
必ずその2通りのどちらかになることは保証されるよね?
できるだけ高速化したいから、できるだけ排他処理はしたくない。
383: 2016/12/09(金)18:10 ID:uxrmDz9Z(2/2) AAS
やっぱりアホか
384(1): 2016/12/09(金)18:37 ID:R3c5DqP6(1) AAS
>>382
馬鹿が書くと機械的に壊れることもあります
ソレノイドが焼損とか日常茶飯事
385: 2016/12/09(金)21:27 ID:WzSsU1Dc(3/3) AAS
>>384
どのパーツのソレノイド?
説明してくれ。
パソコンは自作やら修理やらよく頼まれ続けてきてるから専門的な話OKだ。
386: 2016/12/10(土)23:59 ID:mx8/lQPw(1) AAS
すいません質問します。
Matlobで、
例えば5000×5000の行列をAとして
その10×10の区分行列をBとします。
Aの対角線上にあるBだけを取り出して他が0行列の行列を作るにはどうすればいいですか?
また、各Bの対角要素だけ取り出すにはどうすればいいですか?
BEアイコン:k1za.png
387(1): 2016/12/11(日)00:44 ID:pm6ghExK(1) AAS
・とりあえず全てのパラメータから0を1つずつ取り除く
・Aは500×500の行列
・Bはたった1つの要素で、インデックスは i = j
それが500個ある
・つまり、「i==jであれば取り出す」それ以外は0にする。
・では、それを10倍したら?「 i ÷ 10 == j ÷ 10 」であれば、
取り出す(但し余りは全て切り捨てる)それ以外は全て 0
・但し i jの上限はインデックスが0からとして、4999までとする。
・俺はMatlabは使ったことが無いので具体的な実装は知らない。
・その次
省7
388: 2016/12/11(日)09:12 ID:nmNJ+GHK(1) AAS
アホ
389: 2016/12/11(日)10:53 ID:PFNTM+nw(1) AAS
>>387
ありがとうございます。やってみます。
390: 2016/12/17(土)10:53 ID:WxRoohcq(1) AAS
>>381
ウソ乙
391(2): 2017/03/29(水)21:36 ID:QetAZaUg(1) AAS
【OS】OSX 10.8.5、Core i5
【言語】 C, C++
【実行環境】 XCode5.1, pthread
pthread を使って for ループを分割して実行するプログラムを書いたのですが、直列処理の方が速いです。
tbbやOpenMP でもやってみたのですが、直列の方が速いです。
上記の環境ではマルチスレッドで効率化を図るには、何か設定が必要なのでしょうか。
ざっくりした質問ですがヒントになるようなことでも教えて下さい。
392: 2017/03/29(水)22:31 ID:urajtArt(1) AAS
マカーか
393: 2017/03/29(水)23:09 ID:TE60yoif(1) AAS
>>391
プログラムを見ないと分からない。
マカーじゃないから見ても分からないかもしれないけど。
大前提として、マルチスレッド化して速くなるようなジョブなんだよね?
スレッドを作るのもjoinするのもスイッチするのも時間が掛かるので、
それらがペイしないと意味がない。
ちゃんと作っていて遅いのなら、キャッシュの競合の可能性があるかも
394(1): 2017/04/02(日)18:18 ID:mBDn/7kD(1/3) AAS
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 ) { // この処理がアホみたいなのはわざとです
省16
395: 2017/04/02(日)18:29 ID:mBDn/7kD(2/3) AAS
書き忘れ >>391 のマカーです。
396: 2017/04/02(日)18:45 ID:mBDn/7kD(3/3) AAS
度々すみません、タイポありました。(多分本筋と関係ないですが)
関数 bool isPrime( int n ) のループ。
誤 for ( int j = 3; j < n; ++j )
正 for ( int j = 2; j < n; ++j )
397: [age] 2017/05/03(水)16:23 ID:E3YCeKkn(1) AAS
RelativisticProgrammingを日本語で解説してるとこ、ないかな?
398: 2017/05/04(木)03:11 ID:N/fwOcUx(1) AAS
++j
399: 2017/09/17(日)19:09 ID:iyMogwhx(1) AAS
#include <stddef.h>
offsetof(type, member-designator);
400(1): 2018/05/23(水)21:43 ID:Au5e7VGg(1) AAS
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
4DXJZ
401: 2018/07/05(木)00:17 ID:RfoszcD2(1) AAS
Z1B
402: 2018/10/28(日)23:21 ID:bVjvgsxo(1) AAS
>>394
超亀レスだしテキトーだけど、counterがシングルトンなら
countのインクリメントでシリアライズされるんじゃね?
403: 2019/01/13(日)12:43 ID:P4nmFhbL(1) AAS
Intelのハイパースレッドでスケールするか否かのアルゴやデータ構造のパターンとか、評価基準をまとめた本なりサイトなり御存じでしたら教えてください。
404(2): 2019/01/26(土)17:42 ID:stTjLhtD(1) AAS
400MBのデータを一括でコピーする処理を並列化してもノイマンボトルネックに掛かってスケールしないと思うんですが、boolの配列(newしたもの)でやるとある程度スケールします。
何でですか?
405: 2019/01/26(土)18:19 ID:yUYodqfD(1) AAS
>>404
bool の配列が、例えば、8個の bool 値をまとめて 1バイトとして格納している場合で、
for ( i =0; i < 100000; i++ ) {
dst[i] = src[i];
}
のように書いて、かつ、コンパイラがこのループを「そこまでの」最適化はしなかった場合、
32BIT 環境の場合なら、32回のループで 1 DWORD 分の実メモリやキャッシュ・メモリへの
転送が生じるだけになるかも知れない。その他のメモリアクセスは、基本、code の
fetch だけになり、全てCPU内部のキャッシュ・メモリに乗ってしまう。
だから、マルチスレッドでこのループを分割して行えば、32スレッドまでなら、
省2
406: 2019/01/26(土)18:25 ID:VVr2JTND(1) AAS
>>404
あ、あと
>400MBのデータを一括でコピーする処理を並列化してもノイマンボトルネックに
>掛かってスケールしないと思う
これだけど、以外に高速化されたりするかもしれない。
実際の CPUはそんなに賢くないので。
色々複雑。
407: 2019/01/27(日)00:13 ID:UeSsBKpf(1/2) AAS
チップセットや DDR DRAM、バス・アービタなどの事はそんなに詳しくは無いけど、
「ブロック転送命令」みたいなのがあるかも知れない。そして、
CPU で、rep movsd などが実行されるとき、CPU は、自分で転送せずに
チップセットと連携してバス・アービタにその命令を発行し、すぐに次の命令
から実行を再開したりするかも知れない。昔で言う「バスマスタ転送」や「DMA転送」
に似たようなやり方。
なんでそう思うかというと、主記憶(外部メモリ)はCPUのクロック速度にはついていけない
はずなのに、以外に CPU のブロック転送が速い気がするから。
確認は取ってない。
408(1): 2019/01/27(日)19:38 ID:0CxMXTRb(1) AAS
返信ありがとう。
DMA転送できるものをコンパイラが探知できるか疑問に思ってました。CPU機能としてのブロック転送は関係ありそうですね。
ワード単位処理は確かにやってそうです。
マルチコアでスケールできる処理って割りと限られてますね(汗。
409(1): 2019/01/27(日)19:45 ID:upukWAKG(1) AAS
バイナリ見れば済む話だよね^^
410: 2019/01/27(日)19:45 ID:UADZfhGv(1) AAS
>>408
[追加]
DMAでなくとも、CPU自身が命令実行の処理とは独立して主記憶の間で
転送をする仕組みは当然あるので、ブロック転送の予約みたいな事で、
実際の転送処理が終わってなくても次の命令に進んだりするようなことは
あるかも知れないと想像してみる。
無いかもしれないけど。
411: 2019/01/27(日)19:48 ID:UeSsBKpf(2/2) AAS
>>409
いや。例えば、バイナリだと、
rep movsd
の1命令がそこにあるだけで、命令表を見ればブロック転送をする命令とあって、
擬似命令レベルでの処理までは書かれているが、バス転送レベルでそれをCPUが
どう処理してるかまでは分からない。
412(1): 2019/01/28(月)03:22 ID:3CrwaDYk(1) AAS
double 1GBをコピー元のデータを加工してからコピーする場合は、どうやってもスケールしないんですかね、この話の感じからして。
書き込みタイミングが結果論でずらせるので、並列化で多少は見込みアルのかな。ーー自分で実験した方が良いですね。
413: 2019/01/28(月)11:26 ID:jKaiFfBH(1) AAS
>>412
1. 「加工」が単純に N 個に分割して処理できるものなら、N core の CPU の場合は、
大体 N 倍高速化できる可能性がある。
2. 加工の処理を大体同じ時間がかかる N 回のステージに分割できる場合、1つずつの
ステージを別々のCore で処理すれば、上手くすれば、大体 N 倍高速化できる。
ステージ 1 の出力をステージ2の入力にして、ステージ2の出力をステージ3の
入力にして・・・、という具合にするが、N が十分大きければ、高速化できる。
CPU 内部のスーパー・パイプラインも同じ考え方で、1つの命令をなるべく
たくさんのステージに分割することで、1つずつのステージの処理自体は軽く
されている。処理が軽ければロジックの入力から出力結果が出るまでの時間が
省6
414(2): 2019/01/31(木)02:15 ID:1/qzJ5j1(1) AAS
キャッシュにデータを書き込むけどメモリに書き込まない、とか
キャッシュのデータをメモリに書き込む動作をC++など言語で実装できないでしょうか。
勘でやる他ないのでしょうか。
415: 2019/01/31(木)13:32 ID:OGxiQZdZ(1) AAS
>>414
自分で inline アセンブラか、単体のアセンブラを使えば出来る。
ただし、VC++ の inline アセンブラを使う場合は、結局、どんなコード
になるか分からない部分があるので、アセンブリ・ソース出力オプションか、
または、IDE の逆アセンブラでコードを確認する必要があると思うが。
ただ、個人的には、それ以上に、IA32のキャッシュ制御命令は、大量の
文書を読んで理解するのが大変に思うけれど。
416: 2019/04/02(火)09:07 ID:KCTAV4Kj(1) AAS
>>414
intelの大体i5以上の新しい石だと
_xbegin _xend 等の1次キャッシュから下位のメモリへの
ストアタイミングをコントロールできるTSX命令群がそれっぽいかと思う
417: 2019/04/02(火)12:22 ID:ZD2r0ERn(1) AAS
確か、もっと古いCPUでも、
mfence や、movxxxxx 系の命令でも色々出来たと思う。
物凄い複雑なので、ちゃんと理解してないけど。
418: 2019/04/02(火)12:29 ID:LpV8NoZ4(1) AAS
以下のようなものも関係している。複雑すぎて理解してない。
外部リンク[html]:xem.github.io
・WBINVD, PREFETCHh, CLFLUSH, CLFLUSHOPT,
・非一時的な移動命令(MOVNTI, MOVNTQ, MOVNTDQ, MOVNTPS,
MOVNTPD, INVD)
・第3レベルのキャッシュ無効化フラグ(IA32_MISC_ENABLE MSRのビット6)
419(1): 2019/07/19(金)00:38 ID:eyVpHwMv(1) AAS
質問:
ある資源を生成破棄するメーカースレッドがひとつと、その資源を使うユーザースレッドが複数ある。
メーカースレッドとユーザースレッドは排他的に資源にアクセスするが、ユーザースレッド同士は排他的でない。
どのように排他処理を実装すればよいか。
420: 2019/07/19(金)02:31 ID:jdncuoqE(1) AAS
>>419
Producer-Consumerパターンか
間にChannel挟めばちゃんと動くよ
421: 2019/07/19(金)03:55 ID:J62Ms8NU(1) AAS
課題
422: 2019/07/19(金)20:31 ID:XW48gDPw(1) AAS
2コア4スレッドってCPUだと
4スレッド同時に動くの?
423: 2019/07/19(金)21:19 ID:oxWniFkv(1) AAS
動くよ
ただしハードウェアリソース的に余裕がある部分(SSEとか)位しかあまり効果がないな
マルチスレッドではやや分がある
というのはコンテキストスイッチの負荷が純粋に1/2になる
レジスタの内容をメモリに退避する回数が1/2になればそりゃ軽くなるよね
整数演算ではあまり期待しない方がいい
424: 2019/07/19(金)22:46 ID:tF13LP95(1) AAS
同時に動いてないなら排他制御しなくていいみたいな勘違いしてそうな質問だ。
425: 2019/07/19(金)23:08 ID:JGHPeX3b(1) AAS
そこまで深くは考えてなかったんだけど。
CPUコアひとつなのにどうやって2スレッド同時に動くのか不思議だったから。
426: 2019/07/20(土)10:22 ID:aCn5nh8Q(1/3) AAS
実際に鯖用CPUではHT切ってあるもんな
かえってパフォーマンスが低下するとかで
最近の例の脆弱性との絡みもある
その代わり最初からコアいっぱい積んでいる
427: 2019/07/20(土)10:23 ID:aCn5nh8Q(2/3) AAS
×切ってある
◯BIOSで自分で切っている
428: 2019/07/20(土)12:15 ID:D7d7RY7Z(1) AAS
on/offをアプリ側で指定できないし、
性能が線形に上がらない時点でHTを考慮した設計は面倒すぎる。
429: 2019/07/20(土)13:01 ID:aCn5nh8Q(3/3) AAS
マルチスレッド・デザインパターンの本にあった例だけど
ワーカースレッド(スレッドプール)を実装せよ
なお言語は自由とする
430: 2019/07/20(土)22:48 ID:xFVhhGJz(1) AAS
マルチスレッドの解説本はいくつもあるけど
マルチプロセッサのプログラミングって参考書ないのかね。
431: 2019/07/21(日)00:29 ID:9qa3Jnjy(1) AAS
マルチスレッドの解説本でカバー出来ないくらいのマルチプロセッサのプログラミングだと
かなりマニアックというかプロセッサ固有の問題の割合が大きくなると思うので
そういう方面で探すしかないのではないか
それだけに特化した専門書は無いかもね
432(2): 2019/07/21(日)00:46 ID:gryZIvyQ(1/2) AAS
行列演算を並列処理とかそういう粒度の細かな並列化の話ばっかりで。
せっかく10コアとかあるんだから、各コアに別々のプログラムを走らせておいて
同期しながら処理とかしたいんだけどどうするのがいいかよく分からない。
fork させてメッセージやりとりすれば良さそうなんだけど。
やりたいことがちょっと特殊かもね。
433(1): 2019/07/21(日)01:03 ID:oN+9KGia(1) AAS
質問の低レベル化が甚だしい。アセンブラを勉強して基礎固めを。
434: 2019/07/21(日)01:24 ID:YuxLcsPo(1) AAS
OpenMPみたいなのを手動でやるって話かな
マルチコアだとメモリ帯域がボトルネックになりやすいから
巨大な行列計算は少し粒度を荒くしたMPIの方が強いよね
435: 2019/07/21(日)01:57 ID:dcJVZcgj(1) AAS
10コアとかいってるからマルチプロセッサというよりメニーコア活用術?
436: 2019/07/21(日)08:19 ID:gryZIvyQ(2/2) AAS
>>433
むしろアセンブラのほうが分かりやすいんだけど。
各コアにPCセットして起動すればいいの?
プロセッサの仕様書読んでみるわ。
437: 2019/07/21(日)08:23 ID:nevBE1rB(1) AAS
並列処理じゃなくて並行処理で探せば
438: 2019/12/05(木)19:00 ID:sV2dE7Px(1) AAS
マルチスレッドの排他処理で詰まってスレ検索して来てみたけどこのスレは高尚過ぎるなw
初心者スレにでも行こう
439: 2021/03/04(木)23:27 ID:320wEDvY(1) AAS
_beginthreadex() を使ったマルチスレッドプログラムについて質問です。
この関数の説明を見ると、「_beginthreadex() のコールに成功すると、スレッドのために
タイムスライスが割り当てられたか否かによらず、スレッドはアクティブ(non-signal)になる」
とあったのですが、_beginthread() がスレッドハンドルを返すよりも前にスレッド関数内の
処理が実行される(完了する)ことはありえますか?
440(1): 2021/03/05(金)15:45 ID:0Dz+Yobc(1) AAS
>成功した場合、これらの各関数は、新しく作成されたスレッドへのハンドルを返します。ただし、新しく作成されたスレッドが短時間で終了した場合、 _beginthread は有効なハンドルを返さない可能性があります。 (「解説」の説明を参照してください)。
>_Beginthread よりも _beginthreadex を使用する方が安全です。 _Beginthread によって生成されるスレッドが短時間で終了した場合は、 _beginthread の呼び出し元に返されるハンドルが無効であるか、別のスレッドを指している可能性があります。 ただし、 _beginthreadex によって返されるハンドルは _beginthreadex の呼び出し元によって閉じられる必要があるため、 _beginthreadex がエラーを返さなかった場合は、有効なハンドルであることが保証されます。
ハンドルが有効であることは保証されているけど
実行順についての言及はないし、
そもそも別スレッドなら、どちらが先に行われるかについては何の保証もないと考えるべきじゃないのかな
「APIから戻る」のだって実行権がなければ後回しにされる可能性はあるんだから
441: sage 2021/03/06(土)05:17 ID:0GCeIGT3(1) AAS
>>440
ご返信ありがとうございます。概ね理解できました。
勉強不足で、マルチスレッドの仕組みについて誤解していたようです。
442: 2021/03/06(土)11:08 ID:pd/Aiz5V(1) AAS
ちなみにCentOSはスレッドのコアが指定できるよ。
443: 2021/03/06(土)11:30 ID:UzpsIFsk(1) AAS
macOSだとコア指定できない。
444: 2021/03/06(土)13:08 ID:VGFn/kw3(1) AAS
あわしろ氏によると、Macは既にオワコンなので、WSLを使うと良いらしい。
445: 2021/03/25(木)15:15 ID:LuSagST9(1) AAS
針に糸を通す( thread a needle
糸をつむぐ( spin thread [yarn]
糸が切れた( The thread broke.
琴の糸を締める( tighten a string of a koto
糸をかき鳴らす( strum the strings
446: 2021/04/03(土)09:59 ID:CHs8071g(1) AAS
このスレ来年で10年か
スレ推奨図書とかないの?
447(2): 2022/04/14(木)16:49 ID:wwxSZsaE(1) AAS
マルチスレッド処理の花形といえばハードなリアルタイムスレッドとバックグラウンドスレッドの間のデータのやり取りだと思ってるんだが
スレの過疎っぷりを見るに、殆どの人にとって必要のないものだったんだな
448: 2022/05/26(木)01:42 ID:EhvYdlEg(1) AAS
>>447
MS-DOS のデバイスドライバにでも痕跡が残っていたような‥
どうするつもりだったんだろう?
449: 2022/05/26(木)16:41 ID:kr4vk/7I(1) AAS
>>447
ハードな略が動いている間はバック略を動かさないから大して考えることは無い
DOSの頃と同じだな
450(1): 2023/10/18(水)18:12 ID:k+tvnK8M(1/3) AAS
>>432
とりあえず、メインスレッド1個にサブスレッドを9個用意し、基本的な管理はメインスレッド管理。
イベントハンドルは9×2個用意する。
サブスレッドはイベント処理とWaitForSingleObjectで待たせておいて、メインスレッドから情報を送って
SetEventでイベントを動かす。メインスレッドはサブスレッド9個からSetEventでイベントが返らない限り
イベントとWaitForSingleObjectを駆使して止めておく。
451(1): 2023/10/18(水)18:13 ID:k+tvnK8M(2/3) AAS
>>432
とりあえず、メインスレッド1個にサブスレッドを9個用意し、基本的な管理はメインスレッド管理。
イベントハンドルは9×2個用意する。
サブスレッドはイベント処理とWaitForSingleObjectで待たせておいて、メインスレッドから情報を送って
SetEventでイベントを動かす。メインスレッドはサブスレッド9個からSetEventでイベントが返らない限り
イベントとWaitForSingleObjectを駆使して止めておく。
452: 2023/10/18(水)18:16 ID:k+tvnK8M(3/3) AAS
>>450-451
あ”、二重投稿になったか。
えっと、ちょっと補完。
サブスレッドの処理についてはループして待たせておく。終わったら終了を知らせるイベントを発生させる。
453: 2023/10/19(木)01:25 ID:8UDFhheE(1/2) AAS
>>365
REID 1 みたいな例があるから必ずしも昔の技術というわけではないな。
454: 2023/10/19(木)01:28 ID:8UDFhheE(2/2) AAS
>>16
あれって、OSの機能だから気にしなくても良いというのでは駄目か?
455: [sag] 05/12(月)13:23 ID:Zw0HuL6G(1) AAS
1000msecでコンテキストスイッチ何回発生するんだこれ
456: 05/12(月)13:41 ID:zCv6/zTu(1) AAS
ここで multi process な質問は反則?
457: 05/13(火)15:19 ID:lpqGnCjc(1) AAS
高級言語しか使えない身で話すけど
Pythonで超重量級のCPU処理とOpenAIに対するリクエストで数秒I/Oに飛ぶ処理の二つがそれぞれタスクに分解されてるとき、
前者のタスクが処理完了すると後者のタスクで数個~数十個くらいタスクが新規作成されて、(c, c, c, i, i, i, i, i, i, c, i, i,...)
内部どうなってるのか知らんけどI/OでGIL解放されても後続のタスクが何個も後者のタスクだから前者のタスクがくそ遅延するってあり得る?
両者のタスクを別々のプロセスに切り分けたら前者のタスクが遅延するとかいうことなくなったんだけどさ
458: [sag] 05/14(水)17:07 ID:uDIzjmjF(1) AAS
そういう場合
同じ状況になる再現コードを貼りましょう
459: 05/14(水)17:34 ID:Ga6mti+e(1) AAS
5次方程式に新公式を発見:ルートを超える新理論
2025.05.14 17:05:56 WEDNESDAY
外部リンク:nazology.kusuguru.co.jp
>>オーストラリアのニューサウスウェールズ大学(UNSW)で行われた研究
プログらまーも覚えるとよい
125年越しに解決したかもしれない「ヒルベルトの第6問題」とは?
2025年05月10日 15時00分
外部リンク:gigazine.net
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.922s*