# [CPU] Processeur X2 dual core (résolu )

## ycaironi

Bonjour gentooïste,

Deux petites questions avec des réponses surement trés bêtes.

J'ai un  "AMD Athlon(tm) 64 X2 Dual Core Processor 3600+", j'ai remarqué qu'une tâche, quelle que soit sa gourmandise en CPU, est gerée que par un seul core sur les deux par intermitance.. Est-ce normale? Ne devrait-il pas y avoir un partage de charge?

Exemple:

Je lance un emerge, le core1 passe à 100% pendant quelques secondes, puis passe à 0% et le core0 passe lui à 100%.

Jamais avec un seul emerge core1=50% et core0=50%. Strange non?

Si je lance une deuxième tache les deux core sont à 100%.

Multiprocessing paralelle est bien activé dans mon kernel.

Mon make.conf est

```

 CFLAGS="-march=k8 -O2 -pipe"

```

Est-ce bien adapté? J'ai trouvé plusieurs topic, vraiment contradictoire, et pas un seul HOWTO. Le wiki ne semble pas plus fiable.

Merci de votre support

Yann

Edit1: Modification du titre

----------

## geekounet

Salut !

Peux-tu mettre ton titre du topic en conformité avec les conventions de notre forum s'il te plait ? Merci  :Smile: 

Et il n'y a rien d'étrange à ce comportement si tes applications concernées ne sont pas prévues pour le multithreading. Une tache reste sur un seul processeur/core, elle ne se partage pas sur les 2. Si elle avait plusieurs taches, là oui on retrouverai les taches de l'applications partagées entre les processeurs/core, mais chaque tache reste entièrement sur un proc toujours. Dans le cas de portage, tu peux partager les compilations sur plusieurs processeur/core pour les compilations utilisant make, en jouant avec le paramètre -j de la variable MAKEOPTS. /etc/make.conf.example et man make pour plus de précisions  :Wink: 

----------

## guilc

plutot que -march=k8, tu peux facilement utiliser -march=native avec les GCC récents ! il choisira tout seul les bonnes optimisations en fonction du CPU  :Wink: 

----------

## ycaironi

 *Quote:*   

> 
> 
> Peux-tu mettre ton titre du topic en conformité avec les conventions de notre forum s'il te plait 

 

Oups, sorry, voilà qui est corrigé.

 *Quote:*   

> 
> 
> en jouant avec le paramètre -j de la variable MAKEOPTS

 

Oui, le miens est à 3 > cpu+1 comme conseillé dans le .example.

Je comprend donc que c'est une limitation plutôt hardware<>software, qui n'a pas trop à voir avec mes paramètres.

Merci

----------

## ycaironi

 *Quote:*   

> 
> 
> plutot que -march=k8, tu peux facilement utiliser -march=native

 

Un emerge -uDn world suffit il ensuite? Ou faut il aussi un emerge -DN system  :Question: 

----------

## kwenspc

C'est le comportement normale du SMP oui. (par contre le titre de topic n'est pas normale lui  :Mr. Green: )

Tu verras jamais les deux CPU fonctionner à 50% chacun pour une charge donnée. Un processus s'exécute sur un et un seul processeur. Par contre, par exemple avec un emerge et un makeopts à -j5, plus tu as de processus, plus tu verras qu'ils sont "dispatchés" entre l'un et l'autre des CPU. Et pas l'un après l'autre, non mais bel et bien à ~100% sur les deux. (plusieurs compile en // y a que ça de vrai). 

En SMP les CPU ne s'additionne pas pour ne former qu'un CPU, chaque CPU est distinct et accède donc à la mémoire de manière concurrente (sauf sur les Optérons où il est possible d'avoir une mémoire et un bus mémoire par CPU par exemple).

Parfois tu vois la charge passer d'un CPU à l'autre. Il me semble que c'est dû justement à ce soucis d'accès à la mémoire en concurrence. Pendant qu'un CPU bosse, l'autre CPU va recevoir les données à traiter à la suite, c'est donc lui qui prend la main pour continuer le travail tandis que le premier fait de même. Et ainsi de suite... En gros.

----------

## geekounet

 *ycaironi wrote:*   

>  *Quote:*   
> 
> plutot que -march=k8, tu peux facilement utiliser -march=native 
> 
> Un emerge -uDn world suffit il ensuite? Ou faut il aussi un emerge -DN system 

 

Pour le peu de gain que ça apporte, va pas recompiler tout juste pour ça. Met le, et ça se mettra aux mises à jour c'est tout  :Smile: 

----------

## ycaironi

Merci pour vos réponses.

Viva Gentoo

 :Very Happy: 

----------

## y0ug

 *Quote:*   

> 
> 
> C'est le comportement normale du SMP oui. (par contre le titre de topic n'est pas normale lui )
> 
> Tu verras jamais les deux CPU fonctionner à 50% chacun pour une charge donnée. Un processus s'exécute sur un et un seul processeur. Par contre, par exemple avec un emerge et un makeopts à -j5, plus tu as de processus, plus tu verras qu'ils sont "dispatchés" entre l'un et l'autre des CPU. Et pas l'un après l'autre, non mais bel et bien à ~100% sur les deux. (plusieurs compile en // y a que ça de vrai).
> ...

 

Juste comme sa. Moi j'utilise une core 2 duo d'intel et au début j'utilisais MAKEOPTS=-j3 puis j'ai testé avec -j4 et la j'ai remarqué une compilation un peux plus rapide, enfin les 2 CPU sont à 100% alors que avant sa me bouffé pas toute la CPU.

Donc je joue avec ces variable des fois -j3 si je veux faire d'autre truc sur le pc en même temps sinon -j4.

Je pense que sa doit être aussi valable pour ton processeur.

PS: -j5 j'ai jamais essayé mais bon vu que -j4 me convient mais sa doit marché aussi mais faut faire attention après à pas trop en envoyer en // sinon sa te ralentie ta compile aussi. Enfin ces à toi de voir ce qui passe le mieux sur ta bécane.

----------

## gbetous

 *y0ug wrote:*   

> 
> 
> Juste comme sa. Moi j'utilise une core 2 duo d'intel et au début j'utilisais MAKEOPTS=-j3 puis j'ai testé avec -j4 et la j'ai remarqué une compilation un peux plus rapide

 

En effet, c'est possible. Le but c'est d'approcher au maximum le 100% sur chacun des coeurs. Plus on a de taches, plus on a de chances d'avoir qqchose à faire, mais :

- il n'y a pas forcément 4 choses faisables en parallèle à chaque instant

- ca bouffe de la RAM

- ca augmente inévitablement les temps de commuation (puisqu'il y en a plus)

Donc à chacun à faire qques essais, mais moi aussi d'ai dépassé de 1 la fameuse règle des "1 de plus que le nombre de coeurs".

A -j5 j'avais commencé à voir une baisse de temps de compil', largement confirmée sur un bourrin -j10   :Wink: 

----------

## kwenspc

 *gbetous wrote:*   

> 
> 
> - il n'y a pas forcément 4 choses faisables en parallèle à chaque instant
> 
> 

 

+1

Certains ebuilds outrepassent même la variable MAKEOPTS pour forcer un -j1, sans parler de fait que certains paquet (simples) n'ont qu'un makefile sans possibilité de compilation parallèle.

----------

