このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
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にする、というわけにはいかないようですね…
コンピュータビジョンセミナーvol.2 開催のお知らせ - ニュース一覧 - 株式会社フィックスターズ in Realizing Self-Driving Cars with General-Purpose Processors 日本語版
[…] バージョンアップに伴い、オンラインセミナーを開催します。 本セミナーでは、...
【Docker】NVIDIA SDK Managerでエラー無く環境構築する【Jetson】 | マサキノート in NVIDIA SDK Manager on Dockerで快適なJetsonライフ
[…] 参考:https://proc-cpuinfo.fixstars.com/2019/06/nvidia-sdk-manager-on-docker/ […]...
Windowsカーネルドライバを自作してWinDbgで解析してみる① - かえるのほんだな in Windowsデバイスドライバの基本動作を確認する (1)
[…] 参考:Windowsデバイスドライバの基本動作を確認する (1) - Fixstars Tech Blog /proc/cpuinfo ...
2021年版G検定チートシート | エビワークス in ニューラルネットの共通フォーマット対決! NNEF vs ONNX
[…] ONNX(オニキス):Open Neural Network Exchange formatフレームワーク間のモデル変換ツー...
YOSHIFUJI Naoki in CUDAデバイスメモリもスマートポインタで管理したい
ありがとうございます。別に型にこだわる必要がないので、ユニバーサル参照を受けるよ...