Я читал несколько старых книг по игровому программированию, и, как некоторые из вас, возможно, знали, в те дни, как правило, было быстрее делать битовые хаки, чем делать вещи стандартным способом.(Преобразование float
в int
, бит знака маски, обратное преобразование в абсолютное значение, например, вместо простого вызова fabs()
)
В наше время почти всегда лучше просто использовать стандартные математические функции библиотекипоскольку эти крошечные вещи вряд ли являются причиной большинства узких мест в любом случае.
Но я все же хочу сделать сравнение, просто ради любопытства.Поэтому я хочу убедиться, что при профиле я не получаю искаженные результаты.Поэтому я хотел бы убедиться, что компилятор не оптимизирует операторы, не имеющие побочных эффектов, такие как:
void float_to_int(float f)
{
int i = static_cast<int>(f); // has no side-effects
}
Есть ли способ сделать это?Насколько я могу судить, выполнение чего-то вроде i += 10
по-прежнему не будет иметь побочных эффектов и, следовательно, не решит проблему.
Единственное, о чем я могу думать, это иметь глобальную переменную int dummy;
, а после приведения сделать что-то вроде dummy += i
, поэтому используется значение i
.Но я чувствую, что эта фиктивная операция будет мешать желаемым результатам.
Я использую Visual Studio 2008 / G ++ (3.4.4).
Редактировать
Чтобы уточнить, я бы хотел, чтобы все оптимизации были максимизированы, чтобы получить хорошие результаты профиля.Проблема заключается в том, что при этом будут оптимизированы операторы без побочных эффектов, и, следовательно, ситуация.
Править еще раз
Чтобы еще раз уточнить, прочитайте это: Я не пытаюсь микрооптимизировать это в каком-то производственном коде.
Мы все знаем, что старые трюки больше не очень полезны, мне просто любопытно как они бесполезны.Просто любопытство.Конечно, жизнь могла бы продолжаться, если бы я не знал, как эти старые хаки работают против современных процессоров, но это никогда не помешает узнать.
Так что скажите мне, что эти приемы больше не нужны, перестаньте пытатьсяОптимизировать бла-бла "- это ответ, полностью упускающий суть.Я знаю они бесполезны, я ими не пользуюсь.
Преждевременное цитирование Кнута - корень всех раздражений.