カーネルによって再スケジュールされるたびに pthread に関数を実行させるにはどうすればよいですか?
スレッドがスケジュールされている物理 CPU/ソケット (論理コアではない) を特定する必要があり、常にこれを実行する余裕はありません。
ウェイクアップ ルーチンをフックして、スレッドが実際に再スケジュールされている場合にのみ TLS に必要な更新を行うことはできますか?
これが必要な理由: スレッドごとに 70ns ごとに AMOs appx を実行するコードがありますが、アドレスが別のソケットにキャッシュされていない場合は問題ありません。同じコードを 2 つのソケットに展開すると、キャッシュが頻繁に無効になるため、パフォーマンスに 15 倍の影響があります。特に、同じ L3 キャッシュを実行しているスレッド間でのみ共有されるメモリを割り当てるつもりです。そのため、実行しているソケットを特定し、正しいメモリ ブロックをアドレス指定する必要があります。明らかにsched_getcpu
、これを呼び出して の物理 CPU ID と比較できます/proc/cpuinfo
が、これはかなり大きなオーバーヘッドです。ただし、スレッドごとにスレッド プライベート メモリを割り当てる余裕はありません。コストが高すぎます。