2016-06-27 2 views
0

Я бегу приложение на новую машину в первый раз, но получение:Программа получила 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.

ответ

0

Если вы нажмете на любую функцию в Intel Intrinsics Guide, то скажут, что для vmovss требуется AVX-512F. AVX и AVX-2 недостаточно.

+0

Благодарим за это. Это совершенно странно. Я понятия не имею, почему он генерирует инструкторы AVX512. – mezamorphic

+0

Какие параметры были использованы для компиляции кода? Они содержат '-mavx512f' или' -march = native'? Поддерживается ли AVX-512F процессором машины, где был скомпилирован код? – gudok

+1

Привет, просто пытаюсь найти это. Я построил это на своей машине. Он работает на одном удаленном поле, но дает эту незаконную инструкцию в другом удаленном ящике. Это происходит как для динамической, так и для статической сборки. Мы почти не используем avx2, не говоря уже о avx512. Код не был изменен. Я думаю, что это связано с версией gcc/os/kernel. – mezamorphic

Смежные вопросы