Насколько я понимаю, инструкции по атомным машинам могут быть на два порядка медленнее, чем неатомарная операция. Например, учитывая
int x;
x++
а также
std::atomic<int> y;
y++;
я понимаю, что x++
как правило, работает намного быстрее, чем y++
, (Я предполагаю, что операция приращения соответствует базовой машинной инструкции. Я уверен, что точная сравнительная стоимость варьируется от архитектуры к архитектуре, но я говорю о практическом правиле.)
Меня интересует относительная стоимость атомарной операции RMW и вызова не встроенной функции, опять же, как общее практическое правило. Например, учитывая эту не встроенную функцию,
void f(){}
что мы можем сказать о стоимости y++
(то есть, атомарный прирост) по сравнению со стоимостью выполнения не встроенного вызова f
?
Моя мотивация состоит в том, чтобы попытаться сделать общее утверждение, что «атомные операции намного дороже, чем неатомарные операции» в перспективе. Один из способов сделать это — попытаться понять, насколько дорогая атомарная операция RMW по сравнению с вызовом и возвратом из не встроенной функции.
Пожалуйста, не отвечайте «единственный способ узнать, это измерить». Я не спрашиваю об атомарной операции RMW по сравнению с вызовом функции в определенном контексте в конкретной архитектуре. Я спрашиваю об общем эмпирическом правиле, которое можно было бы использовать в качестве основы для обсуждения для людей, которые могут подумать: «Мы никогда не можем использовать атомарные инструкции, потому что они слишком дороги», и все же, кто бы не задумывался о создании вызовы функций.
Задача ещё не решена.
Других решений пока нет …