Stage au laboratoire Informatique Distribuée

83
Stage au laboratoire Informatique Distribuée Charles Bouillaguet Grenoble, été 2005 Grenoble, été 2005 Parallelisation adaptative de programmes itératifs

description

Stage au laboratoire Informatique Distribuée. Grenoble, été 2005. Parallelisation adaptative de programmes itératifs. Charles Bouillaguet. Le laboratoire ID-IMAG. Commun CNRS-INRIA Fait partie de l’ I nstitut de M ath. A ppliquées de G renoble - PowerPoint PPT Presentation

Transcript of Stage au laboratoire Informatique Distribuée

Page 1: Stage au laboratoire Informatique Distribuée

Stage au laboratoire Informatique Distribuée

Charles Bouillaguet

Grenoble, été 2005Grenoble, été 2005

Parallelisation adaptativede programmes itératifs

Page 2: Stage au laboratoire Informatique Distribuée

Le laboratoire ID-IMAG

• Commun CNRS-INRIA

• Fait partie de l’Institut de Math. Appliquées de Grenoble

• Deux équipes de recherche : MESCAL et MOAIS

• MOAIS = Multi-programmation et Ordonnancement sur ressources distribuées pour les Applications Interactives de Simulation

• Equipe jeune, beaucoup de stagiaires et de thésards

Page 3: Stage au laboratoire Informatique Distribuée

Le laboratoire ID-IMAG

Page 4: Stage au laboratoire Informatique Distribuée

Le laboratoire ID-IMAGcharles

Page 5: Stage au laboratoire Informatique Distribuée

De l’autre côté de la rue

Page 6: Stage au laboratoire Informatique Distribuée

De l’autre côté de la rue

Page 7: Stage au laboratoire Informatique Distribuée

Le cadre

Page 8: Stage au laboratoire Informatique Distribuée

Jean-Louis Roch :mon directeur de stage

QuickTime™ et undécompresseur TIFF (non compressé)

sont requis pour visionner cette image.

• Chef de MOAIS• L’homme le plus

speed du monde

Page 9: Stage au laboratoire Informatique Distribuée

Deux ou trois notions d’algorithmique parallèle

Page 10: Stage au laboratoire Informatique Distribuée

Deux ou trois notions d’algorithmique parallèle

• Qu’est-ce qu’un programme parallèle ?

Page 11: Stage au laboratoire Informatique Distribuée

Deux ou trois notions d’algorithmique parallèle

• Qu’est-ce qu’un programme parallèle ?

• Qu’est-ce qu’une architecture parallèle ?

Page 12: Stage au laboratoire Informatique Distribuée

Deux ou trois notions d’algorithmique parallèle

• Qu’est-ce qu’un programme parallèle ?

• Qu’est-ce qu’une architecture parallèle ?

• Comment ça se programme ?

Page 13: Stage au laboratoire Informatique Distribuée

Deux ou trois notions d’algorithmique parallèle

• Qu’est-ce qu’un programme parallèle ?

• Qu’est-ce qu’une architecture parallèle ?

• Comment ça se programme ?

• Comment organiser les calculs ?

Page 14: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’un programme parallèle ?

Page 15: Stage au laboratoire Informatique Distribuée

C’est un programme qui crée plusieurs tâches(qui s’exécutent simultanément)

Qu’est-ce qu’un programme parallèle ?

Page 16: Stage au laboratoire Informatique Distribuée

C’est un programme qui crée plusieurs tâches(qui s’exécutent simultanément)

On peut le voir comme un graphe orienté acyclique

Qu’est-ce qu’un programme parallèle ?

Page 17: Stage au laboratoire Informatique Distribuée

• Chaque noeud représente une opération

• Une opération ne peut s’exécuter que lorsque tous ses parents ont terminé

Exemple : calcul de 10!

Qu’est-ce qu’un programme parallèle ?

Page 18: Stage au laboratoire Informatique Distribuée

• nombre de noeuds du graphe = nombre total d’opérations (noté T1)

• plus long chemin dans le graphe = temps critique (noté T∞)

