Товарищи, я столкнулся с не совсем предсказуемым поведением своего процессора.
Оказалось, что при проверке XOR работает медленнее, чем swap или обмен двух переменных через третью.
Исходный код: http://ideone.com/bJK71K
Сборка:
g++ main.cpp -O2 -o swap_test
Получаемый код:
xchg %ebp,%ebx ; XOR
mov %ebp,%edx ; третья переменная
mov %ebx,%ebp
mov %edx,%ebx
mov %ebx,%edx ; std::swap
mov %ebp,%ebx
mov %edx,%ebp
stdout:
NUMSTEPS = 4294967295
swap 1641.8 ms.
XOR 2575.36 ms.
+var 1627 ms.
Процессор Intel(R) Core(TM) i7-3630QM CPU @ 2.40GHz
В качестве ОС — 64-разрядная убутна.
Если вас не затруднит — я прошу добровольев запустить код у себя, так как есть серьезные подозрения, что на других процессорах, особенно на AMD, xchg может иметь профит во времени.
Буду рад обоснованной критике и разъяснению возможных ошибок.