Verwendung von tbb-Atomoperationen in Xeon Phi
Frage
Ich benutze tbb
compare_and_swap
Betrieb in Xeon Phi in einem sperrfreien Algorithmus.Da es sich bei Xeon Phi um eine ordnungsgemäße Maschine handelt, wird diese nicht unterstützt sfence
Betrieb.Funktionieren die atomaren Operationen also korrekt auf Xeon Phi?
Lösung
Ja, sie funktionieren definitiv korrekt, der größte Teil von TBB selbst basiert auf atomaren Operationen.Und sfence
ist nicht erforderlich, damit atomare Operationen korrekt funktionieren, es handelt sich um eine eigenständige Speicherbarriere, während atomare Operationen selbst Speicherbarrieren implizieren.TBB nutzt nicht sfence
Sogar auf den regulären Xeons wird es verwendet mfence
stattdessen für eine vollständige Speicherbegrenzung.Für Xeon Phi wird es durch einen atomaren No-Op-Betrieb ersetzt, z.mic_common.h von TBB enthält die folgenden Definitionen:
/** 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))