このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
ARMのldrexとstrexのコードを見て、なんとなくx86のcmpxchgより読みやすい気がしたので、x86にもll/sc相当が欲しいなと思ったのですが、よく考えたら今のx86にはTMがあったのを思い出しました。
PPCのll/scやARMでそれに相当するldrex/strexは一個のワード、一個のキャッシュラインしか値を監視できないですが、x86 の TSX は、複数キャッシュラインを監視できるわけで、TSXがあれば、ll/sc, ldrex/strex 相当のことができそうです。
問題はパフォーマンスで、衝突しないときにも無駄なオーバーヘッドがあると少し使うのは心苦しいです。
というわけで、x86 TSXを ll/sc がわりに使った場合、どのぐらいオーバーヘッドがあるか調べてみました
結果は、
arch | 命令 | cycle |
i7-5600U | TSX 1cacheline | 64 |
TSX 8cacheline | 104 | |
cmpxchg | 21 | |
load+store | 7 | |
Cortex-A53 | ldrex+strex | 12.2 |
load+store | 4.2 | |
Cortex-A15 | ldrex+strex | 26 |
load+store | 7.1 |
というようになりました。
条件完全に揃えたわけではないので、公平な比較ではないですが、TSX はやはりそれなりのオーバーヘッドがあって、
cmpxchg を捨てて全部TSXにする、というわけにはいかないようですね…
keisuke.kimura in Livox Mid-360をROS1/ROS2で動かしてみた
Sorry for the delay in replying. I have done SLAM (FAST_LIO) with Livox MID360, but for various reasons I have not be...
Miya in ウエハースケールエンジン向けSimulated Annealingを複数タイルによる並列化で実装しました
作成されたプロファイラがとても良さそうです :) ぜひ詳細を書いていただきたいです!...
Deivaprakash in Livox Mid-360をROS1/ROS2で動かしてみた
Hey guys myself deiva from India currently i am working in this Livox MID360 and eager to knwo whether you have done the...
岩崎システム設計 岩崎 満 in Alveo U50で10G Ethernetを試してみる
仕事の都合で、検索を行い、御社サイトにたどりつきました。 内容は大変参考になりま...
Prabuddhi Wariyapperuma in Livox Mid-360をROS1/ROS2で動かしてみた
This issue was sorted....