TSX 続き

abort した時のフラグを見てみる。 immintrin と -mrtm を使うのがラクそうだったので、インラインアセンブリをやめてみました。まぁ等価な関数を書くのも簡単そうではあります。

https://github.com/shinh/test/blob/master/tsx_abort.cc

実行結果は

xabort_explict: 1 42
xabort_capacity_sleep: 0
xabort_capacity_loop: 0
xabort_capacity_copy4096: 8 0
xabort_capacity_copy32768: 8 0
xabort_recursive0: 20 0
xabort_recursive7: 20 0
xabort_recursive8: 20 0
xabort_conflict0: 6
xabort_conflict30: 6
xabort_conflict40: 6
xabort_conflict63: 6

など。結構よく変わりますが。マニュアルとかしっかり読んでませんが、それぞれのステータスのざっくりと大雑把な感覚を

  • _XABORT_EXPLICIT: _xabort したら来る。 _xabort ってパラメータ渡せるけど、そもそも、どういう時 _xabort が欲しいのかよくわかってない…
  • _XABORT_RETRY|_XABORT_CONFLICT: conflict 単体で来たことはないので、必ずセットなのかなという感があるけど。 conflict は cache line 単位つまり 64 bytes の領域ごとぽい。
  • _XABORT_CAPACITY: すっごいざっくりと、1000命令とかそういうオーダーの命令実行すると限界が来る。
  • _XABORT_DEBUG: breakpoint 仕込むとこれ出る。どうやってデバッグするんだろう…
  • _XABORT_NESTED: 8回nestしたら怒られた。
なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h