Я пытаюсь точно настроить некоторый тестовый код, который мы используем, и мне интересно, есть ли способ явно сообщить GCC, как упорядочить определенные биты кода. Например, с учетом этих блоков кода:
- Pre
- Запуск таймера
- Body
- Стоп-таймер
- Сообщение
Я хочу сообщить GCC, что каждый блок должен храниться в указанном выше порядке без какой-либо утечки инструкций в другой блок. В идеале таймер должен измерять только шаг 3, однако по практическим соображениям будет достаточно измерения не менее шаг 3 и не более Шаги 2-4. Я просто хочу убедиться, что я записываю измерения для любой части шага 1 или 5.
В настоящее время я использую __sync_synchronize
в функциях таймера для выдачи полного ограничения памяти. Я надеюсь, что эта функция, помимо ограждения, помечена для предотвращения переупорядочения.
Достаточно ли этого звонка на __sync_synchronize
? Также логично, будут ли команды забора C ++ 11 также достаточными согласно тексту стандарта?