2017-03-27 2 views
1

Je regardais this ANL Training video et ils montrent commentComment AVX-512CD (détection de conflit) diffère-t-il de l'accès aux variables atomiques?

void Histogram (const float* age, int* const hist, const int n, const float group_width, const int m) { 
    const float oogw = 1.0f/group_width; 
    // Populating the histogram. 
    for(int i = 0; i < n; i++) { 
     // Calculating the index of the bin age[i] goes to. 
     const int j = (int) (age[i] * oogwflh); 
     // Incrementing the appropriate bin in the histogram. 
     hist[j]++; 
    } 
} 

Et la boucle verctorized obtient. Avec l'instruction this. https://youtu.be/5IHqKKxuLM0?list=PLGj2a3KTwhRa__pANkWixmIZWBLQkEhZD&t=641

Comment il est diferent de Atomics et est-il rentable pour espérer compter sur le soutien de la détection des conflits de compilateurs sur le niveau d'instruction (pour difrent enteties par exemple POD struct) à l'avenir?

Répondre

1

Les instructions de détection de conflit AVX512 détectent les conflits qui se produisent lorsqu'une instruction de dispersion unique écrit plusieurs fois dans le même magasin. Ceci est un conflit entre différentes lignes de vecteurs dans la même instruction. Les opérations atomiques protègent contre les conditions de concurrence qui se produisent lorsque plusieurs CPU logiques exécutent un chargement/stockage à la même adresse "en même temps". Ainsi, vous avez besoin des instructions de détection de conflit si votre code est vectorisé même s'il fonctionne avec un seul thread, alors que vous n'avez pas besoin d'opérations atomiques tant que votre code n'est pas parallélisé et exécuté avec de nombreux threads.