J'ai écrit un programme multi-thread pour démontrer l'effet hors service du processeur Intel. Le programme est joint à la fin de ce post. Le résultat attendu doit être celui où x est imprimé 42 ou 0 par le gestionnaire1. Cependant, le résultat actuel est toujours 42, ce qui signifie que l'effet hors service ne se produit pas.Programme de test pour l'effet hors service du processeur
J'ai compilé le programme avec la commande "gcc -pthread -O0 out-of-order-test.c" Je lance le programme compilé sur Ubuntu 12.04 LTS (noyau Linux 3.8.0-29-generic) sur Intel Processeur IvyBridge Intel (R) Xeon (R) CPU E5-1650 v2.
Est-ce que quelqu'un sait ce que je devrais faire pour voir l'effet hors service?
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int f = 0, x = 0;
void* handler1(void *data)
{
while (f == 0);
// Memory fence required here
printf("%d\n", x);
}
void* handler2(void *data)
{
x = 42;
// Memory fence required here
f = 1;
}
int main(int argc, char argv[])
{
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, handler1, NULL);
pthread_create(&tid2, NULL, handler2, NULL);
sleep(1);
return 0;
}
Ce n'est pas à propos de hors-service, mais une condition de course. (x86 est une architecture de chargement/stockage en ordre, btw.). – Olaf
@Olaf, Merci pour votre commentaire. Cependant, x86 a au moins un problème de chargement après magasin selon http://stackoverflow.com/questions/7346893/out-of-order-execution-and-memory-fences. S'il a la dépendance de données sur un noyau, je sais que le matériel gardera la commande. Sinon, le mécanisme hors service peut exécuter l'instruction suivante avant l'instruction précédente. – Mike
hors service ici ne concerne pas l'exécution d'instruction de toute façon.Très peu disponible pour une architecture multi-enjeux comme (presque) toutes les architectures haut de gamme. C'est à propos de charge/magasin. Mais vous n'exploiterez rien ici avec votre coe. Et probablement pas avec n'importe quel code C - au moins pas fiable. Ce dernier simplement parce que vous avez besoin d'une séquence d'instructions spécifique, dont vous n'aurez pas le contrôle lors de l'utilisation d'un compilateur. Alors, plongez dans l'assembleur et essayez. Bonne chance. – Olaf