SSE2 et SSE3 pour GNU C++

y a-t-il un tutoriel simple pour me mettre à jour dans SSE, SSE2 et SSE3 dans GNU C++? Comment faire de l'optimisation de code en SSE?

53
demandé sur yoitsfrancis 2009-03-19 10:32:22

5 réponses

Désolé Je ne sais pas d'un tutoriel.

votre meilleur pari (IMHO) est d'utiliser la SSE via les fonctions "intrinsèques" Qu'Intel fournit pour envelopper (généralement) les instructions simples de la SSE. Ceux-ci sont rendus disponibles via un ensemble de fichiers include nommés *mmintrin.h e.g xmmintrin.h est le jeu d'instructions D'origine de L'ESS.

commencer familiarisé avec le contenu de L'optimisation D'Intel Manuel de référence est une bonne idée (voir section 4.3.1.2 pour un exemple les sections SIMD sont essentielles à la lecture. Les manuels de référence des jeux d'instructions sont également très utiles, en ce sens que la documentation de chaque instruction inclut la fonction "intrinsèque" à laquelle elle correspond.

Do Passez un peu de temps à inspecter l'assembleur produit par le compilateur à partir d'intrinsics (vous apprendrez beaucoup) et sur le profilage/Mesure des performances (vous éviterez de perdre du temps SSE-ing code pour peu de retour sur l'effort).

Update 2011-05-31: There is some very nice coverage of intrinsics and vectorization in Agner Fog's optimization PDFs ( thanks ) although it's a bit spread about (E. g section 12 de la première et section 5 de la deuxième ). Ce ne sont pas vraiment des tutoriels (en fait il y a un avertissement "ces manuels ne sont pas pour les débutants") mais ils traitent à juste titre SIMD (qu'il soit utilisé via asm, intrinsics ou vectorisation du compilateur) comme une partie de la plus grande boîte à outils d'optimisation.

mise à jour 2012-10-04: A nice little Linux Journal article sur gcc vector intrinsics mérite une mention ici. Plus général que juste SSE (couvre PPC et extensions de bras aussi). Il y a une bonne collection de références sur le dernière page , qui a dessiné mon attention à Intel "intrinsèques manuel" .

58
répondu timday 2017-05-23 12:25:54

l'optimisation la plus simple à utiliser est de permettre à gcc d'émettre du code SSE.

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

pour une liste plus 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 , une documentation plus précise pour votre version de compilateur spécifique est disponible: http://gcc.gnu.org/onlinedocs / .

pour l'optimisation, toujours consulter le Fog's D'Agner: http://agner.org/optimize / . Je pense qu'il n'a pas de tutoriels SSE pour les intrinsèques, mais il a quelques trucs vraiment soignés std-c++ et fournit aussi beaucoup d'informations sur le codage de l'assemblage SSE (qui peut souvent être transcrit à des intrinsèques).

19
répondu Sebastian Mach 2009-03-24 15:00:54

découvrez-la -mtune et -mars options, -msse*, et -mfpmath de cours. Tous ces outils permettent à GCC de réaliser des optimisations spécifiques aux SSE.

tout au-delà de cela est le domaine de L'assembleur, je le crains.

manuel en ligne de GCC - i386 et x86_64 Options

8
répondu DevSolar 2009-03-19 07:37:07

MSDN a une assez bonne description des compilateurs de SSE intégrés (et ces intégrés sont de facto standard, ils fonctionnent même en clang/XCode).

la bonne chose à propos de cette référence est qu'elle montre un pseudo équivalent, donc par exemple vous pouvez apprendre que ADDPD instruction est:

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

et voici une bonne description d'une instruction cryptique de mélange: http://www.songho.ca/misc/sse/sse.html

3
répondu Kornel 2011-08-18 22:23:19

un simple tutoriel? Pas que je sache.

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 allez à Node: Vector Extensions.

1
répondu Zan Lynx 2009-03-19 07:37:52