我在Xeon Phi中使用无锁算法中的 tbb compare_and_swap 操作 . 由于Xeon Phi是一台订购机器,它不支持 sfence 操作 . 那么原子操作在Xeon Phi上是否正常工作?
tbb
compare_and_swap
sfence
是的,它们肯定能正常工作,TBB本身的大部分都是基于原子操作 . 并且 sfence 不是原子操作正常工作所必需的,即使在常规Xeons上也使用 sfence ,它使用 mfence 代替完整的内存栅栏 . 对于Xeon Phi,它被无操作原子操作代替,例如TBB的mic_common.h包含以下定义:
mfence
/** Intel(R) Many Integrated Core Architecture does not support mfence and pause instructions **/ #define __TBB_full_memory_fence() __asm__ __volatile__("lock; addl $0,(%%rsp)":::"memory") #define __TBB_Pause(x) _mm_delay_32(16*(x))
1 回答
是的,它们肯定能正常工作,TBB本身的大部分都是基于原子操作 . 并且
sfence
不是原子操作正常工作所必需的,即使在常规Xeons上也使用sfence
,它使用mfence
代替完整的内存栅栏 . 对于Xeon Phi,它被无操作原子操作代替,例如TBB的mic_common.h包含以下定义: