{"id":22086238,"url":"https://github.com/probablyclem/m2-prog-parallele","last_synced_at":"2025-03-23T22:18:33.958Z","repository":{"id":232951976,"uuid":"785636541","full_name":"ProbablyClem/m2-prog-parallele","owner":"ProbablyClem","description":null,"archived":false,"fork":false,"pushed_at":"2024-05-27T16:14:35.000Z","size":275,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-29T05:28:25.054Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ProbablyClem.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-12T09:47:25.000Z","updated_at":"2024-05-27T16:14:38.000Z","dependencies_parsed_at":"2024-04-12T16:57:13.655Z","dependency_job_id":"07fc0478-4714-4a43-b1f4-cd0667e85545","html_url":"https://github.com/ProbablyClem/m2-prog-parallele","commit_stats":null,"previous_names":["probablyclem/m2-prog-parallele"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProbablyClem%2Fm2-prog-parallele","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProbablyClem%2Fm2-prog-parallele/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProbablyClem%2Fm2-prog-parallele/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProbablyClem%2Fm2-prog-parallele/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ProbablyClem","download_url":"https://codeload.github.com/ProbablyClem/m2-prog-parallele/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245175535,"owners_count":20572792,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-01T01:22:22.576Z","updated_at":"2025-03-23T22:18:33.920Z","avatar_url":"https://github.com/ProbablyClem.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# m2-prog-parallele\n## Goupe\n- GUITON Clément\n- CHEMIN Bastien\n- AZOUZ Theo\n- AOUN Yorgo\n\n## Technologies\nNous utilisons Rust car c'est un language de programmation très performant, permettant de faire de la programation concurrente facilement et sans risque de race condition.\n\nNous utilisons la librairie `rayon`, qui l'est l'outil Rust le plus populaire de parraléliser des taches.\n\n## Cas 1\nNous avons choisis de lire un fichier de logs ligne par ligne, pour compter le nombre de lignes en erreur.\n\nPour effectuer notre test, nous avons implémenté deux fonctions qui parcourent le fichier de logs et qui comptent le nombre de lignes en erreur. La première fonction est séquentielle et la deuxième est parallèle.\n\nNous avons effectué 100 000 tests pour chaque fonction et nous avons calculé la moyenne des temps d'éxécution. Afin d'éviter les effets de bords, nous avons effectué un test préliminaire pour chauffer la machine.\n\n### Résultats\n### Fichier de 4.90MB et 56 000 lignes\n- Time elapsed in warmup is: 4.957µs\n- Mean time elapsed in read_file_serial() is: 4.497195ms\n- Mean time elapsed in read_file_parallel() is: 24.23089ms\n\n### Fichier de 1.47GB et 11 millions de lignes\n- Time elapsed in warmup is: 3.991µs\n- Mean time elapsed in read_file_serial() is: 1.159262837s\n- Mean time elapsed in read_file_parallel() is: 5.308530566s\n\n### Analyse \nNous constatons ici que la fonction séquentielle est plus rapide que la fonction parallèle.\nCela s'explique par le fait que chaque unité de travail est très petite et que le coût de la parallélisation est plus grand que le coût de la séquentialisation.\nDe plus, la lecture d'un fichier est une opération séquentielle, donc la parallélisation n'apporte pas de gain de performance.\n\n## Cas 2\nPour le deuxième cas, nous gardons le même principe que le premier cas, mais la lecture du fichier se fait toujours de séquentiel, tandis que seul le traitement des lignes est parallèle.\n\n### Résultats\n### Fichier de 4.90MB et 56 000 lignes\n- Time elapsed in warmup is: 7.543425ms\n- Mean time elapsed in read_file_serial() is: 6.134872ms\n- Mean time elapsed in read_file_parallel() is: 6.365241ms\n\n### Fichier de 1.47GB et 11 millions de lignes\n- Time elapsed in warmup is: 2.123232429s\n- Mean time elapsed in read_file_serial() is: 1.692442484s\n- Mean time elapsed in read_file_parallel() is: 1.863808356s\n\n### Analyse \nNous constatons ici que la différence de temps d'éxécution entre la fonction séquentielle et la fonction parallèle est très faible.\nEn effet, la majorité du temps d'éxécution est consacré à la lecture du fichier, qui est une opération séquentielle.\n\n## Cas 3\nNous prenons la meme logique que le cas 2, mais cette fois, nous ajoutons un .to_lowercase() sur chaque ligne.\nCe qui rend le traitement de chaque ligne plus long.\n\n### Résultats\n### Fichier de 4.90MB et 56 000 lignes\n- Time elapsed in warmup is: 7.529008ms\n- Mean time elapsed in read_file_serial() is: 11.660949ms\n- Mean time elapsed in read_file_parallel() is: 7.733803ms\n\n### Fichier de 1.47GB et 11 millions de lignes\n- Time elapsed in warmup is: 2.031219287s\n- Mean time elapsed in read_file_serial() is: 3.080727283s\n- Mean time elapsed in read_file_parallel() is: 1.77909305s\n\n### Analyse \nNous constatons ici une nette amélioration de la fonction parallèle par rapport à la fonction séquentielle.\nEn effet, chaque unité de travail etant plus longue, le coût de la parallélisation est plus faible que le coût de la séquentialisation.\n\n## Conclusion\nLa parralélisation est un outil efficace qui peut grandement améliorer les performances d'un programme.\nCependant, ce n'est pas une solution miracle a tous les problèmes.\nla parralélisation demande une certaine réflexion et une bonne connaissance du problème à résoudre pour être efficace.\nElle peut meme avoir un impact négatif sur les performances si elle est mal utilisée.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprobablyclem%2Fm2-prog-parallele","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprobablyclem%2Fm2-prog-parallele","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprobablyclem%2Fm2-prog-parallele/lists"}