如何让我的pthread在每次被内核重新调度时执行一个函数?
我需要确定在哪个物理CPU/套接字(不是逻辑核心)上调度我的线程,并且不能一直这样做。
唤醒例程能否以某种方式挂接,以便仅在线程实际被重新调度时才对TLS进行必要的更新?
至于为什么我需要这个:我有代码每70 As每线程执行一次AMOs appx,如果地址没有被缓存到另一个套接字上,这是很好的,在两个套接字上部署相同的代码会产生15倍的性能影响,因为频繁的缓存无效。我打算为此特别分配内存,它只在运行相同L3缓存的线程之间共享。因此,我需要确定我在哪个套接字上运行,并对正确的内存块进行寻址。显然,我可以调用sched_getcpu并将其与/proc/cpuinfo中的物理CPU进行比较,但这是一个相当大的开销。但是,我负担不起为每个线程分配线程私有内存,这太昂贵了。
发布于 2012-12-09 04:08:55
根据我在中所读到的内容,内核并没有提供您想要的服务或接口。使用pthread_setaffinity (如上面的@osgx所建议的,或者在最近的linux内核实现中,使用)或在开始时为每个cpu套接字缓存一个TLS key (如上面的@caf所建议的)可能是在该方向上使用的最好方法。
https://stackoverflow.com/questions/13457035
复制相似问题