Функция компиляции ЦП компилятора Intel: сломана на процессоре не SSE2?

Поэтому мы хотим использовать компилятор Intel C с включенной диспетчеризацией процессора (это на платформе Windows). Мы используем параметры /arch:IA32 plus /QaxSSE2, но без параметра /QxFoo. Насколько нам известно, это должно привести к созданию двоичного файла, который выполняется на любом процессоре IA32 (x86), но все же использует путь кода, оптимизированный для SSE2, на процессорах, которые фактически поддерживают набор инструкций SSE2.

Тем не менее, тестирование показывает, что на процессоре без поддержки SSE2 (например, Pentium III) двоичный файл будет аварийно завершаться с исключением "недопустимая инструкция"! Интересно, что удаление только /QaxSSE2 и оставление чего-либо еще как есть создает двоичный файл, который прекрасно работает на процессоре без поддержки SSE2.

Еще одно интересное наблюдение: использование /arch:IA32 plus /QaxSSE2 вместе с / Ob0 (отключает встраивание!) Создает двоичный файл, который также прекрасно работает на процессоре без поддержки SSE2.

В этот момент может показаться, что любая диспетчеризация ЦП во время выполнения повышает требования ЦП к "базовому" пути кода к SSE2, независимо от параметра /arch:IA32. Или эта функция, встроенная и выполняющая диспетчеризацию процессора, не идет вместе. Но мы не можем найти упоминания об этом в документации Intel. Это очень важная информация, поэтому мы считаем, что об этом следует упомянуть в документации!

Кто-нибудь может подтвердить наблюдение или уточнить, что происходит?

Спасибо!

0 ответов

Другие вопросы по тегам