Я бегу приложение на новую машину в первый раз, но получение:Программа получила SIGILL сигнал недопустимой команды
Программа получила сигнал SIGILL, недопустимая инструкция
и когда я
х/я $ шт
я получаю:
=> 0x7fffe98b8f5b <_ZNSt10_HashtableImSt4pairIKmPN4ICE211t_orderInfoEESaIS5_ENSt8__detail10_Select1stESt8equal_toImESt4hashImENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEEC2Ev+
147>: vmovss 0x84b4d(%rip),%xmm0 # 0x7fffe993dab0
Мысль машина не может иметь AVX, но проверка ргос/CPUInfo показывает доступны как AVX и AVX2 архитектуры.
Код не был скомпилирован в этом поле, и я не использовал это поле раньше. Я получаю проблему, когда я связываю статически и динамически.
У кого-нибудь есть какие-то советы, что это может быть? Это версия библиотеки времени выполнения C++ на компьютере?
ОБНОВЛЕНИЕ: похоже, это инструкция AVX512, которая является совершенно странной. Этот код генерируется из gcc-хеширования. Нет встроенной сборки AVX512.
Благодарим за это. Это совершенно странно. Я понятия не имею, почему он генерирует инструкторы AVX512. – mezamorphic
Какие параметры были использованы для компиляции кода? Они содержат '-mavx512f' или' -march = native'? Поддерживается ли AVX-512F процессором машины, где был скомпилирован код? – gudok
Привет, просто пытаюсь найти это. Я построил это на своей машине. Он работает на одном удаленном поле, но дает эту незаконную инструкцию в другом удаленном ящике. Это происходит как для динамической, так и для статической сборки. Мы почти не используем avx2, не говоря уже о avx512. Код не был изменен. Я думаю, что это связано с версией gcc/os/kernel. – mezamorphic