Qu’est-ce qu’un programme parallèle ?

Page 19: Stage au laboratoire Informatique Distribuée

• nombre de noeuds du graphe = nombre total d’opérations (noté T1)

• plus long chemin dans le graphe = temps critique (noté T∞)

Chemin critique

Qu’est-ce qu’un programme parallèle ?

Page 20: Stage au laboratoire Informatique Distribuée

• nombre de noeuds du graphe = nombre total d’opérations (noté T1)

• plus long chemin dans le graphe = temps critique (noté T∞)

Temps d’exécution sur p processeurs (Tp) ?

Qu’est-ce qu’un programme parallèle ?

Page 21: Stage au laboratoire Informatique Distribuée

Let rec produit from to = match (to - from) with | 0 -> from | 1 -> from * to | n -> let i = (to-n/2) in (Fork (produit from i)) * (Fork (produit (i+1) to))

Théorie de la factorielle parallèle

Qu’est-ce qu’un programme parallèle ?

Page 22: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’un programme parallèle ?Théorie de la factorielle parallèle

Fork

*

A.B.C. à n-1 noeuds

A.B.C. à n/2-1 noeuds

Let rec produit from to = match (to - from) with | 0 -> from | 1 -> from * to | n -> let i = (to-n/2) in (Fork (produit from i)) * (Fork (produit (i+1) to))

Page 23: Stage au laboratoire Informatique Distribuée

Théorie de la factorielle parallèle

Fork

*

T1 = O(n)T∞ = O(log n)

Qu’est-ce qu’un programme parallèle ?

Let rec produit from to = match (to - from) with | 0 -> from | 1 -> from * to | n -> let i = (to-n/2) in (Fork (produit from i)) * (Fork (produit (i+1) to))

Page 24: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’un programme parallèle ?

MAIS…

Page 25: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’un programme parallèle ?

MAIS…En fait, T1 = (n/2) TFork + n T*

et TFork >> T*

Page 26: Stage au laboratoire Informatique Distribuée

Exemple avec 2 processeurs :

9 étapes de calcul sur 2 processeurs

10 étapes sur un seul processeur

(et encore…)

Qu’est-ce qu’un programme parallèle ?

Page 27: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’une architecture parallèle ?

Page 28: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’une architecture parallèle ?

Deux types de base

• Les machines à mémoire partagée

• Les machines à mémoire distribuée

Et un mélange des deux

• Les clusters de machines SMP

Page 29: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’une architecture parallèle ?

Architecture à mémoire partagée

Page 30: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’une architecture parallèle ?

Architecture à mémoire partagée

Page 31: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’une architecture parallèle ?

Architecture à mémoire partagée

Que des avantages :

• Possibilité d’avoir des variables globales

• Communication entre les tâches très simple et très rapide

•Synchronisation des tâches peu coûteuse

Page 32: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’une architecture parallèle ?

Architecture à mémoire partagée

Que des avantages :

• Possibilité d’avoir des variables globales

• Communication entre les tâches très simple et très rapide

•Synchronisation des tâches peu coûteuse

Un inconvénient :

•Le prix (et la complexité) de la machine est exponentiel en le nombre de processeurs

Page 33: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’une architecture parallèle ?

Architecture à mémoire distribuée

Page 34: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’une architecture parallèle ?

Architecture à mémoire distribuée

Page 35: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’une architecture parallèle ?

Architecture à mémoire distribuée

Que des inconvénients :

• Communication inter-processus lente et problématique (machines non-homogènes)

• Pas de variables globales…(dommage, c’était bien pratique)

Page 36: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’une architecture parallèle ?

Architecture à mémoire distribuée

Que des inconvénients :

• Communication inter-processus lente et problématique (machines non-homogènes)

• Pas de variables globales…(dommage, c’était bien pratique)

Mais bon…

Coût linéaire, possibilité d’avoir une grosse puissance de calcul : 100, 400, 1000 machines

Page 37: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’une architecture parallèle ?

En pratique…On a souvent des clusters de machines SMP (seuil critique à 2)

