{"id":24375871,"url":"https://github.com/csvancea/parallel-numint","last_synced_at":"2025-10-07T06:48:13.714Z","repository":{"id":130856215,"uuid":"433233547","full_name":"csvancea/parallel-numint","owner":"csvancea","description":null,"archived":false,"fork":false,"pushed_at":"2022-01-18T21:36:22.000Z","size":512,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-30T03:37:46.979Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","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/csvancea.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,"zenodo":null}},"created_at":"2021-11-29T23:53:52.000Z","updated_at":"2022-01-12T19:03:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"262317cb-ed7d-4032-996a-4d21c4d59967","html_url":"https://github.com/csvancea/parallel-numint","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/csvancea/parallel-numint","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csvancea%2Fparallel-numint","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csvancea%2Fparallel-numint/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csvancea%2Fparallel-numint/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csvancea%2Fparallel-numint/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/csvancea","download_url":"https://codeload.github.com/csvancea/parallel-numint/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csvancea%2Fparallel-numint/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278734424,"owners_count":26036404,"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","status":"online","status_checked_at":"2025-10-07T02:00:06.786Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":"2025-01-19T05:58:29.463Z","updated_at":"2025-10-07T06:48:13.708Z","avatar_url":"https://github.com/csvancea.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Parallel Numerical Integration - Cosmin-Răzvan VANCEA - 343C1\n\nAlgoritmul folosit pentru integrare numerică este [Composite Simpson's Rule](https://en.wikipedia.org/wiki/Simpson%27s_rule#Composite_Simpson's_rule).\n\n## Implementări\n\n1. Serială (pentru validarea rezultatelor)\n2. OpenMP\n3. MPI\n4. pthread\n5. MPI + OpenMP\n6. MPI + pthread **(BONUS)**\n\nToate implementările se găsesc în directorul [src/impl/](src/impl/).\n\n## Compilare\n\n`make` va genera în directorul `bin/` câte un executabil pentru fiecare\ndintre cele 6 implementări\n\n## Rulare\n\nProgramele generate se execută din linia de comanda și așteaptă următorii parametri:\n\n- `math-func-name`: numele funcției matematice care va fi integrată. Funcțiile disponibile\nsunt definite în fișierul sursă [src/math_funcs.c](src/math_funcs.c).\n- `a`: limita inferioară a integralei definite\n- `b`: limita superioară a integralei definite\n- `n`: numărul de subintervale folosite în calcularea integralei\n\nDe exemplu, pentru a integra funcția `f(x) = x` pe intervalul de integrare [0, 1], folosind\n100 de subintervale și implementarea paralelă cu pthread, se va executa următoarea comandă:\n\n```\n$ ./bin/pthread identity 0 1 100\n```\n\n### Detalii specifice implementărilor\n\n#### OpenMP\n\nPentru a specifica numărul de thread-uri folosite în calculul paralel, se va folosi variabila\nde mediu `OMP_NUM_THREADS`. Exemplu pentru 4 thread-uri:\n\n```\n$ OMP_NUM_THREADS=4 ./bin/omp loge 1 1.5 1000\n```\n\n#### MPI\n\nProgramele MPI trebuie rulate prin executabilul `mpirun`. Parametrul `-np` determină numărul\nde procese MPI folosite:\n\n```\n$ mpirun -np 4 ./bin/mpi loge 1 1.5 1000\n```\n\n#### pthread\n\nPentru a specifica numărul de thread-uri folosite în calculul paralel, se va folosi variabila\nde mediu `NUMINT_NUM_PROCS`. Dacă nu se specifică o valoare anume, se vor folosi toate core-urile\ndisponibile. Exemplu pentru 4 thread-uri:\n\n```\n$ NUMINT_NUM_PROCS=4 ./bin/pthread loge 1 1.5 1000\n```\n\n#### MPI + OpenMP\n\nFiecarui proces MPI îi revine un număr egal de puncte ce trebuie calculate. Mai departe, fiecare\nproces MPI va lansa T thread-uri folosind OpenMP și va împărți punctele sale acestor thread-uri.\n\nPentru a specifica numărul de procese MPI se folosește parametrul `-np` al lui `mpirun`, iar\nnumărul de thread-uri lansate de fiecare proces în parte se specifică folosind variabila de\nmediu `OMP_NUM_THREADS`.\n\nÎn următorul exemplu vor lansate 4 procese MPI, iar fiecare proces va lansa câte 8 thread-uri:\n\n```\n$ OMP_NUM_THREADS=8 mpirun -np 4 ./bin/mpi_omp loge 1 1.5 1000\n```\n\n#### MPI + pthread\n\nImplementare asemănătoare cu cea de mai sus, diferențele fiind reprezentate de gestionarea\nthread-urilor și de împărțirea manuală a punctelor pe thread-uri, ambele realizate acum explicit\nde către programator.\n\nÎn următorul exemplu vor lansate 4 procese MPI, iar fiecare proces va lansa câte 8 thread-uri\n(a se observa folosirea variabilei `NUMINT_NUM_PROCS` spre deosebire de mai sus):\n\n```\n$ NUMINT_NUM_PROCS=8 mpirun -np 4 ./bin/mpi_pthread loge 1 1.5 1000\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcsvancea%2Fparallel-numint","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcsvancea%2Fparallel-numint","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcsvancea%2Fparallel-numint/lists"}