VAP ASR

Organisation et contenu des modules d'enseignement

Les objectifs pédagogiques ainsi que le contenu de ces UVs est accessible ci-dessous (cliquer sur une UV pour en savoir plus).

  • - Maîtriser les interactions entre les programmes et le système d'exploitation
    - Maîtriser les principes de base de la traduction/compilation de langages informatiques

  • - Concepts des Systèmes d’exploitation et mise en œuvre sous Linux
    . Interactions entre système multi-tâche et processus
    . Gestion de la mémoire
    . Entrées-sorties
    . Communications inter-processus (IPC)
    . Synchronisation entre processus
    . Threads
    . Architecture d'un logiciel serveur et optimisation
    - Notions sur la compilation/traduction, applications informatiques
    . Notions de vocabulaire, de grammaire
    . Analyses lexicale et syntaxique
    . Expressions régulières
    . Automates à états finis
    . Principes algorithmiques de reconnaissance

  • Ordonnancement, threads, architecture d'un logiciel serveur, compilation/traduction

  • Algorithmique (notions), Architectures matérielles (notions), Langage C (bonne pratique), Unix utilisateur (bonne pratique)

  • À l'issue du module, les étudiants seront capable, dans le cadre du développement d’une application répartie de petite taille, mais réaliste, et dont le cahier des charges est fourni, de :
    - développer entièrement une application répartie avec TCP/IP en utilisant la bibliothèque JAVA NIO avec des communications en modes connecté et déconnecté, et en modes synchrone et asynchrone,
    - lire, donner une exécution, et expliquer les preuves des algorithmes répartis de base (élection, diffusion, exclusion mutuelle, interblocage et détection de terminaison),
    - de mettre en œuvre les algorithmes étudiés par insertion dans l'application répartie développée dans le module et avec écriture de scénarios de tests simples (c.-à-d. sans utilisation de canevas logiciel d'émulation ou de simulation) pour vérifier les propriétés de correction et de progression.

  • - Communication non fiable par échange de messages (UDP),
    - Communication bidirectionnelle par canal fiable (TCP),
    - Asynchronisme, lecture non bloquante, applications multiclientes, multiserveurs,
    - Algorithmique répartie,
    - Principes de base (synchronisme/asynchronisme, spécifications, modèles...),
    - Problématique des systèmes répartis : motivations et caractéristiques fondamentales,
    - Algorithmes par vagues, écho,
    - Communications de groupe, diffusion, et ordres FIFO, causal et total,
    - Élection,
    - Exclusion mutuelle, interblocage et détection de terminaison.

  • Algorithmique répartie, programmation réseau (JAVA NIO), mise en œuvre d'algorithmes répartis

  • Algorithmique séquentielle (CSC3101, bonne pratique), Système d'exploitation UNIX (CSC3102, bonne pratique), Programmation orientée objet avec le langage Java (CSC4102, bonne pratique) , Architecture matériel et langage C (CSC4103, bonne pratique), Programmation réseau en langage C (NET4102), Programmation système (CSC4508, bonne pratique)

  • À l'issue du module CSC5001, les étudiants sont capables de :

    - Expliquer les enjeux, les contraintes et les exigences du Calcul Hautes Performances

    - Concevoir une application parallèle performante sur une architecture cible (grappes de machines, machines multicœurs, machines hétérogènes intégrant CPU et GPU) à partir de sa version séquentielle en utilisant les outils classiques du parallélisme (par exemple OpenMP, MPI, CUDA)

    - Analyser les performances d'une application parallèle pour proposer des pistes d'amélioration, et présenter la démarche et les résultats sous la forme d'une présentation orale

  • - Les fondamentaux du parallélisme
    - Principes, concepts, intérêt…
    - Architectures matérielles
    - Solutions et tendance
    - Algorithmique parallèle :
    - Modèles de communication
    - Parallélisme de données / Parallélisme de tâches
    - Les grappes de calcul
    - Outils de développement
    - OpenMP : Principes, API, Compilation, exécution, tuning, développement d'une application parallèle
    - MPI : Principes, API, Compilation, exécution, tuning, développement d'une application parallèle
    - GPU : Principes, API CUDA, Compilation, exécution
    - Programmation hybride: MPI + OpenMP
    - Analyse de performance
    - Micro-projet
    - Conférences

  • Grappes,OpenMP, MPI, GPU, HPC

  • - Algorithmique (bonne connaissance), langage C (bonne pratique), Unix (bonne pratique utilisateur), Threads (bonne pratique)

  • - Connaître les patrons de conception des intergiciels pour les applications réparties
    - Connaître les différentes techniques logicielles de conception et de structuration d’applications réparties : requêtes synchrones, requêtes asynchrones, architecture 3 tiers, persistance des services, Architectures Orientées Service (SOA), Assemblage de composants, orchestration de services, informatique en nuage (cloud computing)
    - Maîtriser les technologies de production d’applications réparties en entreprise : Web Services, MOM/JMS, Java EE
    - Produire des applications réparties en entreprise

  • - Les fondamentaux des intergiciels
    - Survol des solutions de construction (Architectures, SOA) et des intergiciels pour applications réparties (RMI, Java EE, Services Web, REST)
    - Patrons et canevas pour construire des intergiciels pour la répartition

    - Intergiciels pour appels synchrones (RMI, Web Services)
    - Étude d’intergiciels pour appels synchrones
    - Bases pour la programmation de serveurs d’application

    - Intergiciels orientés messages (bus de messages, MOM, système distribué basé événement (DEBS))
    - Étude d’un intergiciel orienté messages (JMS)

    - Intergiciels orientés composant avec Java EE
    - Présentation générale des concepts associés aux composants (conteneurs, propriétés extra-fonctionnelles)
    - Propriétés extra-fonctionnelles et services pour intergiciels illustrés avec Java EE (services d’annuaire, de notification, de transactions, de persistance, de sécurité)
    - Composants EJB

    - Introduction à l'informatique en nuage (cloud computing)
    - Développement et déploiement d'applications en nuage (cloud)

    - Réalisation d’un micro-projet

    - Conférences par des intervenants extérieurs

  • Intergiciel/middleware, application répartie, service, composant, Services Web, informatique en nuage/cloud computing

  • - Modélisation d’applications avec UML, programmation Java, Bases de données, Fondamentaux sur les applications, et algorithmique répartie

  • - Comprendre le Web sémantique et le Web de données (Linked data)
    - Savoir définir et exploiter une ontologie
    - Découvrir les langages du Web sémantique
    - Comparer Linked Data et Big Data
    - Apprendre et expérimenter les technologies du Big Data (Hadoop, MapReduce, des solutions de stockage NoSQL)

  • - Introduction au Web sémantique
    - Web actuel versus Web du futur
    - Les principes du Web sémantique
    - L’architecture du Web sémantique
    - Nouveaux usages du Web 2.0
    - Ontologies pour le Web sémantique
    - Notion d’ontologie
    - Création, représentation, exploitation
    - Outils et inférence (protégé, jena, ontobroker…)
    - Les langages du Web sémantique
    - XML et XML-Schema
    - RDF et RDF-Schema
    - OWL
    - Introduction au Big Data
    - Installation et déploiement d'une base de données NoSQL
    - Ecriture des requêtes suivant le paradigme mapReduce
    - Modélisation d'une base de données NoSQL
    - Conférences

  • Web sémantique, ontologies, RDF/RDFS, OWL, Linked data, Hadoop, MapReduce

  • SQL (notions), XML (notions), Java (notions)

  • This course studies in detail the new infrastructures that sustain the Cloud.
    We first examine the principles of resources virtualization and how to deploy and orchestrate clusters of virtual machines and containers.
    In a second part, we review some fundamentals of large-scale distributed systems.
    These ideas are then applied in a third part to the construction of modern distributed data stores.
    Such stores run on commodity servers and are able to deliver the massive performance needed by the Cloud computing services.
    We study some key notions such as data consistency, data distribution, replication and indexing, and we learn how to think for scalability and fault-tolerance, two fundamentals requirements of modern distributed services.

  • This course studies in detail the new infrastructures that sustain the Cloud.
    We first examine the principles of resources virtualization and how to deploy and orchestrate clusters of virtual machines and containers.
    In a second part, we review some fundamentals of large-scale distributed systems.
    These ideas are then applied in a third part to the construction of modern distributed data stores.
    Such stores run on commodity servers and are able to deliver the massive performance needed by the Cloud computing services.
    We study some key notions such as data consistency, data distribution, replication and indexing, and we learn how to think for scalability and fault-tolerance, two fundamentals requirements of modern distributed services.

  • Cloud computing, Virtualization, Containers Orchestration, Large-scale infrastructure, Distributed data storage, Service oriented architecture, Availability, Fault-tolerance, Data Distribution, Data replication & consistency.

  • CSC500x, CSC400x, CSC310x.

  • - Se familiariser avec des méthodes de gestion de projet informatique
    - Utiliser des compétences acquises au cours de la scolarité pour la réalisation d'un projet d'envergure
    - Comprendre les besoins d'un client, faire des choix d'architecture, évaluer une réalisation
    - Savoir présenter à l'oral et à l'écrit

  • Le projet de la voie d’approfondissement ASR est réalisé sur la totalité du semestre 5. Chaque étudiant doit réaliser un projet en binôme ou trinôme. Des plages sont programmées dans l’emploi du temps afin d’être dédiées à ce projet. Des rencontres avec l’encadrant du projet ont lieu toutes les deux semaines environ.

    Trois types de projet sont proposés aux étudiants : des projets d’expérimentations, des projets d’études pour le compte d'entreprises ou de collectivités et des projets de recherche.