我有一个具有2个线程的应用程序,与内核1关联的线程A和与内核2关联的线程B,内核1和内核2在同一x86套接字中。
线程A忙于整数x的旋转,线程B在某些情况下会增加x,当线程B决定增加x时,它将使x所在的缓存行无效,并根据x86 MESI协议,它将新的x存储到存储缓冲区在core2收到无效ack之前,然后在core2收到无效ack之后,core2刷新存储缓冲区。
我想知道,在core2收到无效ack之后,core2刷新是否立即存储缓冲区?我是否有可能迫使cpu用C语言执行刷新存储缓冲区?因为在我的情况下,core1旋转x的线程A应该尽早获得x新值。
我想将线程ping通到两个CPU插槽中的所有内核,并在线程之间写入通信而无需回写DRAM。
如果仅在一个插槽中使用内核,则写回高速缓存对我的吞吐量就可以了,但是对于两个插槽,我想知道是否有更快的速度,例如片上网络或Intel QuickPath Interconnect?
此外,是否有任何简单的方法可以利用这种功能而无需直接编写汇编代码?
参考:https : //software.intel.com/zh-cn/forums/intel-moderncode-for-parallel-architectures/topic/700477