Temps et parallélisme Consommation et température Prototypage virtuel de système sur puce pour une simulation rapide et fidèle Matthieu Moy Verimag (Grenoble INP) Grenoble, France 29 janvier 2014 Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 1 / 21 >
57
Embed
Prototypage virtuel de système sur puce pour une ... · Temps et parallélisme Consommation et température Prototypage virtuel de système sur puce pour une simulation rapide et
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Temps et parallélisme Consommation et température
Prototypage virtuel de système sur puce pour unesimulation rapide et fidèle
Matthieu Moy
Verimag (Grenoble INP)Grenoble, France
29 janvier 2014
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 1 / 21 >
Temps et parallélisme Consommation et température
Plan
1 Temps et parallélisme
2 Estimation de consommation et température
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 2 / 21 >
Temps et parallélisme Consommation et température
Plan
1 Temps et parallélisme
2 Estimation de consommation et température
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 2 / 21 >
Temps et parallélisme Consommation et température
Parallélisation des simulations
SPI
I2C
LIN
CAN Ethernet
USB
WIFI
GPU
MEM CTLR
CORE
ITC
MMU
TIMER
UART
PWM
PRCMU
CORE
ITC
MMU
TIMER
UART
Capteur
Capteur
DOCSIS
Compo
DISPLAY
Audio
H.265
CORE
ITC
MMU
TIMER
UART
CORE
ITC
MMU
TIMER
UART
DAC
DAC
ADC
ADC
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 3 / 21 >
Temps et parallélisme Consommation et température
Problèmes et solutions pour l’exécution parallèle deSystemC/TLM
(1) Ordre d’exécution imposé par la sémantique de SystemC(2) Accès concurrent aux ressources partagées
(comme x++ sur une variable globale)
; Pas de solution efficace 100% automatique pour TLM
Notre proposition = des constructions en plus :Désynchronisation (1) / Synchronisation (2)
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 4 / 21 >
Temps et parallélisme Consommation et température
Problèmes et solutions pour l’exécution parallèle deSystemC/TLM
(1) Ordre d’exécution imposé par la sémantique de SystemC(2) Accès concurrent aux ressources partagées
(comme x++ sur une variable globale)
; Pas de solution efficace 100% automatique pour TLM
Notre proposition = des constructions en plus :Désynchronisation (1) / Synchronisation (2)
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 4 / 21 >
Temps et parallélisme Consommation et température
Problèmes et solutions pour l’exécution parallèle deSystemC/TLM
(1) Ordre d’exécution imposé par la sémantique de SystemC(2) Accès concurrent aux ressources partagées
(comme x++ sur une variable globale)
; Pas de solution efficace 100% automatique pour TLM
Notre proposition = des constructions en plus :Désynchronisation (1) / Synchronisation (2)
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 4 / 21 >
Temps et parallélisme Consommation et température
SC-DURING: l’idée
SC_THREAD_1
SC_THREAD_2
...
SC_THREAD_N
OS thread_1
OS thread_2
OS thread_N
SystemCFils d’exécution OS
(thread)
SystemC non-modifiéCertains calculs délégués à d’autres threadsSynchronisation faible entre SystemC et les threads grâce auxtâches avec durée
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 5 / 21 >
Temps et parallélisme Consommation et température
Temps simulé en SystemC et sc-duringS
yste
mC
sc-d
urin
g
A
B
P
Q
Processus A://Calculf();//Temps pris par fwait(20);
f()wait(20)
Processus P:g();wait(20);during(15, h);
g()wait(20)
h()
i() j()
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 6 / 21 >
Temps et parallélisme Consommation et température
Temps simulé en SystemC et sc-duringS
yste
mC
sc-d
urin
g
A
B
P
Q
Processus A://Calculf();//Temps pris par fwait(20);
f()wait(20)
Processus P:g();wait(20);during(15, h);
g()wait(20)
h()
i() j()
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 6 / 21 >
Temps et parallélisme Consommation et température
Temps simulé en SystemC et sc-duringS
yste
mC
sc-d
urin
g
A
B
P
Q
Processus A://Calculf();//Temps pris par fwait(20);
f()wait(20)
Processus P:g();wait(20);
during(15, h);
g()wait(20)
h()
i() j()
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 6 / 21 >
Temps et parallélisme Consommation et température
Temps simulé en SystemC et sc-duringS
yste
mC
sc-d
urin
g
A
B
P
Q
Processus A://Calculf();//Temps pris par fwait(20);
f()wait(20)
Processus P:g();wait(20);during(15, h);
g()wait(20)
h()
i() j()
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 6 / 21 >
Temps et parallélisme Consommation et température
Temps simulé en SystemC et sc-duringS
yste
mC
sc-d
urin
g
A
B
P
Q
Processus A://Calculf();//Temps pris par fwait(20);
f()wait(20)
Processus P:g();wait(20);during(15, h);
g()wait(20)
h()
i() j()
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 6 / 21 >
Temps et parallélisme Consommation et température
Impact sur le parallélisme
P1
P2
P3
P4
Recouvrement entre tâches ; exécution parallèle
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 7 / 21 >
Temps et parallélisme Consommation et température
Impact sur le parallélisme
P1
P2
P3
P4
Recouvrement entre tâches ; exécution parallèle
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 7 / 21 >
Temps et parallélisme Consommation et température
Impact sur le parallélisme
P1
P2
P3
P4
Recouvrement entre tâches ; exécution parallèle
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 7 / 21 >
Temps et parallélisme Consommation et température
SC-DURING: première implémentationvoid during(sc_core::sc_time d,
std::function<void()> f) {
1 std::thread t(f); // Création du thread
2 sc_core::wait(d); // SystemC s’exécute
3 t.join(); // Attente de terminaison}
A
B
C
Thread
during(d, f);
création duthread
f
2 wait(d)join()
3
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 8 / 21 >
Temps et parallélisme Consommation et température
SC-DURING: première implémentationvoid during(sc_core::sc_time d,
std::function<void()> f) {
1 std::thread t(f); // Création du thread
2 sc_core::wait(d); // SystemC s’exécute
3 t.join(); // Attente de terminaison}
A
B
C
Thread
during(d, f);
création duthread
f
2 wait(d)join()
3
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 8 / 21 >
Temps et parallélisme Consommation et température
SC-DURING: première implémentationvoid during(sc_core::sc_time d,
std::function<void()> f) {
1 std::thread t(f); // Création du thread
2 sc_core::wait(d); // SystemC s’exécute
3 t.join(); // Attente de terminaison}
A
B
C
Thread
1
during(d, f);
création duthread
f
2 wait(d)join()
3
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 8 / 21 >
Temps et parallélisme Consommation et température
SC-DURING: première implémentationvoid during(sc_core::sc_time d,
std::function<void()> f) {
1 std::thread t(f); // Création du thread
2 sc_core::wait(d); // SystemC s’exécute
3 t.join(); // Attente de terminaison}
A
B
C
Thread
1
during(d, f);
création duthread
f
2 wait(d)
join()
3
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 8 / 21 >
Temps et parallélisme Consommation et température
SC-DURING: première implémentationvoid during(sc_core::sc_time d,
std::function<void()> f) {
1 std::thread t(f); // Création du thread
2 sc_core::wait(d); // SystemC s’exécute
3 t.join(); // Attente de terminaison}
A
B
C
Thread
1
during(d, f);
création duthread
f
2 wait(d)
join()
3
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 8 / 21 >
Temps et parallélisme Consommation et température
SC-DURING: première implémentationvoid during(sc_core::sc_time d,
std::function<void()> f) {
1 std::thread t(f); // Création du thread
2 sc_core::wait(d); // SystemC s’exécute
3 t.join(); // Attente de terminaison}
A
B
C
Thread
1
during(d, f);
création duthread
f
2 wait(d)join()
3
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 8 / 21 >
Temps et parallélisme Consommation et température
SC-DURING: première implémentationvoid during(sc_core::sc_time d,
std::function<void()> f) {
1 std::thread t(f); // Création du thread
2 sc_core::wait(d); // SystemC s’exécute
3 t.join(); // Attente de terminaison}
A
B
C
Thread
1
during(d, f);
création duthread
f
2 wait(d)join()
3
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 8 / 21 >
Temps et parallélisme Consommation et température
SC-DURING: nouvelles primitives de synchronisationextra_time(t): Augmenter la durée de la tâche en cours
Pwait(5)
duréeinitiale extra time
catch_up(): Attendre que SystemC ait atteint la fin de la tâche
while (!c) {extra_time(10);catch_up(); // Assure l’équité
}
sc_call(f): Appel de f dans le contexte de SystemC
x++; // Interdit dans une// tâche avec durée
sc_call([]{ x++; }); // OK
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 9 / 21 >
Temps et parallélisme Consommation et température
SC-DURING: nouvelles primitives de synchronisationextra_time(t): Augmenter la durée de la tâche en cours
Pwait(5)
duréeinitiale extra time
catch_up(): Attendre que SystemC ait atteint la fin de la tâche
while (!c) {extra_time(10);catch_up(); // Assure l’équité
}
sc_call(f): Appel de f dans le contexte de SystemC
x++; // Interdit dans une// tâche avec durée
sc_call([]{ x++; }); // OK
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 9 / 21 >
Temps et parallélisme Consommation et température
SC-DURING: nouvelles primitives de synchronisationextra_time(t): Augmenter la durée de la tâche en cours
Pwait(5)
duréeinitiale extra time
catch_up(): Attendre que SystemC ait atteint la fin de la tâche
while (!c) {extra_time(10);catch_up(); // Assure l’équité
}
sc_call(f): Appel de f dans le contexte de SystemC
x++; // Interdit dans une// tâche avec durée
sc_call([]{ x++; }); // OK
Matthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 9 / 21 >
Temps et parallélisme Consommation et température
SC-DURING: implémentations
SC_THREAD_1
SC_THREAD_2
...
SC_THREAD_N
sync_task_1 OS thread_1
sync_task_2 OS thread_2
sync_task_N OS thread_N
SystemCFils d’exécution OS
(thread)
Stratégies:SEQ Séquentiel (= référence)
THREAD Création + destruction de thread pour chaque tâchePOOL Ensemble de threads pré-alloués
ONDEMAND Thread créé sur demande et réutiliséMatthieu Moy (Verimag) Prototypage virtuel de SoCs 29 janvier 2014 < 10 / 21 >