• [^] # Re: Multicoeur ?

    Posté par . En réponse à la dépêche Intel libère TBB. Évalué à 1.

    > Par contre le mutex te bouffe toujours meme si tu as moins de thread que de cpu : c'est une demande de synchro, il y a donc du code, un test_and_set ,

    C'est ridicule, c'est fait en une centaine de cycle cpu maxi. A moins d'avoir plus d'un millions de lock par seconde, ce n'est pas un problème de performance.

    > voir une mise en attente si la ressource est indisponible.

    Mise en attente qui ne coûte rien puisque le thread n'a rien d'autre à faire.

    Si tu ne veux pas de "contexte switch", tu peux remplacer les locks fournit par le système avec un truc dans ce goût :
    volatile int i = 0 ;
    lock() {
    while (true) {
    while (i) ;
    if (++i == 1) {
    break ;
    }
    else {
    // lock déjà pris par un autre
    --i ;
    }
    }
    unlock() {
    --i ;
    }

    Ça doit marcher mais tu ne vas pratiquement rien gagner en performance :-(. Si tu as plus de cpu que de thread, tu ne perds pas en performance. Mais si tu as moins de cpu que de thread, tu vas perdre énormément en performance puisque des cpu seront utilisés à faire des "while(i) ;" alors qu'il pourrait faire des trucs vraiment utile.

    Donc les locks (mutex, critical section sous windows) ne coûte pratiquement rien et sont très très utiles.