56 votes

SSE SSE2 et SSE3 pour GNU C ++

Existe-t-il un tutoriel simple pour me familiariser avec SSE, SSE2 et SSE3 dans GNU C ++? Comment pouvez-vous optimiser le code dans SSE?

61voto

timday Points 14860

Désolé de ne pas savoir d'un tutoriel.

Votre meilleur pari (à mon humble avis) est d'utiliser de l'ESS via le "intrinsèque" des fonctions Intel à envelopper (en général), seul le jeu d'instructions SSE. Ils sont mis à disposition par l'intermédiaire d'un ensemble d'inclure des fichiers nommés *mmintrin.h e.g xmmintrin.h est l'original jeu d'instructions SSE.

Commencer familier avec le contenu de l'Intel Optimisation Manuel de Référence est une bonne idée (voir la section 4.3.1.2 pour un exemple de intrinsèques) et le SIMD sections sont indispensables à la lecture. Le jeu d'instructions, les manuels de référence sont très utile, aussi, que chaque instruction de la documentation comprend les "intrinsèque" de la fonction correspondante.

Faire passer un peu de temps à l'inspection de l'assembleur produit par le compilateur à partir de intrinsèques (vous apprendrez beaucoup de choses) et sur le profilage, de mesure du rendement (vous verrez par vous éviter de perdre du temps de l'ESS-ing code pour peu de retour sur l'effort).

Mise à jour 2011-05-31: Il y a de très belle couverture de intrinsèques et la vectorisation dans Agner le Brouillard de l' optimisation des fichiers Pdf (merci), mais il est un peu répandus sur les e.g de l'article 12 de la première et de l'article 5 de la seconde). Ce ne sont pas exactement tutoriel (en fait il y a un "ces manuels ne sont pas pour les débutants" avertissement), mais ils le font à juste titre, traiter SIMD (si utilisé par l'asm, intrinsèques ou le compilateur de vectorisation) comme une partie seulement de la plus grande optimisation de la boîte à outils.

Mise à jour 2012-10-04: Un joli petit Linux Journal article sur gcc vecteur intrinsèques mérite une mention ici. Plus général que juste de l'ESS (couvre PPC et rallonges de BRAS trop). Il y a une bonne collection de références sur la dernière page, ce qui a attiré mon attention sur Intel "intrinsèques manuel".

24voto

phresnel Points 20082

La plupart d'optimisation simples à utiliser est de permettre la gcc à émettre de l'ESS code.

Indicateurs: -msse, -msse2, -msse3, -march=, -mfpmath=sse

Pour une liste concise sur 386 options, voir http://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options plus exacte de la documentation spécifique à votre version de compilateur est là: http://gcc.gnu.org/onlinedocs/ .

Pour l'optimisation, il faut toujours vérifier Agner de la Brume: http://agner.org/optimize/ . Je pense qu'il n'ont pas ESS de tutoriels pour intrinsèques, mais il a des vraiment sympas std-c++ astuces et fournit également de nombreuses informations sur le codage de l'ESS de l'assemblée (ce qui peut souvent être transcrit à intrinsèques).

8voto

DevSolar Points 18897

Découvrez les options -mtune et -march, -msse * et -mfpmath bien sûr. Tous ces éléments permettent à GCC de procéder à des optimisations spécifiques à SSE.

Au-delà de cela, c’est le royaume de l’Assembleur, j’ai peur.

Manuel GCC Online - Options i386 et x86_64

4voto

porneL Points 42805

MSDN est assez bonne description de l'ESS le compilateur construit-ins (et ceux built-ins sont standard de facto, ils ont même travail dans clang/XCode).

La bonne chose à propos de cette référence, c'est qu'il montre l'équivalent de pseudo, donc, par exemple, vous pouvez apprendre que ADDPD instruction est:

r0 := a0 + b0
r1 := a1 + b1

Et voici une bonne description d'un énigmatique shuffle instruction: http://www.songho.ca/misc/sse/sse.html

2voto

Zan Lynx Points 23100

Un simple tutoriel? Pas que je sache de.

Mais toute information sur l’utilisation de MMX ou de toute version de SSE sera utile pour l’apprentissage, que ce soit pour GCC, ICC ou VC.

Pour en savoir plus sur les extensions vectorielles de GCC, tapez "info gcc" et accédez à Node: Vector Extensions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X