Donc, je reçois cette erreur en essayant de compiler Dolphin. J'ai essayé clang-3.7 et 3.8 avec GCC 5.2 et 6.3. Ce qui est bizarre, c'est que toutes les autres fonctions _mm semblent fonctionner, c'est juste celle-ci.erreur: utilisation de l'identificateur non déclaré '_mm_shuffle_epi8' Ubuntu 16.04 Ryzen
Répondre
SSE2 est de référence pour x86-64, ce qui explique pourquoi d'autres fonctions _mm
travail (vous avez probablement seulement essayé fonctions SSE2, aucune autre fonction SSE3/SSSE3/SSE4 comme _mm_abs_epi8
ou _mm_cvtepi16_epi32
).
Vous devez -mssse3
(activé par -march=native
ou -march=znver1
dans votre cas) d'utiliser SSSE3 intrinsics avec gcc/clang, à la différence MSVC.
Notez que -mssse3
ne définit pas -mtune=
, mais -march=
ne accordeur, il est donc préférable d'utiliser -march=native
que de simplement activer une extension deux ISA avec -mpopcnt -msse4.1
ou quelque chose, surtout si vous ne prévoyez exécuter le binaire sur un processeur cible.
Par exemple, pour permettre AVX2, il est probablement préférable d'utiliser -march=haswell
ou -march=znver1
, car -mavx2
ne l'emporte pas sur le comportement -mtune=generic
de -mavx256-split-unaligned-load
, même si aucun CPU AVX2 supportant en bénéficient (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80568). c'est-à-dire -mtune=generic
utilise toujours les paramètres de réglage entièrement génériques, plutôt que d'effectuer un réglage pour l'ensemble des processeurs prenant en charge les extensions activées.
Sandybridge bénéficie de -mavx256-split-unaligned-load
/...store
, mais il ne supporte que AVX, pas AVX2. Et même dans ce cas, uniquement lorsque les données sont mal alignées au moment de l'exécution, vous ne le voudrez peut-être pas si vos données sont alignées 99% du temps.
Quels autres éléments intrinsèques avez-vous essayé? '_mm_shuffle_epi8' est dans SSSE3; Incluez-vous '' ou ''? Compilez-vous avec '-mssse3'? –
nemequ
J'ai ajouté et j'ai essayé ce drapeau et il refuse toujours. J'ai l'impression qu'il me manque quelque chose, ou si GCC/clang n'a pas activé cette fonctionnalité pour l'architecture Zen. –
Mitchell
Si vous spécifiez SSSE3 pour une cible x86, cela ne devrait pas vraiment avoir d'importance sur le processeur que vous utilisez; Les compilateurs doivent générer du code même pour des cibles qu'ils ne supportent pas réellement. Assurez-vous que '__SSSE3__' est défini dans le préprocesseur (ce que -mssse3 devrait faire). Aussi, notez que c'est ssse3 pas sse3 ... – nemequ