cofiprt / a3-s1-apd-t1-fractals Goto Github PK
View Code? Open in Web Editor NEWMulti-threaded C program to generate fractals
Multi-threaded C program to generate fractals
----- ALGORITMI PARALELI SI DISTRIBUITI ----- --- TEMA 1. Generare paralela de fractali --- ╔═╗╔═╗╔╦╗ ╠═╣╠═╝ ║║ ╩ ╩╩ ═╩╝ Cuprins: 1. Biblioteci...............................Linia 21 2. Modularizare.............................Linia 39 2.1. Header-ul "utils.h"................Linia 43 2.2. Sursa "skel.c".....................Linia 55 2.3. Sursa "tema1_par.c"................Linia 65 3. Alte detalii.............................Linia 114 === ============= === === 1. Biblioteci === === ============= === Folosesc: * stdio.h Functii de baza IO, precum suita de functii de 'print' * stdlib.h Functii cu scop in alocarea dinamica, precum 'malloc', 'free' * math.h Functii matematice, precum 'sqrt', 'pow' * pthread.h Functii si tipuri pentru multithreading, 'pthread_t', 'pbarrier_t' === =============== === === 2. Modularizare === === =============== === --- ------------------------ --- --- 2.1. Header-ul "utils.h" --- --- ------------------------ --- --- Macro-ul DIE --- Folosit pentru a incheia executia programului si a afisa un mesaj de eroare. --- Functia 'complex_norm' --- O simpla functie inline pentru calcularea modulului unui numar complex --- ------------------- --- --- 2.2. Sursa "skel.c" --- --- ------------------- --- Fisierul prezinta functiile din scheletul oferit pentru tema, usor modificat: - O noua variabila 'P', pentru numarul de thread-uri - Actualizat cu coding style-ul propriu si error handling-ul cu macro-ul DIE (Linia 46) --- ------------------------ --- --- 2.3. Sursa "tema1_par.c" --- --- ------------------------ --- Pentru iteratiile prin matrici, paralelizez intreaga matrice in parti aproximativ egale, incepand de la primul element (0, 0) pana la elementul (height, width). De exemplu, pentru o matrice: 1 2 3 4 5 6 7 8 9 10 11 12 Si 2 thread-uri, thread-urile lucreaza pe numerele: Thread 1 - [1, 2, 3, 4, 5, 6] Thread 2 - [7, 8, 9, 10, 11, 12] --- Functiile 'run_julia' si 'run_mandelbrot' --- Functiile au fost modificate pentru a calcula doar punctele aferente thread-ului curent, definit de 'thread_id'. Functia aplicata asupra punctul ramane neschimbata (pentru Julia/Mandelbrot) In interiorul loop-ului, am optimizat scurt operatiile int h = index / width; int w = index % width; Intrucat, in ceea ce priveste procesorul, avem ambele rezultate obtinute dupa o singura operatie (ori "/" ori "%") --- Functia 'thread_func' --- Functia principala apelata de fiecare thread. Initializarile precum citirile din fisier si alocarea memoriei sunt impartite in thread-uri, daca este posibil. Se ruleaza algoritmul pentru generarea rezultatului pentru multimea Julia, respectiv pentru Mandelbrot. Se asteapta ca toate thread-urile sa isi incheie partea de calcul a rezultatului, dupa care se imparte, pe cat este posibil, responsabilitatea scrierii in fisier, respectiv a eliberarii memoriei. --- Functia 'main' --- Se citesc argumentele din linia de comanda Se initializeaza bariera si se pornesc P-1 thread-uri pe functia 'thread_func' (Linia 91), intrucat oferim si main-ului o parte de calcul. Se asteapta incheierea fiecarui thread deschis si se elibereaza bariera. === =============== === === 3. Alte detalii === === =============== === Conform interventiilor de pe forum, am inteles ca imi este permis: - Sa salvez rezultatele direct in coordonate ecran; nu mai este necesara paralelizarea unei bucle la finalul lui 'run_julia'sau 'run_mandelbrot' - Sa ofer o parte de calcul thread-ului main, de aceea el porneste doar P - 1 thread-uri - Sa citesc inainte de functiile 'run_julia' si 'run_mandelbrot' si sa scriu dupa incheierea lor (pe fiecare thread) Prefer ca in cazul unei eventuale depunctari sa se analizeze interventiile, si sa mi se aduca la cunostinta daca in final tot s-a hotarat o depunctare cu privire la un aspect de mai sus.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.