Le code optimisé SSE est similaire à la version standard.

Je voulais faire mes premiers pas avec le SSE d’Intel et j’ai donc suivi le guide publié ici , à la différence qu’au lieu de développer pour Windows et C ++, je le _aligned_malloc pour Linux et C (je n’utilise donc pas _aligned_malloc mais posix_memalign ).

J’ai également mis en œuvre une méthode intensive en informatique sans utiliser les extensions SSE. Étonnamment, quand je lance le programme, les deux morceaux de code (celui avec SSE et celui sans) prennent le même temps, le temps de celui qui utilise le SSE légèrement plus élevé que l’autre.

Est-ce normal? Serait-il possible que GCC optimise déjà avec SSE (en utilisant également l’option -O0 )? J’ai aussi essayé l’option -mfpmath=387 , mais en aucun cas, toujours la même chose.

Pour les opérations en virgule flottante, vous ne verrez peut-être pas un avantage énorme avec SSE. La plupart des processeurs x86 modernes ont deux FPU, aussi la double précision peut-elle être à peu près la même vitesse pour SIMD vs scalaire, et la simple précision peut vous donner 2x pour SIMD sur scalaire une bonne journée. Toutefois, pour les opérations sur les nombres entiers, par exemple le traitement des images ou du son à 8 ou 16 bits, vous pouvez toujours tirer des avantages substantiels de SSE.

GCC a un très bon vectoriseur de code intégré (qui entre en jeu dès -00 et au-dessus), ce qui signifie qu’il utilisera SIMD n’importe où pour accélérer le code scalaire aussi, si c’est possible).

il est assez facile de confirmer que c’est bien ce qui se passe ici, il suffit de désassembler la sortie (ou de laisser gcc émettre des fichiers asm commentés).