Problème : •Certaines tâches communiquent entre elles par le réseau, d’autres par une mémoire centrale •La création d’une tâche “locale” et d’une tâche distante ne mettent pas en jeu les mêmes mécanismes

Page 38: Stage au laboratoire Informatique Distribuée

Qu’est-ce qu’une architecture parallèle ?

En pratique…On a souvent des clusters de machines SMP (seuil critique à 2)

Problème :

C’est le cauchemar du programmeur

Page 39: Stage au laboratoire Informatique Distribuée

Comment ça se programme ?

Page 40: Stage au laboratoire Informatique Distribuée

Comment ça se programme ?

Pour garantir un minimum de portabilité, on aimerait que le programme soit indépendant…

•Du nombre de processeurs

•Du type d’architecture

Page 41: Stage au laboratoire Informatique Distribuée

Comment ça se programme ?

Pour garantir un minimum de portabilité, on aimerait que le programme soit indépendant…

•Du nombre de processeurs

•Du type d’architecture

Langages parallèlesLibrairies parallèles pour langages séquentiels

Page 42: Stage au laboratoire Informatique Distribuée

Comment ça se programme ?

KAAPIKernel for Adaptative, Asynchronous Parallel and Interactive programming

•Librairie C++ developpée à ID•Gère la création de tâches de manière transparente•Gère la communication entre les tâches et la synchronisation

•Majoration de Tp

•Tolérance aux panne •Ajout/suppression de ressources en ligne

Page 43: Stage au laboratoire Informatique Distribuée

Comment ça se programme ?

KAAPIKernel for Adaptative, Asynchronous Parallel and Interactive programming

•Librairie C++ developpée à ID•Gère la création de tâches de manière transparente•Gère la communication entre les tâches et la synchronisation

•Majoration de Tp

•Tolérance aux panne •Ajout/suppression de ressources en ligne•Un peu lourdingue à utiliser•API de haut niveau déficiente

Page 44: Stage au laboratoire Informatique Distribuée

Comment ça se programme ?

KAAPI

Le programme : graphe de flot de données (“dataflow”)

•Graphe bi-partite•Noeuds ronds : données•Noeuds carrés : fonctions•Flèches : dépendances

Page 45: Stage au laboratoire Informatique Distribuée

Comment ça se programme ?

KAAPI

KAAPI calcule le graphe lors de l’exécution. Cela permet :

•De gérer la synchronisation entre les tâches

•De déplacer les données sur la bonne machine pour exécuter une cloture donnée

Page 46: Stage au laboratoire Informatique Distribuée

Comment ça se programme ?

KAAPI

Page 47: Stage au laboratoire Informatique Distribuée

Comment ça se programme ?

KAAPI

Page 48: Stage au laboratoire Informatique Distribuée

Comment organiser les calculs ?

Page 49: Stage au laboratoire Informatique Distribuée

Comment organiser les calculs ?

Le scheduling

Page 50: Stage au laboratoire Informatique Distribuée

Comment organiser les calculs ?

Le scheduling

2 processeursT2 = 9

(triche : Fork est plus long que *)

Tp dépend de l’ordonnancement des calculs.

Optimal ?

Page 51: Stage au laboratoire Informatique Distribuée

Comment organiser les calculs ?

Le scheduling

2 processeursT2 = 9

(triche : Fork est plus long que *)

Tp dépend de l’ordonnancement des calculs.

Dommage :Optimal-scheduling est NP-Complet

Optimal ?

Page 52: Stage au laboratoire Informatique Distribuée

Comment organiser les calculs ?

Le scheduling

Et encore !

•Le graphe du programme n’est connu qu’à l’exécution (on-line scheduling)

•Les machines n’ont pas toutes la même vitesse

•La vitesse des machines peut varier (!)

•Il est exclu que les machines passent leur temps à se renseigner les unes sur les autres

•Il est exclu que les machines passent longtemps à déterminer quelle est leur prochaine tâche

Page 53: Stage au laboratoire Informatique Distribuée

