Что происходит, когда я компилирую на машине, которая поддерживает avx2, и запускаю бинарный файл на другой машине, которая поддерживает только avx? - PullRequest
0 голосов
/ 29 июня 2018

Я скомпилировал свою программу на С ++ на машине, которая поддерживает avx2 (Intel E5-2643 V3). Он компилируется и работает просто отлично. Я подтверждаю, что инструкция avx2 используется, так как после того, как я разобрал бинарный файл, я увидел инструкции avx2, такие как vpbroadcastd.

Затем я запускаю этот двоичный файл на другом компьютере, на котором установлен только набор инструкций avx (Intel E5-2643 V2). Работает тоже отлично. Работает ли двоичный файл с обратно совместимой инструкцией avx? Что это за инструкция? Видите ли вы потенциальную проблему?

1 Ответ

0 голосов
/ 29 июня 2018

Если инструкция AVX2 действительно выполнена, она вызывает #UD, поэтому ОС доставляет SIGILL (недопустимая инструкция) вашему процессу или эквиваленту Windows.

В некоторых случаях такая инструкция, как lzcnt, декодируется как rep bsr, которая выполняется как bsr на процессорах без BMI1. (Дать другой ответ). Но инструкции AVX2 в VEX-кодировке просто неисправны на центральных процессорах.


Если программа никогда не запускает функцию, содержащую инструкцию AVX2, то, возможно, она будет работать с другими входами, или, возможно, она обнаруживает ЦП во время выполнения.

...