2010-05-15 4 views
4

J'écris une application hautement parallèle multithread. J'ai déjà écrit une classe de thread accélérée SSE. Si je devais écrire une classe de threads accélérée MMX, puis exécuter les deux en même temps (un thread SSE et un thread MMX par core) les performances s'amélioreraient-elles notablement?Avantage de l'utilisation simultanée de plusieurs jeux d'instructions SIMD

Je pense que cette configuration permettrait de cacher la latence de la mémoire, mais je voudrais être sûr avant de commencer à y consacrer du temps.

+3

Vous avez quelques bonnes réponses ci-dessous, mais je pense qu'une meilleure réponse aurait pu être obtenue en écrivant un code de test et obtenir des chiffres réels du monde réel. –

Répondre

8

Les jeux d'instructions SSE et MMX partagent le même ensemble d'unités d'exécution de traitement vectoriel dans la CPU. Par conséquent, l'exécution d'un thread SSE et d'un thread MMX aura les mêmes ressources disponibles chaque thread comme si vous exécutez deux threads SSE (ou deux threads MMX). La seule différence est dans les instructions qui existent dans SSE mais pas dans MMX (puisque SSE est une extension de MMX). Mais dans ce cas, le MMX va probablement être plus lent car il ne dispose pas de ces instructions plus avancées. Donc, la réponse est: Non, vous ne verrez pas d'amélioration des performances par rapport à l'exécution de deux threads SSE.

-1

SSE et MMX utilisent les mêmes registres, (être utile, bien sûr en dehors de la succion MMX et SSE)

donc peu importe lequel des deux vous utilisez la meilleure question est de savoir comment SSE est mis en œuvre sur votre CPU cible. A-t-il une unité SSE par cœur? (probablement) Si oui, alors vous pourriez aussi bien exécuter des instructions SSE sur chaque thread. S'il a une unité SSE partagée entre les cœurs, alors des threads différents se disputeront, donc il n'y aura pas beaucoup gagné en exécutant des instructions SSE dans plusieurs threads. (Je ne sais pas si des processeurs partagent réellement l'unité SSE entre les threads, donc prenez ceci comme un cas hypothétique)

+1

Désolé? SSE utilise ses propres registres de 128 bits, tandis que MMX (ab) utilise les registres à virgule flottante. (Référence: http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions) – jakogut

Questions connexes