{"id":31505654,"url":"https://github.com/gianmariaromano/pmc-translated-notes","last_synced_at":"2026-05-14T12:35:26.261Z","repository":{"id":316367987,"uuid":"1062835008","full_name":"GianmariaRomano/PMC-Translated-Notes","owner":"GianmariaRomano","description":"The repository contains translated notes for the course \"Programmazione di Sistemi Multicore\" given by Professor De Sensi for the \"Informatica\" course at Sapienza Università di Roma.","archived":false,"fork":false,"pushed_at":"2025-10-01T13:46:11.000Z","size":935,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-01T14:25:09.643Z","etag":null,"topics":["cuda","cuda-programming","mpi","multicore","openmp","parallel-computing","parallel-programming","pthreads"],"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/GianmariaRomano.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-23T19:50:34.000Z","updated_at":"2025-10-01T13:46:14.000Z","dependencies_parsed_at":"2025-09-24T08:22:54.216Z","dependency_job_id":null,"html_url":"https://github.com/GianmariaRomano/PMC-Translated-Notes","commit_stats":null,"previous_names":["gianmariaromano/pmc-translated-notes"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/GianmariaRomano/PMC-Translated-Notes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GianmariaRomano%2FPMC-Translated-Notes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GianmariaRomano%2FPMC-Translated-Notes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GianmariaRomano%2FPMC-Translated-Notes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GianmariaRomano%2FPMC-Translated-Notes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GianmariaRomano","download_url":"https://codeload.github.com/GianmariaRomano/PMC-Translated-Notes/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GianmariaRomano%2FPMC-Translated-Notes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278063119,"owners_count":25923594,"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-02T02:00:08.890Z","response_time":67,"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":["cuda","cuda-programming","mpi","multicore","openmp","parallel-computing","parallel-programming","pthreads"],"created_at":"2025-10-02T20:09:19.446Z","updated_at":"2026-05-14T12:35:26.239Z","avatar_url":"https://github.com/GianmariaRomano.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📚 Programmazione di Sistemi Multicore – Translated Notes \u0026 Code\n\n## ⭐ About this Repository\n\nThis repository contains translated lecture notes and codes for the **\"Programmazione di Sistemi Multicore\"** course, taught by **Professor De Sensi** as part of the **Bachelor of Science in Informatica** at **Sapienza Università di Roma**.\n\n---\n\n## 📍 Course Details\n\n- **📅 Lecture Schedule:**\n  - **Tuesdays:** 17:00 – 19:00 at *Aula Magna, Regina Elena*.\n  - **Wednesdays:** 14:00 – 17:00 at *Aula 11, Via Scarpa, Engineering Department*.\n\n- **🧪 Exam Structure:**\n  - A project and an oral exam covering both the project and the theoretical topics discussed throughout the lectures.\n\n    The evaluation will take the following factors into consideration:\n    - **Project performance:** 10 points.\n      - The *OpenMP + MPI* implementation is worth up to 5 points.\n      - The *CUDA* implementation is worth up to 5 points.\n      \n      **‼ Since the code is tested on the cluster, make sure that it works on it as, otherwise, you will automatically fail the exam.**\n    - **Report and analysis:** 6 points.\n      - The *clarity* and *scaling analysis* are worth up to 4 points.\n      - The *profiling techniques* are worth up to 2 points.\n    - **Project defense:** 6 points.\n      - The explanation of the *design choices* is worth up to 3 points.\n      - Further *questions on (alternative) design choices* are worth up to 3 points.\n    - **Oral exam:** 8 points.\n    For more information, refer to the Moodle page of the course.\n\n---\n\n## 🚨 Executing Codes in Linux\n\nThe Professor uses Linux as the main terminal/compiler for the course.\n\nIf you are not familiar with it, here are some instructions for running a C file in a Linux environment:\n\n1) `gcc [filename].c -o [filename]`: use this command to *compile and name the executable file (this also comes in handy to avoid ambiguities)*.\n2) `./[filename]`: use this command to *run the executable file*.\n3) `rm [filename]`: if needed, use this command to *delete the executable file*.\n\nHowever, some APIs use different instructions for running these files:\n\n- 📮 **OpenMPI**\n  1) `mpicc -g -Wall -o [filename] [filename].c`: use this command to *compile the executable file*.\n  2) `mpiexec -n [processes] ./[filename]`: use this command to *run the executable file* or, by adding `ddd`, to *debug the program*.\n- 🐌 **PThreads**\n  \n  Use the `pthread_create()` function to *start the threads in the executable file*.\n- 🧭 **OpenMP**\n  1) ` gcc -g -Wall -fopenmp -o [filename] [filename].c`: use this command to *compile the executable file* in OpenMP.\n  2) `./[filename] n`: use this command to *run the executable file* using *n threads*.\n\n     **N.B.:** The scheduling order of the threads is non-deterministic.\n- 🛰 **CUDA**\n  1) `nvcc --arch=sm_20 [filename].cu --o [filename]`: use this command to *compile the executable file* using CC 2.0.\n  2) `./[filename]`: use this command to *run the executable file*.\n\n     **N.B.:** For formality, programs containing CUDA codes are characterized by the `.cu` extension.\n\n     **N.B.:** If your laptop does not support CUDA GPUs, you can ask the Professor to give you access to a University cluster (refer to the form shown on the November 25 lecture) or run CUDA using Google Colab (refer to last year's materials).\n\n---\n\n## 🎬 Additional Information\n\n- 📌 For official communications and course materials, please refer to the Moodle page of the course.\n- 📩 For any questions or clarifications, feel free to contact me directly.\n- 📈 The Professor will use a GitHub classroom to handle the exercises, which will be pushed and graded according to their correctness.\n\n  **N.B.:** For this year, the grades of the exercises will **not** impact the final grade of the exam.\n\n---\n\n## 📖 Course Log\n**23 September:** Introduction to the course and to **parallel computing**.\n\n**24 September:** Introduction to the C programming language: **variables, operators, input/output activities, selective branches, iterative branches, arrays, strings, functions, pointers**.\n\n~~**30 September:**~~ This lecture was cancelled.\n\n**1 October:** Introduction to the C programming language: **memory allocation, structs, lists**.\n\n**7 October:** Recap on the **von Neumann architecture** and introduction to **MPI**.\n\n**8 October**: **Message matching** and **communication modes** in MPI.\n\n~~**14 October:**~~ This lecture was cancelled.\n\n~~**15 October:**~~ This lecture was cancelled.\n\n**21 October:** **Parallel design strategies** (GPLS, GSLP) and **collective communication** in MPI.\n\n**22 October:** Exercises on MPI and evaluation of parallel programming: **speed-up**, **efficiency** and **scalability**.\n\n**28 October:** Estimating speed-up using **Amdahl's law** and **Gustafson's law**.\n\n**29 October:** Exercises on MPI and recap of **PThreads**.\n\n~~**4 November:**~~ This lecture was cancelled.\n\n~~**5 November:**~~ This lecture was cancelled.\n\n**11 November:** Introduction to the **OpenMP** API: **pragmas and clauses, variable scope and reductions**.\n\n**12 November:** Exercises and **parallel for loops**.\n\n~~**18 November:**~~ This lecture was cancelled.\n\n~~**19 November:**~~ This lecture was cancelled.\n\n**25 November:** Introduction to **CUDA**.\n\n**26 November:** Recap on **thread scheduling in CUDA** and **memory hierarchies**.\n\n***1 December:** Extra lecture on profiling for bottlenecks in high-performance computers*.\n\n**2 December:** Recap on **OpenMP** and introduction to **synchronization constructs** and **data dependencies**.\n\n**3 December:** Recap of **data dependencies** for parallel loops.\n\n**9 December:** The main aspects of **caching** for **single-core** and **multicore architectures**.\n\n**10 December:** The CUDA **memory hierarchy**.\n\n**16 December:** Introduction to **virtual memory management** and handling the shared memory (**bank conflicts**) and the global memory (**coalescing**).\n\n**17 December:** Performing **reductions in CUDA** and using MPI for **GPU data transfers**.\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgianmariaromano%2Fpmc-translated-notes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgianmariaromano%2Fpmc-translated-notes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgianmariaromano%2Fpmc-translated-notes/lists"}