• [^] # Re: Sans SSE

    Posté par (site web personnel) . En réponse au journal Recherche de valeur dans un tableau et l'écosystème des compilateurs C++. Évalué à 2.

    Pour info, la version utilisant des long est presque encore 2 fois plus rapide sur ARM que la version int ...

    Par contre ça impose des contraintes d'alignement.

    size_t find_int_c4l(const int k, const int* v, const size_t n) {
     size_t i = 0;
     size_t n2 = n >> 1;
     const long* vl = (const long*)v;
     const long kl = (long)(((long)k>>32) + k);
     unsigned int index = 0;
     for (; i <= n2; i += 8, vl += 8) {
     index = 0;
     __builtin_prefetch(vl + 256, 0, 1);
     index = vl[0] != kl ? index : 1;
     index = vl[1] != kl ? index : 1;
     index = vl[2] != kl ? index : 1;
     index = vl[3] != kl ? index : 1;
     index = vl[4] != kl ? index : 1;
     index = vl[5] != kl ? index : 1;
     index = vl[6] != kl ? index : 1;
     index = vl[7] != kl ? index : 1;
     if (index == 1) {
     break;
     }
     }
     if (index == 0) return i;
     else
     for (int j = 0; i < 8; j++) {
     if (vl[j] == kl) return i + j; 
     //Attention, il == 2 * i...
     }
    }