8 - Périphériques initiateurs
}}}
{{{#!protected
Pas de question de cours cette fois. Je vais vous demander de lire et de commenter dans le compte-rendu les codes proposés.
-- 01_sequentiel
[[Image(htdocs:img/image-seq.png,nolink,center,height=230)]]
Dans cette version, il n'y a pas d'OS, tout est fait dans la fonction `kinit()`
Les trois étapes (lecture disque, traitement, affichage) sont faites séquentiellement
- Ouvrez le code pour voir la boucle de traitement.
- Faites tourner la simulation, la durée de chaque étape s'affichent. Que pouvez-vous en conclure ?
- Essayez de retirer les invalidations du cache (dans `harch.c`), observez et expliquer le comportement.
- Expliquez l'usage des couples de variables globales (`BDBusy` et `BDLock`) et (`DMABusy` et `DMALock`) utilisées pour la synchronisation des étapes.
-- 02_parallel
[[Image(htdocs:img/image-parallel.png,nolink,center,height=230)]]
Dans cette version, les trois étapes sont faites en parallèle sous la forme d'un pipeline avec deux couples de buffer utilisés en altenance.
- Disk->BD->BUFIN[0]
- Disk->BD->BUFIN[1] & BUFIN[0]->CPU->BUFOUT[O]
- Disk->BD->BUFIN[0] & BUFIN[1]->CPU->BUFOUT[1] & BUFOUT[0]->DMA->FBF
- Disk->BD->BUFIN[1] & BUFIN[0]->CPU->BUFOUT[0] & BUFOUT[1]->DMA->FBF
- Disk->BD->BUFIN[0] & BUFIN[1]->CPU->BUFOUT[1] & BUFOUT[0]->DMA->FBF
- Disk->BD->BUFIN[1] & BUFIN[0]->CPU->BUFOUT[0] & BUFOUT[1]->DMA->FBF
- Disk->BD->BUFIN[0] & BUFIN[1]->CPU->BUFOUT[1] & BUFOUT[0]->DMA->FBF
- Disk->BD->BUFIN[1] & BUFIN[0]->CPU->BUFOUT[0] & BUFOUT[1]->DMA->FBF
- etc.
Questions
- Qu'est ce qu'on gagne à procéder ainsi ?
- Est-ce qu'on peut gagner plus ?
## 03_multicore
Dans cette version, on utilise plusieurs cores pour faire le calcul en parallèle
- Que peut-on espérer gagner ?
- Utilisez de 1 à 8 cores et tracer une courbe de speedup ? Qu'en concluez-vous ? (notez que la simulation se fige acutuellement mais je n'ai pas eu le temps de débugger...)
- Expliquez le rôle de la variable working.
- Retirez l'invalidation du cache de la fonction compute(), observez et expliquez.
- Pourquoi certaines parties ne doivent être traitées que par le CPU 0 ?