Même code, différents ordinateurs - Différences de performances contre-intuitives et énormes

0

TL; DR: Je fais des calculs de performance, et j’ai constaté que la machine apparemment plus «faible» surpasse de beaucoup la machine «plus forte». Pourquoi?

J'ai écrit du code C pour un projet. Il implique 10 000 itérations d'un long processus qui génère des données pseudo-aléatoires et, après chaque itération, les écrit dans un fichier. j'ai utilisé #pragma omp parallel for multi-thread la tâche.

Je peux exécuter mon programme sur deux machines: appelons-les s et . Voici les spécifications pertinentes (s'il vous plaît demander d'autres spécifications qui pourraient avoir de l'importance):

  • s : Linux Mint 15, SSD Samsung 840 EVO, 8 Go de RAM, processeur Intel i3 quad-core à 2,40 gHZ
  • : Linux Mint 16, SSD Intel, 8 Go de RAM, processeur AMD FX-8320 à huit cœurs à 3,5 gHz

Voici la grande surprise: s termine la tâche un ordre de grandeur plus rapide que . J'ai exécuté le programme à quelques reprises sur les deux machines et s termine la tâche en environ 3-4 minutes, alors que prend entre 12 et 30 minutes (j'ai perdu la notion du temps). Tous les deux épuisent complètement leurs cœurs (c’est-à-dire tous les cœurs à 100%) pendant l’informatique. Ce phénomène est même avec des programmes auxiliaires (Firefox, etc.) ouverts sur s et rien d'autre en cours d'exécution .

Mais le code est le même. Les drapeaux du compilateur sont les mêmes. Même la sortie est la même. J'ai même retiré les disques des deux s et , et les échangé, puis réexécuta le programme, histoire de vérifier qu’il n’était en aucun cas lié au système d’exploitation. Le phénomène a persisté: le processeur quad-core 2,4 GHz a largement dépassé le processeur huit cœurs 3,5 GHz.

Ceci est, bien sûr, vraiment déroutant et totalement contre-intuitif. Quelqu'un peut-il me dire ce qui se passe?

Newb
la source
Obtenez un profileur et mesurez.
Dour High Arch
La loi d'Amdahl et le fait que différents systèmes effectueront la fraction séquentielle à une vitesse différente en plus de la partie parallèle.
Brian
Êtes-vous sûr que le processeur Intel est un i3 et quatre les noyaux ? Même pour la 4ème génération. i3, l'Arche affiche uniquement les versions à 2 cœurs; peut-être que vous vouliez dire Xeon E3 ? (Si ce n'est que 4 les fils Cela rendrait la comparaison encore plus asymétrique. Une différence de performance de 4X semble étrange. SPEC CPU2006 FP Les résultats sont optimaux, mais les systèmes "similaires" (AMD FX-8150 contre Intel Xeon E3-1220 - avantage de 34% Intel) semblent indiquer que le système Intel devrait être grossièrement "seulement" 10-15% plus rapide.
Paul A. Clayton
Aussi, êtes-vous sûr qu'ils sont l'exécution le même code? Un binaire portable peut inclure plusieurs chemins de code pour prendre en charge différents systèmes et la sélection peut être sous-optimale pour le système AMD (le compilateur Intel C avait ce type de problème).
Paul A. Clayton
@ PaulA.Clayton selon les diagnostics de mon système, le processeur intel a quatre cœurs. Voici une capture d'écran: imgur.com/fYKceHe Vous avez un bon point en ce qui concerne l’exécution du code: la sélection est peut-être sous-optimale pour le processeur AMD. Que puis-je faire à ce sujet? Comment puis-je tester cela? Existe-t-il un compilateur différent que je puisse utiliser? (J'utilise GCC en ce moment.)
Newb

Réponses:

1

Vous parlez du mythe Megahertz, un chiffre plus grand ne signifie pas toujours meilleur, car la vitesse de calcul dépend des facteurs d'architecture et de conception. Voici une belle page Web sur la question.


la source
Le processeur AMD est également un design quelque part entre le multithreading simultané et le multicœur traditionnel. Deux "cœurs" forment un module qui partage une interface frontale (et une fonctionnalité FP / SIMD) mais avec une exécution entière distincte et des caches de données L1. C'est-à-dire qu'il existe également un effet de "mythe fondamental".
Paul A. Clayton