Question

Je vous écris une application très parallèle qui est multithread. Je l'ai déjà eu une classe de fil accéléré SSE écrit. Si je devais écrire une classe de fil MMX accéléré, puis exécutez les deux en même temps (un fil SSE et MMX un fil par cœur) serait la performance sensiblement améliorer?

Je pense que cette configuration aiderait la latence de la mémoire cache, mais je voudrais être sûr avant de commencer à verser temps en elle.

Était-ce utile?

La solution

Les jeux d'instructions SSE et MMX partager le même ensemble d'unités d'exécution de traitement vectoriel dans la CPU. Par conséquent, l'exécution d'un fil SSE et un fil MMX aura les mêmes ressources disponibles chaque thread que si vous utilisez deux fils SSE (ou deux MMX threads). La seule différence est dans les instructions qui existent dans l'ESS, mais pas MMX (depuis SSE est une extension de MMX). Mais dans ce cas, le MMX va probablement être plus lent, car il ne possède pas ces instructions plus avancées dont elle dispose.

La réponse est:. Non, vous ne verriez pas une amélioration de la performance par rapport à deux fils SSE en cours d'exécution

Autres conseils

SSE et MMX utilisent les mêmes registres, de sorte qu'il ne importe lequel des deux vous utilisez (en dehors de MMX sucer et être utile SSE, bien sûr)

La meilleure question est de savoir comment SSE est mis en œuvre sur votre CPU cible. At-il une unité SSE par cœur? (Probablement) Si oui, alors vous pourriez aussi bien exécuter les instructions SSE sur chaque thread.

Si elle dispose d'une unité SSE partagée entre les noyaux puis différents threads se battre sur elle il n'y aura pas beaucoup gagné en exécutant les instructions SSE dans plusieurs threads. (Je ne sais pas si les processeurs partagent effectivement l'unité SSE entre les threads, donc prendre cela comme un cas hypothétique)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top