Démarrer avec SSE

Je veux en savoir plus sur l’utilisation du SSE .

Quels sont les moyens d’apprendre, en plus de la lecture évidente des manuels du développeur du logiciel Intel® 64 et IA-32 Architectures ?

Je suis principalement intéressé par les fonctions intégrées du GCC X86 .

Tout d’abord, je ne recommande pas l’utilisation des fonctions intégrées – elles ne sont pas portables (entre les compilateurs du même arch).

Utiliser des composants insortingnsèques , GCC fait un excellent travail en optimisant les composants SSE en un code encore plus optimisé. Vous pouvez toujours avoir un aperçu de l’assemblage et voir comment utiliser SSE à son plein potentiel.

Les propriétés insortingnsèques sont faciles – tout comme les appels de fonction normaux:

#include  __m128 vector1 = _mm_set1_ps(4, 3, 2, 1); // Little endian, stored in 'reverse' __m128 vector2 = _mm_set1_ps(7, 8, 9, 0); // Addition __m128 result = _mm_add_ps(vector1, vector2); // result = vector1 + vector 2 // A more advanced function, called shuffle vector1 = _mm_shuf_ps(vector1, vector1, _MM_SHUFFLE(0,1,2,3)); // vector1 is now (1, 2, 3, 4) (above shuffle reversed it) 

Bien sûr, il y a beaucoup plus d’options, SSE est vraiment puissant et à mon avis relativement facile à apprendre.

Depuis que vous avez demandé des ressources:

Guide pratique d’utilisation de SSE avec C ++ : bonne présentation conceptuelle de l’utilisation efficace de SSE, avec des exemples.

MSDN Listing of Insortingnsics du compilateur : référence complète pour tous vos besoins insortingnsèques. C’est MSDN, mais à peu près tous les éléments insortingnsèques listés ici sont également supportés par GCC et ICC.

Page SSE de Christopher Wright : Référence rapide sur la signification des opcodes SSE. Je suppose que les manuels Intel peuvent remplir la même fonction, mais c’est plus rapide.

Il est probablement préférable d’écrire la plupart de votre code dans des composants insortingnsèques, mais vérifiez le objdump de la sortie de votre compilateur pour vous assurer qu’il produit un code efficace. La génération de code SIMD est encore une technologie relativement nouvelle et il est très possible que le compilateur se trompe dans certains cas.

Je trouve les guides de recherche et d’optimisation du Dr Agner Fog très précieux! Il a également des bibliothèques et des outils de test que je n’ai pas encore essayés. http://www.agner.org/optimize/