Je dois construire un simulateur de processeur dual-core en C (il s'agit en fait d'une simulation de mémoire multi-niveaux, cache L1/L2, substitution de bloc, etc). Chose est, j'ai du mal à trouver un moyen de synchroniser les cœurs (que je suis en train de programmer en tant que threads). Des idées comment je pourrais faire une horloge mondiale? Dois-je passer des threads aux processus enfants? Merci à l'avanceFaçon de synchroniser deux cœurs en simulation
Répondre
Tant d'options: puisque vous pourriez finir par soutenir, des interactions complexes avec plusieurs threads, vous voudrez peut-être envisager d'utiliser une « horloge virtuelle » avec un passage de messages « bus ». De cette façon, vous aurez plus de temps pour se concentrer sur les fonctionnalités de base au lieu de débogage la logique de synchonisation ...
En utilisant cette technique, vous pouvez construire une machine d'état (voir here) par thread « acteur » (pire des cas) et s'inquiètent moins des mutex/conditions. Une fois que vous avez cette base, vous serez en mesure de gérer les cas qui apparaissent à mi-flux (par exemple, «j'ai oublié ce détail ... pas de soucis, il suffit d'ajouter un état ici ... ne pas avoir à re -shuffle mes mutexes)
De plus, puisque faire de la simulation est une question de "temps virtuel" (puisque vous ne pouvez pas exécuter en temps réel!), alors avoir une architecture de base basée sur une "horloge virtuelle" résume le problème.
L'affectation nécessite probablement un modèle de mémoire partagée au lieu d'un modèle de transmission de message car c'est ainsi que les machines réelles sont construites aujourd'hui. – Dave
@Dave: soyez à mon avis et essayez de travailler dessus tout en respectant tous les détails complexes d'un processeur. Certes j'ai construit de tels simulateurs il y a 15 ans et je suis un peu rouillé sur ce genre de projet, mais j'irais quand même avec ma solution même si je considère mes "nouvelles" 15 années d'expérience. – jldupont
@Dave: une dernière chose, savez-vous comment les outils de simulation (des sociétés telles que Mentor, Synopsys fonctionnent? ... des horloges virtuelles ...) – jldupont
Vous pouvez avoir un thread d'horloge plus N threads de processeur.Le thread d'horloge peut explicitement faire des appels à chaque thread de processeur pour faire 1 étape de traitement.Tout thread de processeur reçoit un appel du thread d'horloge à doStep()
; il fait un pas, puis ramène le contrôle au fil d'horloge
Vous pouvez également rendre aléatoire l'ordre dans lequel les unités d'exécution du processeur sont appelées pour effectuer des étapes de sorte que vous soyez plus susceptible d'intercepter des bogues dans votre code client.
... cool projet! – jldupont