如何让我的 pthread 每次被内核重新调度时执行一个函数?
我需要确定我的线程被安排在哪个物理 CPU/插槽(不是逻辑核心)上,并且不能一直这样做。
只有在线程实际被重新调度时,唤醒例程才能以某种方式对 TLS 进行必要的更新?
至于我为什么需要这个:我的代码每线程每 70ns 执行一次 AMO appx,如果地址没有缓存在另一个套接字上,这很好,由于频繁的缓存失效,在两个套接字上部署相同的代码会产生 15 倍的性能影响。我打算专门为此分配内存,它只在运行相同 L3 缓存的线程之间共享。所以我需要确定我在哪个套接字上运行并寻址正确的内存块。我显然可以调用sched_getcpu
它并将其与 中的物理 CPU ID 进行比较/proc/cpuinfo
,但这是一个相当大的开销。不过,我负担不起为每个线程分配线程专用内存,这太昂贵了。