Ce paragraphe est la traduction de la page Computation credit du site Boinc en date du 1er novembre 2005.  

Pour signaler une mise à jour de cette page du site Boinc, merci de cliquer ici pour rejoindre le forum Boinc.fr.

Chaque projet vous donne des crédits pour les calculs que vos ordinateurs exécutent pour le projet. L’unité de crédit de BOINC, le Cobblestone, est de 1/100 jour de temps processeur sur un ordinateur de référence dont les performances sont à la fois:
  • 1000 MIPS d’une précision double basées sur les benchmarks Whetstone.
  • 1000 VAX MIPS basées sur les benchmarks Dhrystone.
Ces bencmarks sont des prévisions imparfaites de la performance d’une application, mais sont suffisament corrects pour nous.  
 
Le crédit est aussi susceptible de refléter les capacités du réseau ou de stockage en mémoire aussi bien que de calcul.  
 
 
Comment le crédit est-il déterminé?
Quand votre ordinateur renvoie un résultat, Boinc détermine le crédit reclamé (claimed credit) de l’une de deux façons suivantes :  
 
  • En règle générale, le crédit reclamé est le résultat du temps de travail multiplié par les benchmarks du processeur mesurés par le logiciel Boinc. NOTE : Le logiciel Boinc n’est pas optimisé pour des processeurs spécifiques. Ces benchmarks peuvent être plus faibles que ceux mesurés par d’autres logiciels.
  • Certaines applications déterminent elles-mêmes le crédit reclamé, et le transmettent à Boinc. Cela pourrait être le cas d’applications utilisant des coprocesseurs graphiques ou du matériel non-CPU.

Le crédit reclamé est transmis au projet lorsque l’ordinateur communique avec le serveur de ce projet. Le crédit accordé (granted credit) est susceptible d’être différent du crédit reclamé et il peut y avoir un délai de plusieurs heures ou jours avant qu’il soit accordé. La raison est que certains projets n’accordent de crédit qu’après validation du résultat.
 
Comment le crédit moyen récent est calculé (Recent average credit)
Les projets tiennent compte de deux types de crédit :
 
  • Crédit total : Le nombre de total Cobblestones exécutés et accordés.
  • Crédit moyen récent : Le nombre moyen de Cobblestones accordés par jour récemment. Cette moyenne est diminuée par un facteur deux chaque semaine, selon l’algorithme donné ci-dessous.

Les deux types de crédit (total et moyenne récente) sont mis à jour pour chaque utilisateur, hôte et équipe.  
 
Chaque fois que le nouveau crédit est accordé, la fonction suivante est employée pour mettre à jour le crédit moyen récent de l’hôte, de l’utilisateur et de l’équipe:
 
  void update_average(
    double work_start_time,       // when new work was started
                                    // (or zero if no new work)
    double work,                    // amount of new work
    double half_life,
    double& avg,                    // average work per day (in and out)
    double& avg_time                // when average was last computed
) {
    double now = dtime();
 
    if (avg_time) {
        // If an average R already exists, imagine that the new work was done
        // entirely between avg_time and now.
        // That gives a rate R'.
        // Replace R with a weighted average of R and R',
        // weighted so that we get the right half-life if R' == 0.
        //
        // But this blows up if avg_time == now; you get 0*(1/0)
        // So consider the limit as diff->0,
        // using the first-order Taylor expansion of
        // exp(x)=1+x+O(x^2).
        // So to the lowest order in diff:
        // weight = 1 - diff ln(2) / half_life
        // so one has
        // avg += (1-weight)*(work/diff_days)
        // avg += [diff*ln(2)/half_life] * (work*SECONDS_PER_DAY/diff)
        // notice that diff cancels out, leaving
        // avg += [ln(2)/half_life] * work*SECONDS_PER_DAY
 
        double diff, diff_days, weight;
 
        diff = now - avg_time;
        if (diff<0) diff=0;
 
        diff_days = diff/SECONDS_PER_DAY;
        weight = exp(-diff*M_LN2/half_life);
 
        avg *= weight;
 
        if ((1.0-weight) > 1.e-6) {
            avg += (1-weight)*(work/diff_days);
        } else {
            avg += M_LN2*work*SECONDS_PER_DAY/half_life;
        }
    } else if (work) {
        // If first time, average is just work/duration
        //
        double dd = (now - work_start_time)/SECONDS_PER_DAY;
        avg = work/dd;
    }
    avg_time = now;
}

 
 
