Флаг компилятора Visual Studio / арка и производительность
Я только что заметил, что в нашем проекте флаг "Включить расширенный набор инструкций" оставлен неустановленным, вероятно, просто недосмотр.
Прежде чем включить флаг, я хотел бы спросить, видели ли кто-нибудь какие-либо реальные улучшения производительности, позволяющие это сделать?
Я предполагаю, что мы увидим некоторое улучшение, наше приложение постоянно выполняет вычисления с плавающей запятой, но это не главная часть.
2 ответа
Итак, в двух словах: этот параметр включает только некоторые встроенные функции, которые отображаются непосредственно в инструкциях SSE. В обычных программах на C++ эти встроенные функции не используются, поэтому этот параметр не повысит производительность.
Если вам нужна более высокая производительность, вы можете попытаться найти компилятор, который переписывает ваш код для использования инструкций SSE (Intel утверждает, что его компилятор может), но, вероятно, его умнее использовать для многоядерности (с openMP или.net 4.0) или использовать графический процессор., который быстрее и гибче, чем SSE.
Выигрыш в производительности будет зависеть от того, использует ли ваш проект интенсивные математические вычисления. Для многих задач (работа в сети, обработка текста, управление данными) это просто не тот случай, поскольку там не используются (или почти отсутствуют) операции с плавающей точкой. Следовательно, не будет никакого повышения производительности вообще.
Использование инструкций SSE/SSE2, сгенерированных компилятором, не приведет к максимальной производительности. Во-первых, вы не сможете контролировать фактическую генерацию кода. Существуют сценарии, в которых вам нужно использовать устаревший (x87) код в старой системе и код с поддержкой SSE/SSE2 в новой системе. Возможно, вы также захотите воспользоваться преимуществами SSE3 на большинстве новейших систем. Для этого я бы рекомендовал проверить тип процессора, используя cpuid
инструкции, а затем переключиться на реализацию, которая может максимально использовать возможности процессора. Затем вы можете использовать встроенные функции компилятора в реализациях, ориентированных на SSE/SSE2. Для работы с SSE3 вам понадобится специальная библиотека, которую я пытаюсь найти в Интернете.
Я считаю, что должны существовать библиотеки, которые выполняют анализ возможностей процессора и обеспечивают оптимальное переключение кода. Мне просто нужно некоторое время, чтобы посмотреть в сети.