Запретить перемещение кода GCC в тестовом коде - PullRequest
5 голосов
/ 29 января 2012

Я пытаюсь точно настроить некоторый тестовый код, который мы используем, и мне интересно, есть ли способ явно сообщить GCC, как упорядочить определенные биты кода. Например, с учетом этих блоков кода:

  1. Pre
  2. Запуск таймера
  3. Body
  4. Стоп-таймер
  5. Сообщение

Я хочу сообщить GCC, что каждый блок должен храниться в указанном выше порядке без какой-либо утечки инструкций в другой блок. В идеале таймер должен измерять только шаг 3, однако по практическим соображениям будет достаточно измерения не менее шаг 3 и не более Шаги 2-4. Я просто хочу убедиться, что я записываю измерения для любой части шага 1 или 5.

В настоящее время я использую __sync_synchronize в функциях таймера для выдачи полного ограничения памяти. Я надеюсь, что эта функция, помимо ограждения, помечена для предотвращения переупорядочения.

Достаточно ли этого звонка на __sync_synchronize? Также логично, будут ли команды забора C ++ 11 также достаточными согласно тексту стандарта?

Ответы [ 2 ]

2 голосов
/ 29 января 2012

Если Start-Timer - это вызов функции, а Stop-Timer - это еще один вызов функции, оптимизатор имеет небольшую возможность переместить Body вокруг или пролить материал из Pre или Post в Body .

Все побочные эффекты от Pre должны быть завершены до вызова функции Start-Timer (там есть точка последовательности). Все побочные эффекты Stop-Timer должны быть завершены до выполнения Post (там тоже есть точка последовательности). Таким образом, компилятор должен иметь код для Start-Timer и Stop-Timer, видимый для обезьяны с сгенерированным кодом, проливая материал вокруг, и я не уверен, что он мог бы сделать это даже тогда.

Итак, в общем, я не думаю, что вам нужно беспокоиться об этом, если вы используете вызовы функций для запуска и остановки таймера.

0 голосов
/ 29 января 2012

Создайте две версии кода: одну с реальным кодом, который вы хотите измерить, одну с заглушками.Измерьте оба.Вычитание.Тогда, я думаю, вам не важно, что делает GCC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...