Domanda

devo costruire un simulatore dual-core in C (in realtà è una simulazione di memoria multilivello, cache L1 / L2, blocco sostituzione, ecc). Cosa è, sto avendo un periodo difficile capire un modo per sincronizzare i nuclei (che sto programmazione come thread). Tutte le idee come potrei fare un orologio globale? Devo cambiare da discussioni a processi figlio? Grazie in anticipo

È stato utile?

Soluzione

Quindi molte opzioni qui: dal momento che si potrebbe finire-up di supporto interazioni complesse con più thread, si potrebbe desiderare di considerare l'utilizzo di un "orologio virtuale" con un messaggio di passaggio "bus" . In questo modo, avrete più tempo per concentrarsi sulla funzionalità di base, invece di debug della logica synchonization ...

Con questa tecnica, è possibile costruire uno Stato-macchina (vedere qui ) per thread "attore" (caso peggiore) e preoccuparsi meno di mutex / condizioni. Una volta che hai questa base, sarete in grado di gestire casi che si manifestano mid-stream (ad esempio, "ho dimenticato questo dettaglio ... non preoccuparti, basta aggiungere uno stato qui ... non c'è bisogno di ri -shuffle miei mutex).

Inoltre, dal momento che a fare la simulazione è tutto "tempo virtuale" (dal momento che non è possibile eseguire in tempo reale!), Quindi avere un'architettura di base sulla base di un "orologio virtuale" astrae il problema ad un livello appropriato.

Altri suggerimenti

Si potrebbe avere un filo di clock più N discussioni processore. Il filo orologio può esplicitamente effettuare chiamate a ciascun thread processore per fare 1 fase di lavorazione. Ogni thread processore riceve una chiamata dal thread orologio doStep(); fa un passo, poi ritorna il controllo al filo orologio.

Si potrebbe anche casuale l'ordine in cui i fili del processore sono chiamati a fare passi in modo che è molto più probabile per la cattura di bug nel codice del client.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top