Comment organiser les calculs ?

Le scheduling

Vol de travail distribué, randomizé

•Chaque processeur a une pile de clotures prêtes

•Tâche terminée ? Exécuter la cloture du dessus

•Pile vide ? Tirer un autre processeur au hasard et voler la cloture du bas (en tirer un autre si sa pile était vide)

Page 54: Stage au laboratoire Informatique Distribuée

Comment organiser les calculs ?

Le scheduling

Vol de travail distribué, randomizé

•Chaque processeur a une pile de clotures prêtes

•Tâche terminée ? Exécuter la cloture du dessus

•Pile vide ? Tirer un autre processeur au hasard et voler la cloture du bas (en tirer un autre si sa pile était vide)

Magique :

Page 55: Stage au laboratoire Informatique Distribuée

Comment organiser les calculs ?

La granularité des calculs

Page 56: Stage au laboratoire Informatique Distribuée

Comment organiser les calculs ?

La granularité des calculs

Problème de la factoriellepasse son temps à créer des tâches !

•Algorithmes à grain fin : nombre de tâches dépendant de la taille du problème

Page 57: Stage au laboratoire Informatique Distribuée

Comment organiser les calculs ?

La granularité des calculs

Problème de la factoriellepasse son temps à créer des tâches !

•Algorithmes à grain fin : nombre de tâches dépendant de la taille du problème

•Algorithmes à gros grain : nombre de tâche dépendant de la machine (une par CPU)

Page 58: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Page 59: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Le grain adaptatif

Ne garder que les avantages•Nombre de tâches réduit au strict minimum•Pas de limite à l’extraction de parallélisme

Page 60: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Le grain adaptatif

Ne garder que les avantages•Nombre de tâches réduit au strict minimum•Pas de limite à l’extraction de parallélisme

Idées•Les algo. séquentiels sont toujours plus efficaces•Work-first principle (dégénération séquentielle)

Page 61: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Le grain adaptatif

Hypothèses•Algorithme à grain fin de type découpe récursive•La séquence d’instruction qui conclut l’algo. sequentiel peut être remplacée par un appel à l’algo. parallèle

(pas très contraignant)

Page 62: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Le grain adaptatif

CPU 1

Page 63: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Le grain adaptatif

CPU 1

Page 64: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Le grain adaptatif

CPU 1

CPU 2

Page 65: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Le grain adaptatif

CPU 1

CPU 2

Vol de travail

Page 66: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Le grain adaptatif

CPU 1 CPU 2

Page 67: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Le grain adaptatif

CPU 1 CPU 2

Page 68: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Le grain adaptatif

CPU 1 CPU 2

Page 69: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Le grain adaptatif

Fusion des 2 morceaux(une étape de l’algo. parallèle)

Page 70: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Le grain adaptatif

“Adaptatif” parce que

•S’adapte à des machines de vitesses différentes

•S’adapte à la variation de vitesse des machines

•S’adapte aux données (algo. irreguliers)

•Permet facilement d’ajouter des machines en cours de calcul

Et en plus…

•Nombre de tâches réduit au minimum

Page 71: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Paralléliser des programmes itératifs

Le vrai but de mon stageObtenir un algo adaptatif pour des programmes de la forme :

(L’opérateur (+) est supposé associatif)

Page 72: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Paralléliser des programmes itératifs

ExempleLet rec jouet n = function | a when a > 1 000 000 000 000 -> n-1 | a -> jouet (n+1) (a + abs (sin n))

Ça calcule :

Page 73: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Paralléliser des programmes itératifs

Problèmes :•Chaque itération de la boucle dépend de la précédente•Le test d’arret…

Solution :•Découper le problème en macro-étapes•On fait des calculs parallèle à l’intérieur d’une ME•On synchronise tout le monde entre 2 ME

Page 74: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Paralléliser des programmes itératifs

Page 75: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Paralléliser des programmes itératifs

Compromis entre nombre et taille des ME

Petites ME :

résultat

Page 76: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Paralléliser des programmes itératifs

