master
hiGepi 2 years ago
parent 200263a90e
commit 070b0481eb

@ -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.

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

Binary file not shown.

@ -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

Binary file not shown.

@ -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

@ -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/

@ -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>

@ -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>

@ -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>

@ -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>

@ -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;
}

@ -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

@ -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
}

File diff suppressed because one or more lines are too long

@ -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.

@ -0,0 +1,14 @@
@article{Ref,
author = "",
title = "",
journal = "",
volume = "",
number = "",
pages = "",
year = "",
DOI = "",
keywords = ""
}

@ -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 dattente 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.

@ -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 = {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@ -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}

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

@ -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"

@ -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

@ -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!

@ -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}

@ -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…
Cancel
Save