トップページ > プログラム > 2019年12月14日 > T/HCOnVQ

書き込み順位&時間帯一覧

6 位/155 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000412000000007



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C++相談室 part146

書き込みレス一覧

C++相談室 part146
868 :デフォルトの名無しさん[sage]:2019/12/14(土) 13:34:08.27 ID:T/HCOnVQ
>>772
>x86系CPUで普通のメモリへの読み書きで順番が入れ替わる可能性があるのは write => read だけ
別に。
コアAの読み書きをコアA自身が見る分にはそうかもわからんが
コアAの読み書きを異なるコアBから見たらwrite同士やread同士でも順番が入れ替わり得る
(アウトオブオーダー実行の影響で

安全に動かすには適切にメモリバリアで順序化する必要がある
C++相談室 part146
870 :デフォルトの名無しさん[sage]:2019/12/14(土) 13:37:51.96 ID:T/HCOnVQ
といってもロックレス何ちゃらぐらいの制御であればInterlockedCompareExchange()で済むから
スレッド間の通信なら普通メモリバリアとか直接触る必要は無いが
C++相談室 part146
871 :デフォルトの名無しさん[sage]:2019/12/14(土) 13:38:24.93 ID:T/HCOnVQ
>>869
迷信
C++相談室 part146
873 :デフォルトの名無しさん[sage]:2019/12/14(土) 13:39:40.59 ID:T/HCOnVQ
リードキューやコマンドキューにコマンドが入るのはアウトオブオーダープロセスの事後であるため
そのような保証は無い
C++相談室 part146
878 :デフォルトの名無しさん[sage]:2019/12/14(土) 14:57:30.67 ID:T/HCOnVQ
確かにリンク先のインテルのマニュアルの
>8.2.3.2 Neither Loads Nor Stores Are Reordered with Like Operations
>Example 8-2. Stores Are Not Reordered with Older Loads

>Initially x = y = 0r1 = 1 and r2 = 1 is not allowed
と書いてあって>>875と同じことが書いてあるが疑わしい
マニュアルが間違っているのではないか、

ちな
>8byteのデータはアドレスが8の倍数のときにアライメントされている。
から安全に読み書きできるというのはi486みたいな古いプロセッサーだとかえって危険らしい
>8.1.1 Guaranteed Atomic Operations
を見たらワカル、
C++相談室 part146
879 :デフォルトの名無しさん[sage]:2019/12/14(土) 15:04:35.33 ID:T/HCOnVQ
つか上のインテルのマニュアルには「投機的実行時中のメモリアクセスではメモリアクセス例外は発生しない」
旨が2箇所ぐらいに書かれているが、
ということはつまりアセンブリコード上A→BまたはA→Cというメモリアクセスが条件によってどちら片方だけ実行されることを意図したコードであっても
A→B→Cというメモリアクセス順に成り得ることを意味し、他コアからもそう見えてしまうはずだが、
これをメモリアクセス順がreorderされていないうちに入れてしまうのはどうなのか、、、
マニュアル執筆者の国語の再教育が必要なのではないか
C++相談室 part146
882 :デフォルトの名無しさん[sage]:2019/12/14(土) 15:20:09.00 ID:T/HCOnVQ
そりゃー間違ったマニュアルにしたがって実装したら間違った実装になり得る(キリ

ていうかアウトオブオーダー実行の影響がマルチコアCPUにおいても透過的だと認めやっても良いが、
>>879の投機的実行の件はどうなんじゃ?
あるコアが投機的実行中に他のコアをストップさせるのでは何のための投機的実行かわからん…


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。