Calculer la valeur moyenne du crédit moyen récent (RAC)
 
Boinc ne met à jour le RAC que lorsqu’un un nouveau crédit est accordé. Les interfaces qui exportent le RAC exportent alors aussi le temps depuis lequel le RAC a été mis à jour pour la dernière fois. Pour obtenir la valeur moyenne courante du RAC, vous devez le diminuer sur la base du temps écoulé depuis cette dernière mise à jour :  
 
function decay_average($avg, $avg_time, $now = 0) {
   $M_LN2 = 0.693147180559945309417;
   $credit_half_life = 86400 * 7;
   if ($now == 0) {
       $now = time();
   }
   $diff = $now - $avg_time;
   $weight = exp(-$diff * $M_LN2/$credit_half_life);
   $avg *= $weight;
   return $avg;
}

 
Si vous n’appliquez pas cette diminution, les utilisateurs inactifs auront un RAC anormalement élevé.
Le code PHP pour la diminution se trouve dans les fichiers html/inc/credit.inc et html/inc/host.inc.  
 
 
Explications complémentaires

Ces eclaircissements sont l’oeuvre de Mab74 sur le forum Boinc.fr.  
 
Si certains projets ne sont pas satisfaits de la manière dont le logiciel BOINC évalue la rapidité d’un ordinateur, elles peuvent mettre au point leur propre méthode de comptage de crédit, et établir leur propre classement.
 
 
Pour estimer le nombre de crédits que vous pouvez réclamer sur une période donnée, le logiciel BOINC commence par évaluer la rapidité de votre ordinateur en utilisant un benchmark. Prenons le cas de 2 ordinateurs, l’un deux fois plus rapide que l’autre. L’ordinateur rapide mettra deux fois moins de temps à effectuer une tâche que l’ordinateur lent. La multiplication du temps de travail par le résultat du benchmark sera donc environ la même pour ces deux ordinateurs, donc ils seront crédités du même nombre de crédits environ pour avoir chacun effectué cette tâche.
 
 
http://jerome.goy.free.fr/BOINC/credit_moyen.gif
 
A l’instant t1, l’utilisateur a accumulé un certain nombre de crédits moyens récents.
Si une mise à jour des crédits moyens récents est calculée après une durée équivalente à une demi-vie (à l’instant t2), ce nombre de crédits a été divisé d’un facteur 2. On y ajoute les crédits moyens obtenus pendant la période [t1-t2]. Si le taux d’occupation de l’ordinateur est resté le même, et que l’intervalle de temps entre t2 et t1 représente la moitié de la durée de t1, on aura accumulé pendant la période [t1-t2] deux fois moins de Coblestones que pendant la durée t1. La partie ajoutée représentera donc environ la moitié du nombre de crédits moyens récents de t1. On a donc au total après calcul sur t2 le même nombre de crédits moyens qu’en t1.  
 
La valeur du crédit moyen récent ne dépend pas de la fréquence de la mise à jour du calcul. Supposons que le calcul soit effectué après une période plus courte (à l’instant t3). Le nombre de crédits restants de la période précédente n’a pas eu le temps de beaucoup décroître (il nous en reste 75%). On ajoute à ce chiffre les crédits moyens obtenus pendant la période [t2-t3]. Puisque cette période est plus courte que la période précédente, on aura moins de crédits à rajouter. Au final, on retrouve le même résultat.  
 
Plaçons-nous maintenant après une autre période de calcul équivalente à une demi-vie (instant t4). Il nous reste la moitié des crédits de t3. Supposons que l’ordinateur pendant cette période a travaillé plus souvent qu’avant. Nous aurons plus de crédit moyens à rajouter, donc le total va augmenter.  
 
Si après cette période l’ordinateur n’est plus utilisé, ces crédits vont décroître régulièrement. A l’instant t5, il ne reste plus que 30% des crédits obtenus à t4. Puisque l’ordinateur n’a pas travaillé pendant cette dernière période, il n’y a aucun crédit à ajouter. Finalement, le résultat aura baissé.