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
Dans cette version, il n'y a pas d'OS, tout est fait dans la fonction `kinit()`
Les trois étapes du slide sont faites séquentiellement
- Faites tourner la simulation, la durée des étapes s'affichent. Que pouvez-vous en conclure ?
- Essayez de retirer les invalidations du cache (dans harch.c), observez le comportement et expliquer
- Expliquez l'usage des couples de variables globales (BDBusy et BDLock) et (DMABusy et DMALock)
-- 02_parallel
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 ?