tp
This commit is contained in:
parent
200263a90e
commit
070b0481eb
46 changed files with 1648 additions and 52 deletions
67
A1/Cours.md
67
A1/Cours.md
|
@ -1,6 +1,71 @@
|
|||
# Cours A1
|
||||
|
||||
## Cours/TP 12/10
|
||||
|
||||
Injection de fautes, exploiter les failles.
|
||||
Mecanismes cryptographiques, algo mathematiquement robustes. Quand on veut les implémenter, ils peuvent êtres soumis à différentes attaques.
|
||||
|
||||
Attaque par injection de code. (Injecter des données, qui peuvent correspondre à du code donné, exploitation de bug dans le code logiciel)
|
||||
Attaque par canaux auxiliaires. (temps d'execution, consommation elec, connexion)
|
||||
|
||||
Raison d'optimisation (multiplication), multiplier par 0 -> pas de calcul, temps de calcul très long donc si secret = 0, temps de calcul court.
|
||||
Attaque physique. (Ouvrir le circuit, sonder (microprobing) entre la mémoire et le processeur, FIB ?)
|
||||
|
||||
Certaines attaques nécessitent le composant physique, d'autres à distances (marron et bleu p4)
|
||||
Tirs lasers pour modifier la mémoire, injecter des fautes.
|
||||
|
||||
|
||||
p9. nécessite une précision en cycle processeur très grande. Il faut cibler une ou quelques cycles.
|
||||
p10. Algo plus connus/utilisé.
|
||||
|
||||
Evaluation : QCM sur toutes les parties. (qu'est-ce qu'une attaque etc... Contres mesures et classification) Dans quel cas on utilise certaines contre mesure et dans cette attaque là quelle contre mesure utiliser ?
|
||||
|
||||
p12. CRC pour protéger les CSP (critical security parameters) pour éviter de changer les p,q qui sont premiers.
|
||||
|
||||
p14. On faute l'exposant d_i de proche en proche pour obtenir les m_i
|
||||
p15. Contre mesure = rajouter un produit avec un nombre aléatoire (Stratégie Résilience)
|
||||
|
||||
Vérification de valeur -> Stratégie détection
|
||||
|
||||
p19. On déplace l'instant d'exécution de l'instruction sensible -> Observation de la consommation électrique
|
||||
On peut rajouter des capteurs (lumière pour l'ouverture de la puce, f_clk pour le downclocking pour observer les signaux)
|
||||
|
||||
### TD
|
||||
|
||||
Q1 Donner l'équation de R_16 en fonction de R_15 et L_15
|
||||
R_16 = L_15 ^ f(R_15,K_16) #f(.,.) p40
|
||||
f(R_15,K_16) = P(S_1-8(E(R_15) ^ K_16))
|
||||
|
||||
Q2 Entrée R_15 fautée : R_15'
|
||||
R_16' = L_15' ^ P(S_1-8(E(R_15') ^ K_16))
|
||||
|
||||
Q3 Delta(R_16) = R_16 ^ R_16'
|
||||
= Delta(L_15) ^ P(a) ^ P(b)
|
||||
= Delta(L_15) ^ P(S_1-8(E(R_15) ^ K_16) ^ S_1-8(E(R_15') ^ K_16))
|
||||
|
||||
Q4
|
||||
Connues : R_16, R_15 = L_16 et R_15' = L_16'
|
||||
Inconnues : Delta(L_15) et K_16
|
||||
|
||||
On veut Delta(L_15) = 0 donc ne pas toucher L_15 lors de la faute.
|
||||
|
||||
Q5
|
||||
P⁻¹(Delta(R_16)) = S_1-8(E(R_15) ^ K_16) ^ S_1-8(E(R_15') ^ K_16)
|
||||
|
||||
On teste les clés K_16 pour avoir égalité des deux côtés, si elle c'est vérifié, la clé est une candidate.
|
||||
|
||||
Défi 4 :
|
||||
|
||||
Q1
|
||||
P⁻¹_1(Delta(R_16)) = S_1(E(R_15) ^ K_16,1) ^ S_1(E(R_15') ^ K_16,1)
|
||||
|
||||
|
||||
## 19/10 Side-Channel Analysis
|
||||
|
||||
p9: ce qu'on attaque, c'est pas l'algo, c'est l'implémentation de celui-ci
|
||||
p9: ce qu'on attaque, c'est pas l'algo, c'est l'implémentation de celui-ci.
|
||||
|
||||
p10: 10000 essais en force brute, 40 avec canal auxiliaire en regardant le temps d'exécution et sa variation pour chaque digit.
|
||||
|
||||
p15: le pic de courant indique le nombre de portes logiques qui ont changé d'état
|
||||
|
||||
p58: Si on a pas de connaissances à priori sur le système, on regarde une fenetre temporelle élevée pour déterminer la trace. On réduit la fenêtre quand on cible l'attaque.
|
||||
|
|
BIN
B1/WCET-CACHE-STREC-18.pdf
Normal file
BIN
B1/WCET-CACHE-STREC-18.pdf
Normal file
Binary file not shown.
|
@ -2,3 +2,6 @@
|
|||
|
||||
Niveau de criticalité : tolérance de fautes, fautes critiques
|
||||
|
||||
# Cours 26/10
|
||||
|
||||
Boundaries of a tasks time
|
BIN
B1/strec-ipet.tar_
Normal file
BIN
B1/strec-ipet.tar_
Normal file
Binary file not shown.
13
B1/strec-ipet/Makefile
Normal file
13
B1/strec-ipet/Makefile
Normal file
|
@ -0,0 +1,13 @@
|
|||
|
||||
export PATH := $(PATH):/infres/ir600/users/brandner/patmos-misc/local/bin/
|
||||
|
||||
OWCET=owcet
|
||||
|
||||
.PHONY: analyse clean
|
||||
|
||||
analyse: heli heli.ff patmos_wcet.osx patmos_wcet/caches.xml patmos_wcet/memory.xml patmos_wcet/pipeline.xml
|
||||
@mkdir -p out
|
||||
$(OWCET) -f heli.ff -s patmos_wcet.osx heli
|
||||
|
||||
clean:
|
||||
rm -rf out
|
BIN
B1/strec-ipet/heli
Executable file
BIN
B1/strec-ipet/heli
Executable file
Binary file not shown.
29
B1/strec-ipet/heli.ff
Normal file
29
B1/strec-ipet/heli.ff
Normal file
|
@ -0,0 +1,29 @@
|
|||
//**** jumptable (source: llvm)
|
||||
// TODO: find corresponding C and assembly code (Exercise 1).
|
||||
multibranch 0x20b00 to "processSensorData"+0x70,
|
||||
"processSensorData"+0x1b0,
|
||||
"processSensorData"+0x320,
|
||||
"processSensorData"+0x460;
|
||||
|
||||
//****
|
||||
loop "main"+0x4c 32;
|
||||
loop "main"+0x150 10; // assumed bound
|
||||
|
||||
//****
|
||||
// TODO: find tighter loop bound, later, specify loop bounds depending on
|
||||
// calling context (Exercise 2).
|
||||
loop "fixFilter"+0x24 10000;
|
||||
|
||||
//****
|
||||
loop "calibrateArom"+0x48 128;
|
||||
loop "calibrateArom"+0xf0 128;
|
||||
loop "calibrateArom"+0x190 128;
|
||||
|
||||
//****
|
||||
loop "processSensorData"+0xb8 8;
|
||||
loop "processSensorData"+0x214 32;
|
||||
loop "processSensorData"+0x384 32;
|
||||
loop "processSensorData"+0x4c0 32;
|
||||
|
||||
//****
|
||||
loop "runFlightPlan"+0x1bc 1; // watchdog loop
|
5
B1/strec-ipet/patmos_env
Normal file
5
B1/strec-ipet/patmos_env
Normal file
|
@ -0,0 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
|
||||
export PATH=$PATH:/infres/ir600/users/brandner/patmos-misc/local/bin/
|
||||
export LD_LIBRARY_PATH=$LD_LIBARY_PATH:/infres/ir600/users/brandner/patmos-misc/local/lib/
|
35
B1/strec-ipet/patmos_wcet.osx
Normal file
35
B1/strec-ipet/patmos_wcet.osx
Normal file
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<otawa-script
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
|
||||
<platform>
|
||||
<xi:include href="patmos_wcet/pipeline.xml"/>
|
||||
<xi:include href="patmos_wcet/memory.xml"/>
|
||||
<xi:include href="patmos_wcet/caches.xml"/>
|
||||
</platform>
|
||||
|
||||
<script>
|
||||
<config name="otawa::ILPNAME" value="out/ipet.lp"/>
|
||||
<config name="otawa::ipet::EXPLICIT" value="true"/>
|
||||
|
||||
<!-- TODO: uncomment the following line (Exercise 2) /> -->
|
||||
<!-- <step require="otawa::VIRTUALIZED_CFG_FEATURE" /> -->
|
||||
<step processor="tcrest::patmos_wcet::BBTimer">
|
||||
<config name="otawa::GRAPHS_OUTPUT_DIRECTORY" value="out"/>
|
||||
</step>
|
||||
|
||||
<!-- WCET computation -->
|
||||
<step require="tcrest::patmos::METHOD_CACHE_CONTRIBUTION_FEATURE"/>
|
||||
<step require="otawa::ipet::WCET_FEATURE"/>
|
||||
|
||||
<step processor="otawa::ipet::WCETCountRecorder"/>
|
||||
<step processor="otawa::display::CFGOutput">
|
||||
<config name="otawa::display::CFGOutput::PATH" value="out"/>
|
||||
</step>
|
||||
<!-- TODO: uncomment the following line (Exercise 4) /> -->
|
||||
<!-- <step processor="otawa::BBRatioDisplayer" /> -->
|
||||
</script>
|
||||
|
||||
</otawa-script>
|
||||
|
15
B1/strec-ipet/patmos_wcet/caches.xml
Normal file
15
B1/strec-ipet/patmos_wcet/caches.xml
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<cache-config>
|
||||
<dcache>
|
||||
<block_bits>5</block_bits>
|
||||
<way_bits>2</way_bits>
|
||||
<row_bits>9</row_bits>
|
||||
<miss_penalty>25</miss_penalty>
|
||||
</dcache>
|
||||
<icache>
|
||||
<block_bits>5</block_bits>
|
||||
<way_bits>2</way_bits>
|
||||
<row_bits>9</row_bits>
|
||||
<miss_penalty>25</miss_penalty>
|
||||
</icache>
|
||||
</cache-config>
|
14
B1/strec-ipet/patmos_wcet/memory.xml
Normal file
14
B1/strec-ipet/patmos_wcet/memory.xml
Normal file
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<memory>
|
||||
<banks>
|
||||
<bank>
|
||||
<name>RAM</name>
|
||||
<address><offset>0x00000000</offset></address>
|
||||
<size>0x1fffffff</size>
|
||||
<type>DRAM</type>
|
||||
<latency>25</latency>
|
||||
<writable>true</writable>
|
||||
<cachable>true</cachable>
|
||||
</bank>
|
||||
</banks>
|
||||
</memory>
|
54
B1/strec-ipet/patmos_wcet/pipeline.xml
Normal file
54
B1/strec-ipet/patmos_wcet/pipeline.xml
Normal file
|
@ -0,0 +1,54 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<processor class="otawa::hard::Processor">
|
||||
<arch>patmos</arch>
|
||||
<model>patmos</model>
|
||||
|
||||
<stages>
|
||||
|
||||
<stage id="FE">
|
||||
<name>FE</name>
|
||||
<width>2</width>
|
||||
<type>FETCH</type>
|
||||
</stage>
|
||||
|
||||
<stage id="DE">
|
||||
<name>DE</name>
|
||||
<width>2</width>
|
||||
<type>LAZY</type>
|
||||
</stage>
|
||||
|
||||
<stage id="EX">
|
||||
<name>EX</name>
|
||||
<width>2</width>
|
||||
<type>EXEC</type>
|
||||
<ordered>true</ordered>
|
||||
<fus>
|
||||
<fu id="ALU">
|
||||
<name>ALU</name>
|
||||
<width>2</width>
|
||||
<latency>1</latency>
|
||||
</fu>
|
||||
</fus>
|
||||
<dispatch>
|
||||
<inst>
|
||||
<type/>
|
||||
<fu ref="ALU"/>
|
||||
</inst>
|
||||
</dispatch>
|
||||
|
||||
</stage>
|
||||
|
||||
<stage id="MEM">
|
||||
<name>MEM</name>
|
||||
<width>2</width>
|
||||
<type>LAZY</type>
|
||||
</stage>
|
||||
|
||||
<stage id="CM">
|
||||
<name>CM</name>
|
||||
<width>2</width>
|
||||
<type>COMMIT</type>
|
||||
</stage>
|
||||
</stages>
|
||||
|
||||
</processor>
|
416
B1/strec-ipet/src/heli.c
Normal file
416
B1/strec-ipet/src/heli.c
Normal file
|
@ -0,0 +1,416 @@
|
|||
// helico.c
|
||||
// this code is inspired from: http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2006/rg242/webpage/ece%20476.htm
|
||||
|
||||
#include "io.h"
|
||||
|
||||
// define sensor channels
|
||||
#define GYRO_CHANNEL 0
|
||||
#define AROMX_CHANNEL 1
|
||||
#define AROMY_CHANNEL 2
|
||||
#define AROMZ_CHANNEL 3
|
||||
char currentChannel = GYRO_CHANNEL;
|
||||
|
||||
// define Helicopter states
|
||||
#define GROUND 0
|
||||
#define LANDING 1
|
||||
#define TAKEOFF 2
|
||||
#define HOVER 3
|
||||
char heliState = GROUND;
|
||||
|
||||
// define flight phases
|
||||
#define TAKEOFF_START 5
|
||||
#define HOVER_START 23
|
||||
#define LANDING_START 299
|
||||
#define LANDING_END 400
|
||||
#define GROUNDED_START 410
|
||||
|
||||
// define motor speeds
|
||||
#define MINIMUM_PWM_VALUE 0
|
||||
#define MAXIMUM_ROTOR_PWM_VALUE (100<<8)
|
||||
#define MARKS_PER_SEC 1600
|
||||
int pwm_ticks = 0;
|
||||
int marks = 0;
|
||||
volatile int sec = 0;
|
||||
|
||||
#define MAX_TAKEOFF_MOTOR_SPEED (95<<8)
|
||||
#define TAKEOFF_ROTOR_SPEED_INCR 16
|
||||
#define ROTOR_SPEED_INCR 8
|
||||
#define HOVER_ROTOR_SPEED_INCR_HIGH 2
|
||||
#define HOVER_ROTOR_SPEED_INCR_LOW 5
|
||||
#define MAX_STAB_MOTOR_SPEED (60<<8)
|
||||
#define MIN_STAB_MOTOR_SPEED 0
|
||||
#define STAB_SPEED_INCR 256
|
||||
#define MIN_LANDING_ROTOR_SPEED (50<<8)
|
||||
#define LANDING_ROTOR_SPEED_INCR 1
|
||||
|
||||
int topRotorSpeed = 0;
|
||||
int bottomRotorSpeed = 0;
|
||||
int stabMotorSpeed1 = 0;
|
||||
int stabMotorSpeed2 = 0;
|
||||
int stabMotorSpeed3 = 0;
|
||||
|
||||
// ADC
|
||||
char data_in;
|
||||
#define ADMUX_GYRO 0b01100000
|
||||
#define ADMUX_AROMX 0b01100001
|
||||
#define ADMUX_AROMY 0b01100010
|
||||
#define ADMUX_AROMZ 0b01100011
|
||||
|
||||
// Sensors
|
||||
uint8_t gyroCalibrateThresholdLow;
|
||||
uint8_t gyroCalibrateThresholdHigh;
|
||||
uint8_t aromXCalibrateThresholdLow;
|
||||
uint8_t aromXCalibrateThresholdHigh;
|
||||
uint8_t aromYCalibrateThresholdLow;
|
||||
uint8_t aromYCalibrateThresholdHigh;
|
||||
uint8_t aromZCalibrateThresholdLow;
|
||||
uint8_t aromZCalibrateThresholdHigh;
|
||||
uint8_t gyro[32];
|
||||
uint8_t aromX[128];
|
||||
uint8_t aromY[128];
|
||||
uint8_t aromZ[128];
|
||||
|
||||
|
||||
void updatePWM(void);
|
||||
void processSensorData(void) __attribute__((noinline));
|
||||
void runFlightPlan(void) __attribute__((noinline));
|
||||
void calibrateGyro(void);
|
||||
void calibrateArom(void);
|
||||
uint8_t fixFilter(uint8_t *f, int size) __attribute__((noinline));
|
||||
void addSample(uint8_t *f, int size, uint8_t value);
|
||||
|
||||
|
||||
void timer_interrupt(void){
|
||||
pwm_ticks++;
|
||||
marks++;
|
||||
if (marks == MARKS_PER_SEC){
|
||||
sec++;
|
||||
marks = 0;
|
||||
}
|
||||
updatePWM();
|
||||
}
|
||||
|
||||
void updatePWM(void){
|
||||
char command = 0;
|
||||
int ticks = pwm_ticks << 8;
|
||||
// generate PWM command for the 5 motors
|
||||
if (ticks <= topRotorSpeed)
|
||||
command |= PIN0;
|
||||
if (ticks <= bottomRotorSpeed)
|
||||
command |= PIN1;
|
||||
if (ticks <= stabMotorSpeed1)
|
||||
command |= PIN2;
|
||||
if (ticks <= stabMotorSpeed2)
|
||||
command |= PIN3;
|
||||
if (ticks <= stabMotorSpeed3)
|
||||
command |= PIN4;
|
||||
PORTC = command;
|
||||
if (ticks == MAXIMUM_ROTOR_PWM_VALUE)
|
||||
pwm_ticks = 0;
|
||||
}
|
||||
|
||||
|
||||
int main(void){
|
||||
calibrateGyro();
|
||||
calibrateArom();
|
||||
|
||||
// start
|
||||
topRotorSpeed = 0;
|
||||
bottomRotorSpeed = 0;
|
||||
stabMotorSpeed1 = 0;
|
||||
stabMotorSpeed2 = 0;
|
||||
stabMotorSpeed3 = 0;
|
||||
|
||||
sec = 0;
|
||||
|
||||
static volatile int x = 1;
|
||||
__llvm_pcmarker(31);
|
||||
while (x) {
|
||||
__llvm_pcmarker(32);
|
||||
if ( (ADCSR & PIN6) == 0) { // end of ADC conversion
|
||||
processSensorData();
|
||||
__llvm_pcmarker(33);
|
||||
}
|
||||
runFlightPlan();
|
||||
}
|
||||
}
|
||||
|
||||
void runFlightPlan(void){
|
||||
// take off
|
||||
if (sec <= TAKEOFF_START){
|
||||
heliState = TAKEOFF;
|
||||
topRotorSpeed += TAKEOFF_ROTOR_SPEED_INCR;
|
||||
if (topRotorSpeed > MAX_TAKEOFF_MOTOR_SPEED)
|
||||
topRotorSpeed = MAX_TAKEOFF_MOTOR_SPEED;
|
||||
bottomRotorSpeed += TAKEOFF_ROTOR_SPEED_INCR;
|
||||
if (bottomRotorSpeed > MAX_TAKEOFF_MOTOR_SPEED)
|
||||
bottomRotorSpeed = MAX_TAKEOFF_MOTOR_SPEED;
|
||||
}
|
||||
|
||||
// hover
|
||||
if (sec == HOVER_START)
|
||||
heliState = HOVER;
|
||||
|
||||
// landing
|
||||
if (sec == LANDING_START){
|
||||
heliState = LANDING;
|
||||
stabMotorSpeed1 = 0;
|
||||
stabMotorSpeed2 = 0;
|
||||
stabMotorSpeed3 = 0;
|
||||
}
|
||||
|
||||
if ( (sec > LANDING_START) && (sec <= LANDING_END) ){
|
||||
topRotorSpeed -= LANDING_ROTOR_SPEED_INCR;
|
||||
if (topRotorSpeed < MIN_LANDING_ROTOR_SPEED)
|
||||
topRotorSpeed = MIN_LANDING_ROTOR_SPEED;
|
||||
bottomRotorSpeed -= LANDING_ROTOR_SPEED_INCR;
|
||||
if (bottomRotorSpeed < MIN_LANDING_ROTOR_SPEED)
|
||||
bottomRotorSpeed = MIN_LANDING_ROTOR_SPEED;
|
||||
}
|
||||
|
||||
// grounded
|
||||
if(sec >= GROUNDED_START){
|
||||
heliState = GROUND;
|
||||
WDTCR = 0x08; //enable watchdog
|
||||
while (1) ; //just wait for watchdog to reset machine
|
||||
}
|
||||
}
|
||||
|
||||
void processSensorData(void){
|
||||
char filtered_data;
|
||||
char data_in_last;
|
||||
|
||||
data_in_last = data_in;
|
||||
data_in = ADCH;
|
||||
|
||||
switch (currentChannel) {
|
||||
|
||||
case GYRO_CHANNEL:
|
||||
// start conversion for next channel
|
||||
currentChannel = AROMX_CHANNEL;
|
||||
ADMUX = ADMUX_AROMX;
|
||||
ADCSR = ADCSR | PIN6;
|
||||
|
||||
addSample(gyro, 5, data_in);
|
||||
filtered_data = fixFilter(gyro,5);
|
||||
|
||||
if (filtered_data < gyroCalibrateThresholdLow) {
|
||||
topRotorSpeed += ROTOR_SPEED_INCR;;
|
||||
if (topRotorSpeed > MAXIMUM_ROTOR_PWM_VALUE)
|
||||
topRotorSpeed = MAXIMUM_ROTOR_PWM_VALUE;
|
||||
bottomRotorSpeed -= ROTOR_SPEED_INCR;
|
||||
if (bottomRotorSpeed < MINIMUM_PWM_VALUE)
|
||||
bottomRotorSpeed = MINIMUM_PWM_VALUE;
|
||||
}
|
||||
else
|
||||
if (filtered_data > gyroCalibrateThresholdHigh) {
|
||||
topRotorSpeed -= ROTOR_SPEED_INCR;
|
||||
if (topRotorSpeed < MINIMUM_PWM_VALUE)
|
||||
topRotorSpeed = MINIMUM_PWM_VALUE;
|
||||
bottomRotorSpeed += ROTOR_SPEED_INCR;
|
||||
if (bottomRotorSpeed > MAXIMUM_ROTOR_PWM_VALUE)
|
||||
bottomRotorSpeed = MAXIMUM_ROTOR_PWM_VALUE;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case AROMX_CHANNEL:
|
||||
// start conversion for next channel
|
||||
currentChannel = AROMY_CHANNEL;
|
||||
ADMUX = ADMUX_AROMY;
|
||||
ADCSR |= PIN6;
|
||||
|
||||
if (heliState == HOVER) {
|
||||
|
||||
__llvm_pcmarker(21);
|
||||
addSample(aromX,7,data_in);
|
||||
filtered_data = fixFilter(aromX,7);
|
||||
|
||||
if (filtered_data < aromXCalibrateThresholdLow) {
|
||||
stabMotorSpeed1 -= STAB_SPEED_INCR*2;
|
||||
if (stabMotorSpeed1 < MIN_STAB_MOTOR_SPEED)
|
||||
stabMotorSpeed1 = MIN_STAB_MOTOR_SPEED;
|
||||
stabMotorSpeed2 += STAB_SPEED_INCR*2;
|
||||
if (stabMotorSpeed2 > MAX_STAB_MOTOR_SPEED)
|
||||
stabMotorSpeed2 = MAX_STAB_MOTOR_SPEED;
|
||||
stabMotorSpeed3 += STAB_SPEED_INCR*2;
|
||||
if (stabMotorSpeed3 > MAX_STAB_MOTOR_SPEED)
|
||||
stabMotorSpeed3 = MAX_STAB_MOTOR_SPEED;
|
||||
}
|
||||
else if (filtered_data > aromXCalibrateThresholdHigh) {
|
||||
stabMotorSpeed1 += STAB_SPEED_INCR*2;
|
||||
if (stabMotorSpeed1 > MAX_STAB_MOTOR_SPEED)
|
||||
stabMotorSpeed1 = MAX_STAB_MOTOR_SPEED;
|
||||
stabMotorSpeed2 -= STAB_SPEED_INCR*2;
|
||||
if (stabMotorSpeed2 < MIN_STAB_MOTOR_SPEED)
|
||||
stabMotorSpeed2 = MIN_STAB_MOTOR_SPEED;
|
||||
stabMotorSpeed3 -= STAB_SPEED_INCR*2;
|
||||
if (stabMotorSpeed3 < MIN_STAB_MOTOR_SPEED)
|
||||
stabMotorSpeed3 = MIN_STAB_MOTOR_SPEED;
|
||||
}
|
||||
else {
|
||||
stabMotorSpeed1 -= STAB_SPEED_INCR*2;
|
||||
if (stabMotorSpeed1 < MIN_STAB_MOTOR_SPEED)
|
||||
stabMotorSpeed1 = MIN_STAB_MOTOR_SPEED;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case AROMY_CHANNEL:
|
||||
// starting new conversion
|
||||
currentChannel = AROMZ_CHANNEL;
|
||||
ADMUX = ADMUX_AROMZ;
|
||||
ADCSR |= PIN6;
|
||||
|
||||
if (heliState == HOVER){
|
||||
|
||||
__llvm_pcmarker(22);
|
||||
addSample(aromY, 7, data_in);
|
||||
filtered_data = fixFilter(aromY,7);
|
||||
|
||||
if (filtered_data < aromYCalibrateThresholdLow) {
|
||||
stabMotorSpeed2 += STAB_SPEED_INCR*4;
|
||||
if (stabMotorSpeed2 > MAX_STAB_MOTOR_SPEED)
|
||||
stabMotorSpeed2 = MAX_STAB_MOTOR_SPEED;
|
||||
stabMotorSpeed3 -= STAB_SPEED_INCR*2;
|
||||
if (stabMotorSpeed3 < MIN_STAB_MOTOR_SPEED)
|
||||
stabMotorSpeed3 = MIN_STAB_MOTOR_SPEED;
|
||||
}
|
||||
else if (filtered_data > aromYCalibrateThresholdHigh) {
|
||||
stabMotorSpeed2 -= STAB_SPEED_INCR*2;
|
||||
if (stabMotorSpeed2 < MIN_STAB_MOTOR_SPEED)
|
||||
stabMotorSpeed2 = MIN_STAB_MOTOR_SPEED;
|
||||
stabMotorSpeed3 += STAB_SPEED_INCR*4;
|
||||
if (stabMotorSpeed3 > MAX_STAB_MOTOR_SPEED)
|
||||
stabMotorSpeed3 = MAX_STAB_MOTOR_SPEED;
|
||||
}
|
||||
else {
|
||||
stabMotorSpeed2 -= STAB_SPEED_INCR;
|
||||
if (stabMotorSpeed2 < MIN_STAB_MOTOR_SPEED)
|
||||
stabMotorSpeed2 = MIN_STAB_MOTOR_SPEED;
|
||||
stabMotorSpeed3 -= STAB_SPEED_INCR;
|
||||
if (stabMotorSpeed3 < MIN_STAB_MOTOR_SPEED)
|
||||
stabMotorSpeed3 = MIN_STAB_MOTOR_SPEED;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case AROMZ_CHANNEL:
|
||||
// Starting new conversion
|
||||
currentChannel = GYRO_CHANNEL;
|
||||
ADMUX = ADMUX_GYRO;
|
||||
ADCSR |= PIN6;
|
||||
|
||||
if (heliState == HOVER){
|
||||
|
||||
__llvm_pcmarker(23);
|
||||
addSample(aromZ, 7, data_in);
|
||||
filtered_data = fixFilter(aromZ,8);
|
||||
|
||||
if (filtered_data > aromZCalibrateThresholdHigh){
|
||||
topRotorSpeed -= HOVER_ROTOR_SPEED_INCR_HIGH;
|
||||
if (topRotorSpeed < MINIMUM_PWM_VALUE)
|
||||
topRotorSpeed = MINIMUM_PWM_VALUE;
|
||||
bottomRotorSpeed -= HOVER_ROTOR_SPEED_INCR_HIGH;
|
||||
if (bottomRotorSpeed < MINIMUM_PWM_VALUE)
|
||||
bottomRotorSpeed = MINIMUM_PWM_VALUE;
|
||||
}
|
||||
else if (filtered_data == aromZCalibrateThresholdLow){
|
||||
topRotorSpeed += HOVER_ROTOR_SPEED_INCR_LOW;
|
||||
if (topRotorSpeed > MAXIMUM_ROTOR_PWM_VALUE)
|
||||
topRotorSpeed = MAXIMUM_ROTOR_PWM_VALUE;
|
||||
bottomRotorSpeed += HOVER_ROTOR_SPEED_INCR_LOW;
|
||||
if(bottomRotorSpeed > MAXIMUM_ROTOR_PWM_VALUE)
|
||||
bottomRotorSpeed = MAXIMUM_ROTOR_PWM_VALUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void calibrateGyro(void) {
|
||||
char gyroCalibrate;
|
||||
int i;
|
||||
|
||||
ADMUX = ADMUX_GYRO;
|
||||
ADCSR = 0b11000110;
|
||||
|
||||
for (i=0; i<31; i++){
|
||||
gyro[i] = ADCH;
|
||||
ADCSR |= PIN6;;
|
||||
}
|
||||
gyro[31] = ADCH;
|
||||
|
||||
gyroCalibrate = fixFilter(gyro,5);
|
||||
gyroCalibrateThresholdLow = gyroCalibrate - 1;
|
||||
gyroCalibrateThresholdHigh = gyroCalibrate + 1;
|
||||
}
|
||||
|
||||
void calibrateArom(void){
|
||||
char aromCalibrate;
|
||||
int i;
|
||||
|
||||
ADMUX = ADMUX_AROMX;
|
||||
ADCSR |= PIN6;
|
||||
|
||||
for (i=0; i<127; i++){
|
||||
aromX[i] = ADCH;
|
||||
ADCSR |= PIN6;
|
||||
}
|
||||
aromX[127] = ADCH;
|
||||
aromCalibrate = fixFilter(aromX,7);
|
||||
aromXCalibrateThresholdLow = aromCalibrate;
|
||||
aromXCalibrateThresholdHigh = aromCalibrate + 1;
|
||||
|
||||
ADMUX = ADMUX_AROMY;
|
||||
ADCSR |= PIN6;
|
||||
|
||||
for (i=0; i<127; i++){
|
||||
aromY[i] = ADCH;
|
||||
ADCSR |= PIN6;
|
||||
}
|
||||
aromY[127] = ADCH;
|
||||
aromCalibrate = fixFilter(aromY,7);
|
||||
aromYCalibrateThresholdLow = aromCalibrate;
|
||||
aromYCalibrateThresholdHigh = aromCalibrate;
|
||||
|
||||
ADMUX = ADMUX_AROMZ;
|
||||
ADCSR |= PIN6;
|
||||
|
||||
for (i=0; i<127; i++){
|
||||
aromZ[i] = ADCH;
|
||||
ADCSR |= PIN6;
|
||||
}
|
||||
aromZ[127] = ADCH;
|
||||
aromCalibrate = fixFilter(aromZ,7);
|
||||
aromZCalibrateThresholdLow = aromCalibrate;
|
||||
aromZCalibrateThresholdHigh = aromCalibrate + 3;
|
||||
|
||||
ADMUX = ADMUX_GYRO;
|
||||
ADCSR |= PIN6;
|
||||
|
||||
}
|
||||
|
||||
uint8_t fixFilter(uint8_t *f, int size){
|
||||
int i;
|
||||
int length = 1 << size;
|
||||
int sum = 0;
|
||||
for(i = 0; i < length; i++){
|
||||
sum = sum + f[i];
|
||||
}
|
||||
// divide by length
|
||||
sum = sum >> size;
|
||||
return sum;
|
||||
}
|
||||
|
||||
void addSample(uint8_t *f, int size, uint8_t value){
|
||||
int i;
|
||||
int length = 1 << size;
|
||||
for (i = 0;i < length; i++){
|
||||
f[i] = f[i+1];
|
||||
}
|
||||
f[length-1] = value;
|
||||
}
|
||||
|
||||
|
||||
|
23
B1/strec-ipet/src/io.h
Normal file
23
B1/strec-ipet/src/io.h
Normal file
|
@ -0,0 +1,23 @@
|
|||
/**************** io.h **************/
|
||||
typedef unsigned char uint8_t;
|
||||
|
||||
#define _SFR_BASE 0xF0000
|
||||
#define _SFR_MEM8(mem_addr) (*(volatile uint8_t *)(mem_addr + _SFR_BASE))
|
||||
|
||||
#define ADCH _SFR_MEM8(0x05)
|
||||
#define ADCSR _SFR_MEM8(0x06)
|
||||
#define ADMUX _SFR_MEM8(0x07)
|
||||
#define PIND _SFR_MEM8(0x10)
|
||||
#define PORTD _SFR_MEM8(0x12)
|
||||
#define PORTC _SFR_MEM8(0x15)
|
||||
#define WDTCR _SFR_MEM8(0x31)
|
||||
|
||||
|
||||
#define PIN0 0x1
|
||||
#define PIN1 0x2
|
||||
#define PIN2 0x4
|
||||
#define PIN3 0x8
|
||||
#define PIN4 0x10
|
||||
#define PIN5 0x20
|
||||
#define PIN6 0x40
|
||||
#define PIN7 0x80
|
128
D3/TP/Cours.ipynb
Normal file
128
D3/TP/Cours.ipynb
Normal file
|
@ -0,0 +1,128 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Cours D3\n",
|
||||
"\n",
|
||||
"## Cours Méthodes d'analyse non supervisées\n",
|
||||
"\n",
|
||||
"Exemple de clustering complete linkage :\n",
|
||||
"On prend 4 singletons avec leur matrice de dissimilarité."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import numpy as np"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[0. 0.3 0.4 0.8 ]\n",
|
||||
" [0.3 0. 0.5 0.8 ]\n",
|
||||
" [0.4 0.5 0. 0.45]\n",
|
||||
" [0.8 0.8 0.45 0. ]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"D = np.array([[0, 0.3, 0.4, 0.7],[0, 0, 0.5, 0.8],[0, 0, 0, 0.45],[0, 0, 0, 0]])\n",
|
||||
"D += D.T\n",
|
||||
"print(D)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"On link les 2 clusters les plus proches (a,b) donc on prend le max de différence entre (a,b) et c et d."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[0. 0.5 0.8 ]\n",
|
||||
" [0.5 0. 0.45]\n",
|
||||
" [0.8 0.45 0. ]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"D2 = np.array([[0, 0.5, 0.8],[0.5, 0, 0.45],[0.8, 0.45, 0]])\n",
|
||||
"print(D2)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"On coupe au saut le plus important sur le dendrogramme (on continu jusqu'a avoir K-clusters)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[0. 0.8]\n",
|
||||
" [0.8 0. ]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# (a,b,c) et d\n",
|
||||
"D3 = np.array([[0, 0.8],[0.8,0]])\n",
|
||||
"print(D3)"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.10 64-bit",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.8.10"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"vscode": {
|
||||
"interpreter": {
|
||||
"hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6"
|
||||
}
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
232
D3/TP/TP1.ipynb
232
D3/TP/TP1.ipynb
File diff suppressed because one or more lines are too long
9
Projet/Projet.md
Normal file
9
Projet/Projet.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
# Optimisation robot
|
||||
Trouver meilleurs compromis performance/consommation.
|
||||
Répartition sur 5/6 groupes.
|
||||
On peut commencer dès que les groupes sont faits.
|
||||
|
||||
|
||||
## Jetson
|
||||
Pour optimiser le code, il faut connaître le matériel.
|
||||
Faire beaucoup de doc et de tests :)
|
|
@ -14,5 +14,6 @@ p6. temps exécution = nombre instruction * temps moyen par instruction * temps
|
|||
|
||||
p8. instructions simples, donc décomposition des instructions complexes en instructions simples.
|
||||
|
||||
### T1-C3 Pipeline
|
||||
### T1-C5 Hiérarchie mémoire
|
||||
|
||||
p2: courbe correspondant à une technologie, on ne sait pas laquelle.
|
14
T1/TD/[SETI]T1_TD/Bibliographie.bib
Normal file
14
T1/TD/[SETI]T1_TD/Bibliographie.bib
Normal file
|
@ -0,0 +1,14 @@
|
|||
|
||||
|
||||
|
||||
@article{Ref,
|
||||
author = "",
|
||||
title = "",
|
||||
journal = "",
|
||||
volume = "",
|
||||
number = "",
|
||||
pages = "",
|
||||
year = "",
|
||||
DOI = "",
|
||||
keywords = ""
|
||||
}
|
232
T1/TD/[SETI]T1_TD/Content/TD1.tex
Normal file
232
T1/TD/[SETI]T1_TD/Content/TD1.tex
Normal file
|
@ -0,0 +1,232 @@
|
|||
\chapter{Processeurs scalaires, superscalaires et VLIW}
|
||||
|
||||
\section{Prédiction de branchement}
|
||||
|
||||
Un branchement a le comportement suivant, où N signifie non pris, P signifie pris et P*k indique une suite de k branchements pris.\\
|
||||
PPNP*kNP*kNP*kNP*kNP*k...
|
||||
|
||||
\subsection{Prédiction après phase d'initialisation}
|
||||
|
||||
\subsubsection{a)}
|
||||
|
||||
Pour un prédicteur 1 bit, à chaque mauvaise prédiction la prochaine prédiction sera inversée ou plutôt on ne change pas la prédiction tant qu'elle est bonne.
|
||||
|
||||
- $k=1$
|
||||
|
||||
\begin{tabular}{l l}
|
||||
Branchement &: P P N P N P N P N P \\
|
||||
Prédicteur &: \color{blue}{X} \color{green}{P} \color{red}{P N P N P N P N}
|
||||
\end{tabular}
|
||||
|
||||
Prédictions bonnes à $\frac{k-1}{(k-1)+2} = 0 \implies 0\%$
|
||||
|
||||
- $k=3$
|
||||
|
||||
\begin{tabular}{l l}
|
||||
Branchement &: P P N P P P N P P P N P P P N P P P\\
|
||||
Prédicteur &: \color{blue}{X} \color{green}{P} \color{red}{P N} \color{green}{P P} \color{red}{P N} \color{green}{P P} \color{red}{P N} \color{green}{P P} \color{red}{P N} \color{green}{P P}
|
||||
\end{tabular}
|
||||
|
||||
Prédiction bonnes à $\frac{k-1}{(k-1)+2} = \frac{1}{2} \implies 50\%$
|
||||
|
||||
- $k=5$
|
||||
|
||||
\begin{tabular}{l l}
|
||||
Branchement &: P P N P P P P P N P P P P P N P P P P P N P P P P P\\
|
||||
Prédicteur &: \color{blue}{X} \color{green}{P} \color{red}{P N} \color{green}{P P P P} \color{red}{P N} \color{green}{P P P P} \color{red}{P N} \color{green}{P P P P} \color{red}{P N} \color{green}{P P P P}
|
||||
\end{tabular}
|
||||
|
||||
Prédiction bonnes à $\frac{k-1}{(k-1)+2} = \frac{4}{6} \implies 66\%$
|
||||
|
||||
On a bien la conclusion que plus une boucle est longue et donc une répétition de branchements est importante et plus le prédicteur sera efficace.
|
||||
|
||||
\subsubsection{b)}
|
||||
|
||||
Pour un prédicteur 2 bits, on passe d'un niveau fort (FX) à faible (fx) lors d'une erreur de prédiction avant de changer la prédiction de branchement. Lorsque la prédiction est bonne en revanche, on passe d'un état faible à un état fort.
|
||||
|
||||
FP $\iff$ fp $\iff$ fn $\iff$ FN
|
||||
|
||||
- $k=1$
|
||||
|
||||
\begin{tabular}{l l}
|
||||
Branchement &: P ~~~~~P ~~~~N ~~P ~N ~~P ~N ~~P ~N ~P \\
|
||||
Prédicteur &: \color{blue}{fx} \color{green}{FP|fp} \color{red}{FP} \color{green}{fp} \color{red}{FP} \color{green}{fp} \color{red}{FP} \color{green}{fp} \color{red}{FP} \color{green}{fp}
|
||||
\end{tabular}
|
||||
|
||||
Prédictions bonnes de 50\% à condition de ne pas commencer par FNP.
|
||||
|
||||
- $k=3$
|
||||
|
||||
\begin{tabular}{l l}
|
||||
Branchement &: P ~~~~~P ~~~~N ~~P ~P ~~P ~~N ~~P ~~P ~~P ~~N ~~P ~~P ~~P ~~N ~~P ~~P ~P\\
|
||||
Prédicteur &: \color{blue}{fx} \color{green}{FP|fp} \color{red}{FP} \color{green}{fp FP FP} \color{red}{FP} \color{green}{fp FP FP} \color{red}{FP} \color{green}{fp FP FP} \color{red}{FP} \color{green}{fp FP FP}
|
||||
\end{tabular}
|
||||
|
||||
Prédictions bonnes à 75\%. Si la première prédiction est à FN, on perd seulement la validité de quelques (4) premiers branchements.
|
||||
|
||||
- $k=5$
|
||||
|
||||
(FX $\longrightarrow$ X, fx $\longrightarrow$ x)
|
||||
|
||||
\begin{tabular}{l l}
|
||||
Branchement &: P ~~~~~P ~~~N P P P P P N P P P P P N P P P P P N P P P P P\\
|
||||
Prédicteur &: \color{blue}{fx} \color{green}{FP|fp} \color{red}{P} \color{green}{p P P P P} \color{red}{~P} \color{green}{p P P P P} \color{red}{P} \color{green}{p P P P P} \color{red}{~P} \color{green}{p P P P P}
|
||||
\end{tabular}
|
||||
|
||||
Prédiction bonnes à 83\% avec le même problème que pour $k=3$.
|
||||
|
||||
On remarque cette fois-ci que le taux de bonne prédiction suit $\frac{k}{(k-1)+2}$.
|
||||
On devient plus résilient aux boucles imbriquées.
|
||||
|
||||
\subsection{Prédicteur un bit et un bit d'historique initialisé à N}
|
||||
Prédicteur P : si P est une bonne prédiction, le reste de ses prédictions sera à N sinon il sera à P.\\
|
||||
Prédicteur N : si N est une bonne prédiction, le reste de ses prédictions sera à N sinon à P.
|
||||
|
||||
- $k=1$
|
||||
|
||||
\begin{tabular}{llllllllllll}
|
||||
Branchement &: &P &P &N &P &N &P &N &P &N &P \\
|
||||
Historique &: &\color{blue}X &\color{blue}P &\color{blue}P &\color{blue}N &\color{blue}P &\color{blue}N &\color{blue}P &\color{blue}N &\color{blue}P &\color{blue}N \\
|
||||
Prédicteur P &: &\color{blue}X &\color{green}\boxed{P} &\color{red}\boxed{P} &\color{red}N &\color{green}\boxed{N} &\color{red}N &\color{green}\boxed{N} &\color{red}N &\color{green}\boxed{N} &\color{red}N \\
|
||||
Prédicteur N &: &\color{blue}X &\color{red}N &\color{green}N &\color{red}\boxed{N} &\color{red}P &\color{green}\boxed{P} &\color{red}P &\color{green}\boxed{P} &\color{red}P &\color{green}\boxed{P}
|
||||
\end{tabular}
|
||||
|
||||
Prédictions bonnes à 100\% car le cycle de répétition (période) est de 2 ce qui est la limite d'historique pour un prédicteur 1 bit ($2^1$).
|
||||
|
||||
- $k=3$
|
||||
|
||||
\begin{tabular}{llllllllllllllllllll}
|
||||
Branchement &: &P &P &N &P &P &P &N &P &P &P &N &P &P &P &N &P &P &P\\
|
||||
Historique &: &\color{blue}X &\color{blue}P &\color{blue}P &\color{blue}N &\color{blue}P &\color{blue}P &\color{blue}P &\color{blue}N &\color{blue}P &\color{blue}P &\color{blue}P &\color{blue}N &\color{blue}P &\color{blue}P &\color{blue}P &\color{blue}N &\color{blue}P &\color{blue}P \\
|
||||
Prédicteur P &: &\color{blue}{X} &\color{green}\boxed{P} &\color{red}\boxed{P} &\color{gray}N &\color{red}\boxed{N} &\color{green}\boxed{P} &\color{red}{\boxed{P}} &\color{gray}N &\color{red}\boxed{N} &\color{green}\boxed{P} &\color{red}{\boxed{P}} &\color{gray}N &\color{red}\boxed{N} &\color{green}\boxed{P} &\color{red}{\boxed{P}} &\color{gray}N &\color{red}\boxed{N} &\color{green}\boxed{P}\\
|
||||
Prédicteur N &: &\color{blue}{X} &\color{gray}{N} &\color{gray}{N} &\color{red}\boxed{N} &\color{gray}P &\color{gray}P &\color{gray}{P} &\color{green}\boxed{P} &\color{gray}P &\color{gray}P &\color{gray}{P} &\color{green}\boxed{P} &\color{gray}P &\color{gray}P &\color{gray}{P} &\color{green}\boxed{P} &\color{gray}P &\color{gray}P
|
||||
\end{tabular}
|
||||
|
||||
Prédiction bonnes à 50\%
|
||||
|
||||
- $k=5$
|
||||
|
||||
\begin{tabular}{l l}
|
||||
Branchement &: P P N P P P P P N P P P P P N P P P P P N P P P P P\\
|
||||
Historique &: \color{blue}X P P N P P P P P N P P P P P N P P P P P N P P P P \\
|
||||
Prédicteur P &: \color{blue}{X} \color{green}{P} \color{red}{P} \color{gray}{N} \color{red}{N} \color{green}{P P P} \color{red}{P} \color{gray}{N} \color{red}{N} \color{green}{P P P} \color{red}{P} \color{gray}{N} \color{red}{N} \color{green}{ P P P} \color{red}{P} \color{gray}{N} \color{red}{N} \color{green}{P P P}\\
|
||||
Prédicteur N &: \color{blue}{X} \color{gray}{N N} \color{green}P \color{gray}{ P P P P P} \color{green}{P} \color{gray}{P P P P P} \color{green}{P} \color{gray}{P P P P P} \color{green}{P} \color{gray}{P P P P}
|
||||
\end{tabular}
|
||||
|
||||
Prédiction bonnes de $\frac{2}{3}$
|
||||
|
||||
\section{Processeurs scalaires et superscalaires : exécution de boucles}
|
||||
|
||||
\subsection{Version scalaire du processeur et caches parfaits
|
||||
(aucun cycle d’attente mémoire)}
|
||||
|
||||
Corps du programme en assembleur :
|
||||
|
||||
\begin{minted}[linenos, breaklines, frame = single]{asm}
|
||||
boucle:
|
||||
lf f1, (r1) //f1 ← x[i]
|
||||
lf f2, (r2) //f2 ← y[i]
|
||||
fmul f1, f1, f0 //f1 ← x[i]*a
|
||||
NOP*3
|
||||
fadd f2, f2, f1 //f2 ← y[i]+x[i]*a
|
||||
NOP*3
|
||||
sf f2, (r2) //y[i] ← f2
|
||||
addi r1, r1, 4 //x[i++]
|
||||
addi r2, r2, 4 //y[i++]
|
||||
addi r3, r3, -1 //i++
|
||||
bne r3, boucle //1000 itérations
|
||||
\end{minted}
|
||||
|
||||
On part de la valeur i (r3) = 1000 jusqu'à 0 (while(i>0)) et on incrémente les indices en conséquence.
|
||||
Avec les 6 NOP, on arrive à 15 cycles/opérations.
|
||||
|
||||
On optimise les latences en modifiant les chargements et incrémentation d'indices.
|
||||
|
||||
\begin{minted}[linenos, breaklines, frame = single]{asm}
|
||||
boucle:
|
||||
lf f1, (r1) //f1 ← x[i]
|
||||
lf f2, (r2) //f2 ← y[i]
|
||||
fmul f1, f1, f0 //f1 ← x[i]*a
|
||||
addi r1, r1, 4 //x[i++]
|
||||
addi r2, r2, 4 //y[i++]
|
||||
addi r3, r3, -1 //i--
|
||||
fadd f2, f2, f1 //f2 ← y[i]+x[i]*a
|
||||
NOP*3
|
||||
sf f2, -4(r2) //y[i-1] ← f2
|
||||
bne r3, boucle //1000 itérations
|
||||
\end{minted}
|
||||
On gagne 3 cycles par opération soit 12 cycles/op.
|
||||
|
||||
\subsection{Version déroulée}
|
||||
\begin{minted}[linenos, breaklines, frame = single]{asm}
|
||||
boucle:
|
||||
lf f1, (r1) //f1 ← x[i]
|
||||
lf f3, 4(r1) //f3 ← x[i+1]
|
||||
lf f5, 8(r1) //f5 ← x[i+2]
|
||||
lf f7, 12(r1) //f7 ← x[i+3]
|
||||
lf f2, (r2) //f2 ← y[i]
|
||||
lf f4, 4(r2) //f4 ← y[i+1]
|
||||
lf f6, 8(r2) //f6 ← y[i+2]
|
||||
lf f8, 12(r2) //f8 ← y[i+3]
|
||||
fmul f1, f1, f0 //f1 ← x[i]*a
|
||||
fmul f3, f3, f0 //f3 ← x[i+1]*a
|
||||
fmul f5, f5, f0 //f5 ← x[i+2]*a
|
||||
fmul f7, f7, f0 //f7 ← x[i+3]*a
|
||||
fadd f2, f2, f1 //f2 ← y[i]+x[i]*a
|
||||
fadd f4, f4, f3 //f4 ← y[i+1]+x[i+1]*a
|
||||
fadd f6, f6, f5 //f6 ← y[i+2]+x[i+2]*a
|
||||
fadd f8, f8, f7 //f8 ← y[i+3]+x[i+3]*a
|
||||
addi r1, r1, 16 //x[i++]
|
||||
addi r2, r2, 16 //x[i++]
|
||||
addi r3, r3, -4 //i++
|
||||
sf f2, -12(r2) //y[i-3] ← f2
|
||||
sf f4, -8(r2) //y[i-2] ← f4
|
||||
sf f6, -4(r2) //y[i-1] ← f6
|
||||
sf f8, (r2) //y[i] ← f8
|
||||
bne r3, boucle //1000 itérations
|
||||
\end{minted}
|
||||
|
||||
On a 24 cycles pour 4 itérations, soit 6 cycles/itération.
|
||||
|
||||
\subsection{Superscalaire}
|
||||
|
||||
\begin{tabular}{r|c|c|c|c}
|
||||
&E0 & E1 & FM & FA \\
|
||||
\hline
|
||||
1&lf f1,(r1) & & &\\
|
||||
2&lf f2,(r2) & & & \\
|
||||
3&addi r1,r1,4& addi r2,r2,4&fmul f1,f1,f0 & \\
|
||||
4&addi r3,r3,-1&&&\\
|
||||
5&&&&\\
|
||||
6&&&&\\
|
||||
7&& & & fadd f2,f2,f1\\
|
||||
8&& & & \\
|
||||
9&&&&\\
|
||||
10&&&&\\
|
||||
11& sf f2,-4(r2)&bne r3, boucle & &
|
||||
\end{tabular}
|
||||
|
||||
On ne gagne qu'un cycle avec cette version (11cycles/itération).
|
||||
|
||||
\subsection{Superscalaire déroulé}
|
||||
|
||||
\begin{tabular}{r|c|c|c|c}
|
||||
&E0 & E1 & FM & FA \\
|
||||
\hline
|
||||
1&lf f1,(r1) & lf f3,4(r1) & &\\
|
||||
2& lf f5,8(r1)& lf f7,12(r1) & &\\
|
||||
3& lf f2,(r2)& lf f4,4(r2)& fmul f1,f1,f0&\\
|
||||
4& lf f6,8(r2)& lf f8,12(r2)& fmul f3,f3,f0&\\
|
||||
5& addi r1,r1,16& addi r2,r2,16& fmul f5,f5,f0 & \\
|
||||
6& addi r3,r3,-4& & fmul f5,f5,f0& \\
|
||||
7&&&& fadd f2,f2,f1\\
|
||||
8&&&& fadd f4,f4,f3\\
|
||||
9&&&& fadd f6,f6,f5\\
|
||||
10&& & & fadd f8,f8,f7\\
|
||||
11&sf f2,-12(r2) & & & \\
|
||||
12&sf f4,-8(r2)&&&\\
|
||||
13&sf f6,-4(r2)&&&\\
|
||||
14&sf f8, (r2) &bne r3, boucle & &
|
||||
\end{tabular}
|
||||
|
||||
Cette fois-ci, on utilise 14 cycles pour 4 itérations, soit 3,5 cycles/itération.
|
69
T1/TD/[SETI]T1_TD/Content/useful_commands.tex
Normal file
69
T1/TD/[SETI]T1_TD/Content/useful_commands.tex
Normal file
|
@ -0,0 +1,69 @@
|
|||
|
||||
% -------------------- Plot --------------------
|
||||
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
\includegraphics[width = 0.3\linewidth]{}
|
||||
\caption{}
|
||||
\end{figure}
|
||||
|
||||
% -------------------- Subplot --------------------
|
||||
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
\begin{subfigure}[b]{0.4\textwidth}
|
||||
\includegraphics[width = \linewidth]{}
|
||||
\caption{}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.4\textwidth}
|
||||
\includegraphics[width = \linewidth]{}
|
||||
\caption{}
|
||||
\end{subfigure}
|
||||
\caption{}
|
||||
\end{figure}
|
||||
|
||||
% -------------------- Bullet list --------------------
|
||||
|
||||
\begin{list}{\textbullet}{}
|
||||
|
||||
\end{list}
|
||||
|
||||
% -------------------- Code matlab --------------------
|
||||
|
||||
\begin{minted}[linenos, breaklines, frame = single]{matlab}
|
||||
|
||||
\end{minted}
|
||||
|
||||
% -------------------- Separate the sheet into smaller sheets ----------------
|
||||
|
||||
\begin{minipage}{0.55\linewidth}
|
||||
|
||||
\end{minipage}\hfill
|
||||
\begin{minipage}{0.45\linewidth}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width = 0.3\linewidth]{TitlePage/ens_logo.png}
|
||||
\caption{}
|
||||
\end{figure}
|
||||
\end{minipage}
|
||||
|
||||
% ------------------- Biblio ------------------
|
||||
|
||||
@article{Ref,
|
||||
author = "",
|
||||
title = "",
|
||||
journal = "",
|
||||
volume = "",
|
||||
number = "",
|
||||
pages = "",
|
||||
year = "",
|
||||
DOI = "",
|
||||
keywords = ""
|
||||
}
|
||||
|
||||
@misc{ref,
|
||||
author = "",
|
||||
title = "",
|
||||
url = {}
|
||||
}
|
BIN
T1/TD/[SETI]T1_TD/TitlePage/ens_logo.png
Normal file
BIN
T1/TD/[SETI]T1_TD/TitlePage/ens_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
48
T1/TD/[SETI]T1_TD/TitlePage/titlepage.tex
Normal file
48
T1/TD/[SETI]T1_TD/TitlePage/titlepage.tex
Normal file
|
@ -0,0 +1,48 @@
|
|||
\begin{titlepage}
|
||||
\makeatletter
|
||||
\begin{center}
|
||||
|
||||
% ------- Main logo --------
|
||||
\null\vspace{1.1cm}
|
||||
\includegraphics[width=.65\linewidth]{\@mainlogo}\\[2cm]
|
||||
|
||||
% ------ Project type ------
|
||||
\ifdefined \@field {\large \@field}\\[0.2\baselineskip] \fi
|
||||
\ifdefined \@project {\large \@project}\\ \fi
|
||||
\vspace{.65cm}
|
||||
|
||||
% ------- Top rule --------
|
||||
\hrule width \hsize height .5mm % Thick horizontal rule
|
||||
\vspace{.035\textheight} % White space between the top rule and title
|
||||
|
||||
% --------- Title ----------
|
||||
\begin{minipage}{.85\textwidth}
|
||||
\bfseries\Huge\centering
|
||||
\textcolor{black}{\@title}
|
||||
\end{minipage}
|
||||
|
||||
% ------ Bottom rule ------
|
||||
\vspace{.035\textheight} % White space between the bottom rule and title
|
||||
\hrule width \hsize height 0.5mm % Thick horizontal rule
|
||||
|
||||
\vspace{.065\textheight}
|
||||
|
||||
% --------- Author ---------
|
||||
\textsc{
|
||||
\Large
|
||||
\begin{tabular}[t]{c}
|
||||
\@author % Author name (array)
|
||||
\end{tabular}
|
||||
}
|
||||
|
||||
\vspace{.02\textheight} % White space between the author name and date
|
||||
|
||||
\vfill % White space between the date and publisher
|
||||
|
||||
\end{center}
|
||||
|
||||
% ---------- Bottom of the page ----------
|
||||
{\large\textsc{\@date}}\hfill % Date of publishing
|
||||
|
||||
\makeatother
|
||||
\end{titlepage}
|
BIN
T1/TD/[SETI]T1_TD/TitlePage/ups_logo.png
Normal file
BIN
T1/TD/[SETI]T1_TD/TitlePage/ups_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 92 KiB |
1
T1/TD/[SETI]T1_TD/main.aux
Normal file
1
T1/TD/[SETI]T1_TD/main.aux
Normal file
|
@ -0,0 +1 @@
|
|||
\relax
|
24
T1/TD/[SETI]T1_TD/main.fdb_latexmk
Normal file
24
T1/TD/[SETI]T1_TD/main.fdb_latexmk
Normal file
|
@ -0,0 +1,24 @@
|
|||
# Fdb version 3
|
||||
["pdflatex"] 1666439580 "/home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/main.tex" "/home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/main.pdf" "main" 1666439580
|
||||
"/etc/texmf/web2c/texmf.cnf" 1666438621 475 c0e671620eb5563b2130f56340a5fde8 ""
|
||||
"/home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/fouriernc.sty" 0 -1 0 ""
|
||||
"/home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/main.aux" 1666439580 8 a94a2480d3289e625eea47cd1b285758 ""
|
||||
"/home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/main.tex" 1666431070 923 abf7d419c375b72e4f4f9c709bb179f9 ""
|
||||
"/usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map" 1577235249 3524 cb3e574dea2d1052e39280babc910dc8 ""
|
||||
"/usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmr12.tfm" 1136768653 1288 655e228510b4c2a1abe905c368440826 ""
|
||||
"/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty" 1573336935 6902 30fdaf7dc5636b8e3afa306210c45cae ""
|
||||
"/usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty" 1572645307 1057 525c2192b5febbd8c1f662c9468335bb ""
|
||||
"/usr/share/texlive/texmf-dist/tex/latex/base/report.cls" 1580683321 23082 a0e9a5941c744eda6abe56770037a201 ""
|
||||
"/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo" 1580683321 8447 5c4b8ee712f8e349df2722115bc8c513 ""
|
||||
"/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty" 1578002852 41601 9cf6c5257b1bc7af01a58859749dd37a ""
|
||||
"/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty" 1580683321 2590 e3b24ff953e5b58d924f163d25380312 ""
|
||||
"/usr/share/texlive/texmf-dist/web2c/texmf.cnf" 1581979058 38841 ce3692aa899bb693b90b87eaa5d4d84e ""
|
||||
"/usr/share/texmf/web2c/texmf.cnf" 1581979058 38841 ce3692aa899bb693b90b87eaa5d4d84e ""
|
||||
"/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1666439343 4810548 a74f27742f4cc733b879ee587b4a5a24 ""
|
||||
"fouriernc.sty" 0 -1 0 ""
|
||||
"main.tex" 1666431070 923 abf7d419c375b72e4f4f9c709bb179f9 ""
|
||||
"setup.tex" 1666431070 6569 45b84894af7d35b3cf1be8404cef5ccb ""
|
||||
(generated)
|
||||
"/home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/main.pdf"
|
||||
"/home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/main.log"
|
||||
"main.log"
|
23
T1/TD/[SETI]T1_TD/main.fls
Normal file
23
T1/TD/[SETI]T1_TD/main.fls
Normal file
|
@ -0,0 +1,23 @@
|
|||
PWD /home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD
|
||||
INPUT /etc/texmf/web2c/texmf.cnf
|
||||
INPUT /usr/share/texmf/web2c/texmf.cnf
|
||||
INPUT /usr/share/texlive/texmf-dist/web2c/texmf.cnf
|
||||
INPUT /var/lib/texmf/web2c/pdftex/pdflatex.fmt
|
||||
INPUT /home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/main.tex
|
||||
OUTPUT /home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/main.log
|
||||
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
|
||||
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
|
||||
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size12.clo
|
||||
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size12.clo
|
||||
INPUT /usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map
|
||||
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmr12.tfm
|
||||
INPUT /home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/setup.tex
|
||||
INPUT /home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/setup.tex
|
||||
INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
|
||||
INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
|
||||
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
|
||||
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
|
||||
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
|
||||
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
|
72
T1/TD/[SETI]T1_TD/main.log
Normal file
72
T1/TD/[SETI]T1_TD/main.log
Normal file
|
@ -0,0 +1,72 @@
|
|||
This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) (preloaded format=pdflatex 2022.10.22) 22 OCT 2022 13:53
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
file:line:error style messages enabled.
|
||||
%&-line parsing enabled.
|
||||
**/home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/main.tex
|
||||
(/home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/main.tex
|
||||
LaTeX2e <2020-02-02> patch level 2
|
||||
L3 programming layer <2020-02-14> (/usr/share/texlive/texmf-dist/tex/latex/base/report.cls
|
||||
Document Class: report 2019/12/20 v1.4l Standard LaTeX document class
|
||||
(/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo
|
||||
File: size12.clo 2019/12/20 v1.4l Standard LaTeX file (size option)
|
||||
)
|
||||
\c@part=\count167
|
||||
\c@chapter=\count168
|
||||
\c@section=\count169
|
||||
\c@subsection=\count170
|
||||
\c@subsubsection=\count171
|
||||
\c@paragraph=\count172
|
||||
\c@subparagraph=\count173
|
||||
\c@figure=\count174
|
||||
\c@table=\count175
|
||||
\abovecaptionskip=\skip47
|
||||
\belowcaptionskip=\skip48
|
||||
\bibindent=\dimen134
|
||||
) (/home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/setup.tex (/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
|
||||
Package: geometry 2020/01/02 v5.9 Page Geometry
|
||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
|
||||
\KV@toks@=\toks14
|
||||
) (/usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
|
||||
Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.
|
||||
(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
|
||||
Package: iftex 2019/11/07 v1.0c TeX engine tests
|
||||
))
|
||||
\Gm@cnth=\count176
|
||||
\Gm@cntv=\count177
|
||||
\c@Gm@tempcnt=\count178
|
||||
\Gm@bindingoffset=\dimen135
|
||||
\Gm@wd@mp=\dimen136
|
||||
\Gm@odd@mp=\dimen137
|
||||
\Gm@even@mp=\dimen138
|
||||
\Gm@layoutwidth=\dimen139
|
||||
\Gm@layoutheight=\dimen140
|
||||
\Gm@layouthoffset=\dimen141
|
||||
\Gm@layoutvoffset=\dimen142
|
||||
\Gm@dimlist=\toks15
|
||||
)
|
||||
|
||||
! LaTeX Error: File `fouriernc.sty' not found.
|
||||
|
||||
Type X to quit or <RETURN> to proceed,
|
||||
or enter new name. (Default extension: sty)
|
||||
|
||||
Enter file name:
|
||||
/home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/setup.tex:5: Emergency stop.
|
||||
<read *>
|
||||
|
||||
l.5 \usepackage
|
||||
[utf8]{inputenc} % Required for inputting international UTF-8...
|
||||
*** (cannot \read from terminal in nonstop modes)
|
||||
|
||||
|
||||
Here is how much of TeX's memory you used:
|
||||
789 strings out of 483154
|
||||
10866 string characters out of 5965022
|
||||
241641 words of memory out of 5000000
|
||||
15886 multiletter control sequences out of 15000+600000
|
||||
532636 words of font info for 25 fonts, out of 8000000 for 9000
|
||||
14 hyphenation exceptions out of 8191
|
||||
33i,0n,27p,208b,36s stack positions out of 5000i,500n,10000p,200000b,80000s
|
||||
/home/higepi/Documents/M2R_SETI/M2_SETI/T1/TD/[SETI]T1_TD/setup.tex:5: ==> Fatal error occurred, no output PDF file produced!
|
44
T1/TD/[SETI]T1_TD/main.tex
Normal file
44
T1/TD/[SETI]T1_TD/main.tex
Normal file
|
@ -0,0 +1,44 @@
|
|||
\documentclass[a4paper, 12pt, french]{report}
|
||||
\input{setup.tex}
|
||||
|
||||
\begin{document}
|
||||
|
||||
% Title page placeholders
|
||||
\title{T1 - Architecture avancée - TD}
|
||||
\author{Saša Radosavljevic}
|
||||
\date{\today}
|
||||
\field{M2 E3A - SETI}
|
||||
\mainlogo{TitlePage/ups_logo.png}
|
||||
|
||||
|
||||
% Make title page
|
||||
\include{TitlePage/titlepage}
|
||||
\newpage
|
||||
\
|
||||
\thispagestyle{empty}
|
||||
\newpage
|
||||
% Front matter - Page numbers in alphabetic style
|
||||
\changepagenumbering{arabic}
|
||||
|
||||
% TOC - links are black to ensure color integrity
|
||||
{
|
||||
\hypersetup{linkcolor=black}
|
||||
\tableofcontents
|
||||
}
|
||||
|
||||
% Set new paragraph style after the TOC
|
||||
\setlength{\parindent}{0em} % Indentation size to none
|
||||
\setlength{\parskip}{1em} % Paragraph intervall size
|
||||
|
||||
\include{Content/TD1}
|
||||
|
||||
% Main matter - Include every chapter/part here
|
||||
|
||||
|
||||
\printbibliography
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
\end{document}
|
127
T1/TD/[SETI]T1_TD/setup.tex
Normal file
127
T1/TD/[SETI]T1_TD/setup.tex
Normal file
|
@ -0,0 +1,127 @@
|
|||
\usepackage[top=2.5cm, bottom=2.5cm, left=2.5cm, right=2.5cm]{geometry}
|
||||
|
||||
% ----------------- Fonts, encoding and language packages ------------------
|
||||
\usepackage{fouriernc} % Use the New Century Schoolbook font
|
||||
\usepackage[utf8]{inputenc} % Required for inputting international UTF-8 characters
|
||||
\usepackage[T1]{fontenc} % Output font encoding for international characters
|
||||
\usepackage{babel} % Language package (language is defined in documentclass)
|
||||
\usepackage{setspace} % Font/line (and others) spacing configuration
|
||||
\usepackage{tocbibind} % Insert TOC reference link into TOC
|
||||
\usepackage[section]{placeins} % Place figures in their section only
|
||||
|
||||
% ------------- Tables, figures and other special environments -------------
|
||||
\usepackage{graphicx} % Import and manage graphics
|
||||
\usepackage{tabularx} % Better table control (ie. auto cell's width)
|
||||
\usepackage{multirow} % Allows multirow cells in tables
|
||||
\usepackage{pdfpages} % Insert PDF documents
|
||||
\usepackage{subcaption} % To use subfigures
|
||||
\usepackage[export]{adjustbox} % Adjust figures position
|
||||
\usepackage{marginnote} % Insert notes in doc margins
|
||||
|
||||
% Table column types (gray italic column / centered expanding column)
|
||||
\newcolumntype{\grayc}{>{\itshape\large\raggedright\arraybackslash\columncolor{gray90}}c}
|
||||
\newcolumntype{\centerX}{>{\centering\arraybackslash}X}
|
||||
|
||||
% --------------------- Codes and scripts environments ---------------------
|
||||
\usepackage{listings} % Create lists with line numbers (used for code view)
|
||||
\usepackage{minted} % Color syntax for scripts in multiple languages
|
||||
|
||||
% ----------------------------- Color defines ------------------------------
|
||||
\usepackage{xcolor,colortbl} % Table cells color editing
|
||||
\usepackage{color} % Main color package (define colors)
|
||||
\definecolor{accentcolor}{RGB}{0,119,139} % Accent color used in the whole doc
|
||||
\definecolor{gray75}{gray}{0.75} % Title lines main color
|
||||
\definecolor{gray90}{gray}{0.90} % Table main rows/columns
|
||||
\definecolor{darkgreen}{rgb}{.0, .5, .0} % EXTENDS command color
|
||||
|
||||
% Insert links, color them and modify PDF settings
|
||||
\usepackage[colorlinks=true,allcolors=accentcolor,bookmarks=true]{hyperref}
|
||||
|
||||
\definecolor{ENSBlue}{RGB}{0, 119, 139}
|
||||
\definecolor{ENSGrey}{rgb}{0.3, 0.3, 0.3}
|
||||
\definecolor{ENSLightGrey}{RGB}{190, 200, 200}
|
||||
\definecolor{ENSDarkBlue}{RGB}{10, 50, 80}
|
||||
\definecolor{matlabGreen}{RGB}{28, 172, 0} % Pour le listing des codes
|
||||
\definecolor{matlabLilas}{RGB}{170, 55, 241}
|
||||
|
||||
% -------------------- Bibliography configuration --------------------------
|
||||
\usepackage[backend=biber,style=numeric,sorting=none]{biblatex}
|
||||
\usepackage{csquotes} % To ensure quotes with biblatex are working well
|
||||
\addbibresource{Bibliographie.bib} % Bibliography file to load
|
||||
|
||||
% --------------------------- Title style editing --------------------------
|
||||
\usepackage{titlesec} % Lets modify header styles (chapter, section, etc)
|
||||
\newcommand{\hspct}{\hspace{18pt}} % Horizontal space for chapter title
|
||||
\newcommand{\hspst}{\hspace{9pt}} % Horizontal space for section title
|
||||
\newcommand{\hspsst}{\hspace{4.5pt}} % Horizontal space for subsection title
|
||||
|
||||
\titleformat{\chapter}[hang]
|
||||
{\color{ENSBlue}\Huge\bfseries\raggedright} % Huge size and bold font
|
||||
{\thechapter\hspct % Number and horizontal space
|
||||
\textcolor{ENSBlue}{\rule[-0.25\baselineskip]{5pt}{\baselineskip}}
|
||||
\hspct}{0pt}{} % Horizontal space then name
|
||||
|
||||
\titleformat{\section}[hang]
|
||||
{\color{ENSBlue}\Large\bfseries\raggedright} % Huge size and bold font
|
||||
{\thesection\hspst\textcolor{ENSDarkBlue}{-}\hspst}{0pt}{} % Number, horizontal space then name
|
||||
[\hrule height 0.5pt]
|
||||
|
||||
\titleformat{\subsection}[hang]
|
||||
{\color{ENSBlue}\large\bfseries\raggedright} % Color, Huge size and bold font
|
||||
{\thesubsection\hspsst\textcolor{ENSDarkBlue}{-}\hspsst}{0pt}{} % Number, horizontal space then name
|
||||
|
||||
\titleformat{\subsubsection}[hang]
|
||||
{\color{ENSBlue}\large\bfseries\raggedright} % Color, Huge size and bold font
|
||||
{\thesubsection\hspsst\textcolor{ENSDarkBlue}{-}\hspsst}{0pt}{} % Number, horizontal space then name
|
||||
|
||||
\titleformat{\subsubsubsection}[hang]
|
||||
{\color{ENSBlue}\large\bfseries\raggedright} % Color, Huge size and bold font
|
||||
{\thesubsection\hspsst\textcolor{ENSDarkBlue}{-}\hspsst}{0pt}{} % Number, horizontal space then name
|
||||
|
||||
|
||||
% -------------------------- Mathematic packages --------------------------
|
||||
\usepackage{amsmath} % Create matrices, subequations and more
|
||||
\usepackage{amssymb} % Math font to create symbols from characters
|
||||
|
||||
% Mathematic new commands
|
||||
\newcommand{\sgn}{\text{sgn}} % Sign function as text
|
||||
|
||||
% -------------------------- FRENCH translations --------------------------
|
||||
|
||||
\iflanguage{french}{ % Replace "Table" with "Tableau" in FRENCH only
|
||||
\AtBeginDocument{\renewcommand\tablename{\textsc{Tableau}}}
|
||||
\AtBeginDocument{\renewcommand\listingscaption{\textsc{Code}}}
|
||||
\AtBeginDocument{\renewcommand\lstlistlistingname{Liste des codes}}
|
||||
}
|
||||
|
||||
% -------------------------- New useful commands --------------------------
|
||||
\newcommand{\todo}[1]{\textbf{\textcolor{blue}{(TODO: #1)}} \PackageWarning{setup}{#1}} % TODO command
|
||||
\newcommand{\extend}[1]{\textbf{\textcolor{darkgreen}{(EXTEND: #1)}} \PackageWarning{setup}{#1}} % EXTENDS command
|
||||
\newcommand{\draft}[1]{\textbf{\textcolor{red}{(DRAFT: #1)}} \PackageWarning{setup}{#1}} % DRAFT command
|
||||
|
||||
% Reset page number and change page numbering style
|
||||
\newcommand{\changepagenumbering}[1]{
|
||||
\setcounter{page}{1}
|
||||
\pagenumbering{#1}
|
||||
}
|
||||
|
||||
\makeatletter
|
||||
\newcommand*{\field}[1]{\gdef\@field{#1}} % Defines "field" variable used in title page
|
||||
\newcommand*{\project}[1]{\gdef\@project{#1}} % Defines "project" variable used in title page
|
||||
\newcommand*{\mainlogo}[1]{\gdef\@mainlogo{#1}} % Defines "mainlogo" variable used in title page
|
||||
\newcommand*{\logoCN}[1]{\gdef\@logoCN{#1}} % Defines "optionallogo" variable used in title page
|
||||
\newcommand*{\logoCNRS}[1]{\gdef\@logoCNRS{#1}} % Defines "optionallogo" variable used in title page
|
||||
\makeatother
|
||||
|
||||
% Existing environments configuration
|
||||
\usepackage{etoolbox} % Allows to append commands to existing environements
|
||||
|
||||
\iflanguage{english}{
|
||||
\AtBeginEnvironment{itemize}{\setlength{\baselineskip}{0em}} % Change itemize line skip
|
||||
\AtBeginEnvironment{itemize}{\setlength{\parskip}{.7em}} % Change itemize line vertical space
|
||||
|
||||
\AtBeginEnvironment{enumerate}{\setlength{\baselineskip}{0em}} % Change enumerate line skip
|
||||
\AtBeginEnvironment{enumerate}{\setlength{\parskip}{.7em}} % Change enumerate line vertical space
|
||||
}
|
||||
|
||||
\AtBeginEnvironment{tabularx}{\def\arraystretch{1.6}} % Change array vertical padding within cells
|
Loading…
Reference in a new issue