использование атомарных операций tbb в Xeon Phi
Вопрос
Я использую tbb
compare_and_swap
работа в Xeon Phi по алгоритму без блокировок.Поскольку Xeon Phi - это машина в порядке, она не поддерживает sfence
операция.Итак, будут ли атомарные операции корректно работать на Xeon Phi?
Решение
Да, они определенно работают корректно, большая часть самого TBB основана на атомарных операциях.И sfence
не требуется для корректной работы атомарных операций, это автономный барьер памяти, в то время как атомарные операции сами по себе подразумевают барьеры памяти.TBB не использует sfence
даже на обычных Xeons он использует mfence
вместо этого для полного забора памяти.Для Xeon Phi он заменяется атомарной операцией no-op, напримерmic_common.h из TBB содержит следующие определения:
/** 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))