Compromis entre nombre et taille des ME

ME exponentielles :

résultat Calculs inutiles

Page 77: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Paralléliser des programmes itératifs

Accélération en fonction du nombre de CPU

0

1

2

3

4

5

6

7

8

1 2 3 4 5 6 7 8

#CPU

Résultats expérimentaux avec le jouet

Page 78: Stage au laboratoire Informatique Distribuée

Le sujet de mon stage

Paralléliser des programmes itératifs

Résultats expérimentaux avec le jouet

Page 79: Stage au laboratoire Informatique Distribuée

Bilan

Page 80: Stage au laboratoire Informatique Distribuée

Bilan

•Beaucoup de découvertes

•Un peu de maths

•Beaucoup de programmation (C++, grrrrr…)

•Beaucoup de debuggage (pénible, gdb, mode texte)

•Beaucoup de messages d’erreur

Page 81: Stage au laboratoire Informatique Distribuée

Bilan

(.gnu.linkonce.t._ZN7ClosureI28compute_residues_in_parallelIN6LinBox7ModularIdEENS1_17IntegerModularDetINS1_12SparseMatrixINS1_17UnparametricFieldI7IntegerEESt4pairISt6vectorIjSaIjEESA_IS7_SaIS7_EEEEENS1_15WiedemannTraitsEEENS1_11RandomPrimeEEE4srunEPN4Core7ClosureEPNSM_6ThreadE+0x30): In function `Closure<compute_residues_in_parallel<LinBox::Modular<double>, LinBox::IntegerModularDet<LinBox::SparseMatrix<LinBox::UnparametricField<Integer>, std::pair<std::vector<unsigned, std::allocator<unsigned> >, std::vector<Integer, std::allocator<Integer> > > >, LinBox::WiedemannTraits>, LinBox::RandomPrime> >::srun(Core::Closure*, Core::Thread*)':: undefined reference to `compute_residues_in_parallel<LinBox::Modular<double>, LinBox::IntegerModularDet<LinBox::SparseMatrix<LinBox::UnparametricField<Integer>, std::pair<std::vector<unsigned, std::allocator<unsigned> >, std::vector<Integer, std::allocator<Integer> > > >, LinBox::WiedemannTraits>, LinBox::RandomPrime>::doit(Core::Thread*)'

