Vous trouverez ici quelques documents et quelques liens pouvant, je l'espère, vous être utiles.
Les documents qui vous sont fournis ici le sont pour vous rendre service.
Je travaille très fort sur chacun de mes cours. Veuillez ne pas vendre (ou donner) les documents que je vous offre ici à qui que ce soit sans mon consentement. Si des abus surviennent, je vais cesser de rendre ce matériel disponible à toutes et à tous.
Si ces documents vous rendent service, faites-le moi savoir. Mon adresse de courriel est disponible à travers la page où on trouve mon horaire.
Vous trouverez sur ce site :
![]() |
Cliquez sur cette cible pour le plan de cours, sous forme électronique. |
Ce qui suit détaille le contenu des séances du cours INF709.
| Index des séances théoriques | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| S00 | S01 | S02 | S03 | S04 | S05 | S06 | S07 | S08 | S09 |
| Séance | Contenu |
|---|---|
|
Au menu :
Ce cours abordera en priorité l'API pleinement portable de threading et de synchronisation que propose le langage C++ depuis C++ 11, et qui croît en richesse avec chaque version du langage, incluant certains de ses raffinements plus récents. Notez que nous adapterons le plan de match habituel au fait que nous avons, à la demande de la classe, fait un survol rapide de ces questions à la session précédente. Ainsi, nous procéderons par exercices plutôt que par des démonstrations au cours de cette séance. Étape 0 : écrivons un programme qui :
Le fichier en sortie doit représenter une version correctement indentée du fichier en entrée (nous utiliserons des balises <pre>). Après cette étape, nous avons : Étape 1 : transformons ce programme en un programme qui réalise ces transformations sur plusieurs fichiers, séquentiellement. Nous utiliserons pour ce faire un main() acceptant des paramètres. Étape 2 : transformons ce programme en un pipeline tel que les étapes de traitement sont faites en parallèle : pendant qu'un fil d'exécution lit le fichier , un autre fait le remplacement des métacaractères sur le fichier , un autre fait la coloration sur le fichier et un autre encore fait l'écriture sur disque du fichier . Après cette étape, nous avons : Quelques exemples sur des enjeux de synchronisation, utilisant :
Un peu de poésie :
Voici un petit exemple d'implémentation réduite de std::async() à titre illustratif, acceptant une fonction int(*)(int) et un paramètre int puis retournant une future<int>. Voici une version un peu plus complète (je n'ai pas tenu compte des politiques de démarrage comme std::launch::async et std::launch::defer) : Ceci ne signifie (vraiment!) pas que votre implémentation soit écrite exactement comme ceci, mais c'est l'idée. Quelques exemples :
|
|
|
Au menu :
Nous poursuivons notre survol des enjeux associés à la programmation parallèle et concurrente, de même qu'aux outils mis à notre disposition pour les confronter :
Que faire si on n'a pas les outils de C++ 11 (ou plus récent)? En fait, il est possible (pour ne pas dire probable) que cette API ne soit pas disponible (ou pas entièrement disponible) sur certaines des plateformes que vous rencontrerez dans l'industrie, du moins à court terme, tout comme il est possible qu'une entreprise de développement de jeu fasse le choix conscient de préférer passer directement pas les services du système d'exploitation. Ainsi, ne vous en faites pas : en examinant des manières de procéder sans cette API, nous ne perdons pas notre temps. Cela vous montrera au passage comment en implémenter les bases vous-mêmes si vous le souhaitez.
Quelques considérations de plus haut niveau :
À titre d'exemple, dans ce qui suit, une instance de Proches doit tenir sur une seule et même Cache Line, alors que dans une instance de Loins, il importe que a et b soient sur des Cache Lines distinctes :
J'ai fait une démonstration des coûts du faux-partage (attention : compilez en 64 bits dû à la taille du vecteur). Le code suit : Dans les notes de cours :
|
|
|
Au menu :
|
|
|
Les semaines du 2 et du 9 février, notre cours fait relâche. Bon travail sur votre projet, les ami(e)s! |
|
|
Les semaines du 16, du 23 et du 30 mars, notre cours fait relâche. Bon travail sur votre projet, les ami(e)s! |
|
|
Chic examen final! |
|
Les consignes des livrables L00 et L01 suivent (dates de remise incluses). Ce sont des livrables individuels.
Ce cours portant sur des concepts de programmation, j'ai décidé de demander de vous non pas un rapport, mais bien un exemple de ce que vous pouvez apporter, en tant que programmeuse ou en tant que programmeur, à votre équipe de développement dans le cadre du projet de session.
Je conserverai un modèle reposant sur deux livrables, comme c'était le cas en INF737. Le premier devra être livré aux alentours de la mi-session (séance S05), alors que le second devra être livré vers la fin de la session (ne dépassez pas le 3 mai s'il vous plaît, pour me permettre de respecter les délais de remise de note).
Le premier livrable de la session sera un descriptif d'un design que vous comptez mettre en place par vous-même, dans le but soit de contribuer quelque chose de spécial à votre projet, soit de contribuer quelque chose qui vous semble pertinent au moteur de jeu commercial que vous utiliserez dans la session, soit de contribuer à un outil auxiliaire qui aidera votre équipe.
Ce descriptif devra indiquer clairement :
Notez que je suis ouvert à des explorations dans d'autres langages (Python, Lua, C#, etc.), particulièrement pour le développement d'outils tiers, mais si vous souhaitez aller en ce sens, je voudrai que votre produit soit interopérable avec C++ (ceci peut impliquer exposer une API pouvant être consommée par le moteur à l'aide de code C++, par exemple).
Vous pouvez me remettre ce livrable au plus tard à la séance S05 (ce qui nous amène après votre présentation de projet devant public), par courriel à Patrice.Roy@USherbrooke.ca
Le second livrable de la session sera le code fini, de même qu'un document succinct expliquant :
J'espère que vous apprécierez l'expérience!
Vous pouvez me remettre ce livrable au plus tard le 3 mai (ce qui nous amène après votre présentation de projet devant public), par courriel à Patrice.Roy@USherbrooke.ca
À venir...
Les consignes des livrables vont plus en détail; n'hésitez pas à communiquer avec moi si vous souhaitez des clarifications.