Portail informatique Année 2018 – 2019

PAAM – Programmation avancée des architectures multicoeurs

Ce TP a pour but de vous faire construire une mémoire transactionnelle en C.

Pour commencer, les étudiants doivent télécharger le squelette suivant :

Dans ce squelette, la mémoire est représentée par un tableau de cases (struct value) associant une valeur à un timestamp (champs clock). La mémoire elle-même est représentée par la variable memory de type struct memory, contenant un verrou, un tableau de struct value et un timestamp.

Le squelette lance THREADS threads qui exécutent chacun la méthode f en parallèle. Cette fonction incrémente LOOPS fois la variable se trouvant à l'indice 0 de la mémoire (i.e., du tableau memory.values) dans une transaction. A la fin du code, le squelette vérifie que la valeur de cette variable est bien égale à THREADS * LOOPS, c'est-à-dire qu'aucune incrémentation n'a été perdue.

Outre le code de test, le squelette contient déjà le code permettant d'initialiser la mémoire (initMemory). Les étudiants doivent donc compléter les fonctions writeValue, readValue et commitTX en utilisant l'algorithme donné en cours.