test-det.o(.gnu.linkonce.t._ZNK4Core13WrapperFormatI24WorkDescriptorEncapsulerE5writeERNS_7OStreamEPKvj+0x21): In function `Core::WrapperFormat<WorkDescriptorEncapsuler>::write(Core::OStream&, void const*, unsigned) const':: undefined reference to `operator<<(Core::OStream&, WorkDescriptorEncapsuler const&)'test-det.o(.gnu.linkonce.t._ZNK4Core13WrapperFormatI24WorkDescriptorEncapsulerE4readERNS_7IStreamEPvj+0x21): In function `Core::WrapperFormat<WorkDescriptorEncapsuler>::read(Core::IStream&, void*, unsigned) const':: undefined reference to `operator>>(Core::IStream&, WorkDescriptorEncapsuler&)'collect2: ld returned 1 exit statusmake: *** [test-det] Erreur 1

Page 82: Stage au laboratoire Informatique Distribuée

Bilan

/users/huron/bouillag/linbox-0.2.1/linbox/algorithms/cra-domain.h: In function `void LinBox::compute_residues_adaptive(std::vector<_Field::Element, std::allocator<_Field::Element> >*, std::vector<T, std::allocator<_CharT> >*, FunctionEncapsuler<Function>&, RandPrime&, WorkDescriptorEncapsuler&, WorkDescriptorEncapsuler&, bool) [with Domain = LinBox::Modular<double>, Function = LinBox::IntegerModularDet<LinBox::SparseMatrix<LinBox::GMP_Integers, std::pair<std::vector<size_t, std::allocator<size_t> >, std::vector<Integer, std::allocator<Integer> > > >, LinBox::WiedemannTraits>, RandPrime = LinBox::RandomPrime]':/users/huron/bouillag/linbox-0.2.1/parallel-stuff/kaapi_stuff.h:81: instantiated from `void compute_residues_in_parallel<Domain, Function, RandPrime>::doit(Core::Thread*) [with Domain = LinBox::Modular<double>, Function = LinBox::IntegerModularDet<LinBox::SparseMatrix<LinBox::GMP_Integers, std::pair<std::vector<size_t, std::allocator<size_t> >, std::vector<Integer, std::allocator<Integer> > > >, LinBox::WiedemannTraits>, RandPrime = LinBox::RandomPrime]'/users/huron/bouillag/linbox-0.2.1/parallel-stuff/kaapi_stuff.h:27: instantiated from `static void Closure<Runnable>::srun(Core::Closure*, Core::Thread*) [with Runnable = compute_residues_in_parallel<LinBox::Modular<double>, LinBox::IntegerModularDet<LinBox::SparseMatrix<LinBox::GMP_Integers, std::pair<std::vector<size_t, std::allocator<size_t> >, std::vector<Integer, std::allocator<Integer> > > >, LinBox::WiedemannTraits>, LinBox::RandomPrime>]'/users/huron/bouillag/linbox-0.2.1/linbox/algorithms/cra-domain.h:344: instantiated from `Integer& LinBox::ChineseRemainder<Domain>::Early_operator(Integer&, const Function&, RandPrime&) [with Function = LinBox::IntegerModularDet<LinBox::SparseMatrix<LinBox::GMP_Integers, std::pair<std::vector<size_t, std::allocator<size_t> >, std::vector<Integer, std::allocator<Integer> > > >, LinBox::WiedemannTraits>, RandPrime = LinBox::RandomPrime, Domain = LinBox::Modular<double>]'/users/huron/bouillag/linbox-0.2.1/linbox/algorithms/cra-domain.h:392: instantiated from `Integer& LinBox::ChineseRemainder<Domain>::operator()(Integer&, const Function&, RandPrime&) [with Function = LinBox::IntegerModularDet<LinBox::SparseMatrix<LinBox::GMP_Integers, std::pair<std::vector<size_t, std::allocator<size_t> >, std::vector<Integer, std::allocator<Integer> > > >, LinBox::WiedemannTraits>, RandPrime = LinBox::RandomPrime, Domain = LinBox::Modular<double>]'/users/huron/bouillag/linbox-0.2.1/linbox/solutions/det.h:351: instantiated from `Blackbox::Field::Element& LinBox::det(Blackbox::Field::Element&, const Blackbox&, const LinBox::RingCategories::IntegerTag&, const MyMethod&) [with Blackbox = LinBox::SparseMatrix<LinBox::GMP_Integers, std::pair<std::vector<size_t, std::allocator<size_t> >, std::vector<Integer, std::allocator<Integer> > > >, MyMethod = LinBox::WiedemannTraits]'/users/huron/bouillag/linbox-0.2.1/linbox/solutions/det.h:65: instantiated from `Blackbox::Field::Element& LinBox::det(Blackbox::Field::Element&, const Blackbox&, const MyMethod&) [with Blackbox = LinBox::SparseMatrix<LinBox::GMP_Integers, std::pair<std::vector<size_t, std::allocator<size_t> >, std::vector<Integer, std::allocator<Integer> > > >, MyMethod = LinBox::WiedemannTraits]'test-det.cc:77: instantiated from here/users/huron/bouillag/linbox-0.2.1/linbox/algorithms/cra-domain.h:154: `crp_format' undeclared (first use this function)

Page 83: Stage au laboratoire Informatique Distribuée

Bilan

•Beaucoup de découvertes

•Un peu de maths

•Beaucoup de programmation (C++, grrrrr…)

•Beaucoup de debuggage (pénible, gdb, mode texte)

•Beaucoup de messages d’erreur

•Un article en cours d’écriture

•Une réalisation logicielle (application au calcul du polynôme minimal de grandes matrices entières creuses dans Linbox), censée être présentée lors d’un Workshop dans un mois, mais pas finie !