LocalazyLocalazy
Cilk est un langage de programmation parallèle développé au MIT par Charles E. Leiserson, Keith H. Randall et Silviu C. Craciunas. Il est basé sur le langage de programmation C et ajoute quelques mots-clés pour supporter le parallélisme. Les programmes Cilk sont exécutés par un système d'exécution qui gère un pool de threads de travail. Lorsqu'une fonction Cilk est invoquée, le système d'exécution génère un nouveau thread pour exécuter la fonction. Le thread engendré peut à son tour engendrer d'autres threads, créant ainsi un arbre de threads. Le système d'exécution Cilk est conçu pour fonctionner avec n'importe quel modèle de programmation parallèle, tel que la mémoire partagée ou le passage de messages. Cependant, le modèle le plus courant est la mémoire partagée, où chaque thread possède ses propres données privées, mais peut également accéder aux données partagées. Cilk fournit quelques mots-clés pour supporter le parallélisme. Le plus important est "cilk_spawn", qui génère un nouveau thread pour exécuter une fonction. Le thread engendré peut à son tour engendrer d'autres threads, créant ainsi un arbre de threads. Le mot-clé "cilk_sync" est utilisé pour synchroniser tous les threads d'un programme Cilk. Lorsqu'un thread atteint une instruction "cilk_sync", il attend que tous les threads enfants aient terminé avant de poursuivre. Cela garantit que tous les threads ont terminé leur travail avant que le programme ne continue. Le modèle de programmation Cilk est basé sur le principe "diviser pour mieux régner". Pour paralléliser un problème, celui-ci est divisé en sous-problèmes plus petits, qui sont ensuite résolus en parallèle. Cette approche est bien adaptée aux problèmes qui peuvent être divisés en sous-problèmes indépendants. Le programme "Hello, World !" est un exemple simple de programme Cilk : #include <stdio.h> int main() { cilk_spawn printf("Bonjour, ") ; printf("Monde!\n") ; cilk_sync ; return 0 ; } Dans ce programme, la chaîne "Hello, World !" est imprimée par deux threads. Le premier thread est créé par le mot-clé "cilk_spawn" et imprime la chaîne "Hello, ". Le deuxième thread, qui est le thread principal, imprime la chaîne "World ! Le mot clé "cilk_sync" synchronise les deux threads, de sorte que la chaîne "Monde !" ne soit pas imprimée tant que la chaîne "Bonjour, " n'a pas été imprimée. Cilk est un outil puissant pour la programmation parallèle, mais il présente quelques inconvénients. Premièrement, les programmes Cilk peuvent être difficiles à comprendre et à déboguer. Ensuite, le système d'exécution de Cilk peut être lent, surtout lorsqu'il s'agit de créer de nombreux threads. Enfin, Cilk ne prend pas en charge certains modèles de programmation parallèle importants, tels que le parallélisme des données.