Для конкретного цикла, вы можете добавить прагму:
#pragma loop(no_vector)
Это на самом деле documented on MSDN (хотя я только нашел его там после того, как я узнал об этом ..)
Если вы не Как добавить прагму, вы можете выбрать компиляцию с /favor:ATOM
. Это немного взломать, но это позволит вам отключить авто-векторию, не касаясь источника, и по-прежнему оптимизировать скорость в противном случае.
В качестве альтернативы существуют две стратегии оптимизации /O1
«Оптимизация размера» и /Os
«Благоприятный небольшой код». Авто-векторизация генерирует существенно больше кода, поэтому, если вы оптимизируете размер, автоматическая векторизация отключается.
Я узнал все это недавно, прочитав auto-vectorization cookbook. См. Последнюю строку раздела «Правила для тела цикла».
Отказ от ответственности: Я пока не использую компилятор VS2012 (требуется поддержка Win XP), поэтому я не тестировал это. Кроме того, коммутаторы компилятора могут работать по-другому в 2013 году или позже.
Просто любопытно: почему? –
@ DanielFischer: Почему я хочу отключить векторизацию? По двум причинам: оценить повышение производительности от использования SSE2 и обеспечить последовательное и значимое сравнение производительности с машинами, не имеющими SSE. –
Возможно, следующее может иметь значение: http://stackoverflow.com/questions/1480916/how-do-i-enable-the-sse-sse2-instruction-set-in-visual-studio-2008-using-cmake – NPE