К вопросу о "нашумевшей" новости
http://www.swallowtail.org/naughty-intel.html :
As an example, some (internal) code was compiled with ifc version 8.1.028 build 20050520Z twice. For the second compile, the Intel CPU check was patched out of the compiler and replaced with a no-op. The code is otherwise identical, compiled with '-O3 -fpp -tpp6 -ip -pad -w95 -cm -Vaxlib -static-libcxa'. The machines used are a dual-Opteron 248 and a P4 1.7 GHZ, values are seconds (lower is better, and note that the 'confs' test has a stochastic element and hence the times can vary by ~5% between runs).
CPU Flags Code 'Clique' 'Simplex' 'Confs'
Opteron -xW Original 15.6 54.4 92.2
Opteron -axW Original 26.7 123.4 114.2
Opteron -xW Patched 14.8 49.1 96.5
Opteron -axW Patched 15.1 49.7 91.4
P4 -xW Original 25.7 78.4 171.2
P4 -axW Original 26.3 79.7 171.2
P4 -xW Patched 25.8 78.9 172.6
P4 -axW Patched 26.4 78.1 169.9
Новость эта подана из такого расчёта, чтобы разоблачить коварство транслятора Интела в отношении процессоров AMD. При этом автор совсем позабыл, что "коварство" это проявляется на ключах -xN и -xP, когда транслятор вставляет "проверочный" код, препятствующий исполнению программы на процессорах AMD. С тем "коварством" всё более-менее понятно: до версии транслятора 8.1 такая проверка действительно существовала - хотя на практике она никого не ущемляла, так как код с -xN практически не отличается от кода с -xW (по крайней мере никто пока не смог продемонмтрировать отличий в кодогенерации), а -xP стал актуален лишь для самых последних процессоров (а к их появлению как раз подоспела "нековарная" версия 9).
Посмотрим теперь повнимательнее в приведённые результаты. Сразу видно, что заметрные отличия у Оптерона есть только для ключа -axW (с "взломанным" ключом -xW есть лишь относительно небольшой разброс в _обе_ стороны).
Что это за ключ "-axW" и чем он отличается от "-xW" ? "-xW" означает "сгенери код с использованием SSE/SSE2 в стиле процессора Willamette" и исполняй его _безусловно_, без проверки типа процессора". "-axW" означает "сгенери два кода - универсальный код без использования SSE/SSE2. и код с использованием SSE/SSE2 в стиле процессора Willamette; перед исполнением проверь, Willamette ли это; если да - исполняй второй код; если нет - исполняй первый".
Стало быть. с ключом -axW (без взлома) на Оптероне исполняется код без SSE/SSE2. Глупый автор этой новости даже и не догадался сделать отдельный замер без ключей -xW/-axW - тогда бы он убедился, что в этом случае результаты будут столь же "плохи" (почему плохи и отчего такой выигрыш на SSE/SSE2 - это уже отдельный вопрос). Вместо этого автор (вероятно, вообще не понимая смысла ключей с буквой "a") преподнёс вот такую вот "сенсацию". То есть он по существу _запретил_ использование SSE/SSE2 в этих замерах. То есть родил проблему на пустом месте. Поскольку если ты действительно _хочешь_ использовать SSE/SSE2 на процессоре AMD, просто используй -xW. Just do it ! И не усложняй сущностей
![](/rotate.svg)
P.S. Конечно, можно ставить вопрос о том, чтобы транслятор AMD смог различать процессоры K7 (без SSE2) и K8 (с SSE2) - чтобы ключ -axW делал то, что от него хотелось бы ожидать. Но этот вопрос не может звучать как _требование_ к фирме Intel. Он может звучать только как _просьба_
![](/tongue.svg)