Within this project task, the aim is to implement an optimized algorithm for processing multimedia content, focusing on either sound or image using the convolution operation. The implementation should adhere to the principles of object-oriented programming (OOP), SOLID principles, as well as principles of writing readable code and conventions of the used programming languages.
- Parallelizability: The algorithm should be parallelizable to leverage the capabilities of multi-core processors for faster processing.
- Configurability: Users should have the ability to manually specify the convolutional kernel when running the algorithm.
- Command Line Interface: The program should accept paths to input and output files, as well as algorithm parameter values via the command-line argument.
- Default Values: Provide meaningful default values for all command-line arguments for user convenience.
- Performance Optimization: Implement algorithm optimization to achieve high performance, with a focus on efficient cache memory usage and the use of SIMD instructions for acceleration.
- Testing: Validate the correctness of the algorithm through unit tests to ensure its functionality.
- Performance Measurement: Conduct runtime measurements of the algorithm for different input sizes and various input data scenarios.
- Optimization: Graphically represent measurement results before and after applying optimizations and parallelization.
- Report: Prepare a report containing a problem description, description of the basic algorithm, description of optimized algorithm variants, details of performance measurement, hardware used for measurements, graphical analysis of results, and conclusion.
- Automation: Include a script that automatically runs all measurements mentioned in the report and saves the results to a file for easier reproduction.
This repository contains an implementation of an optimized algorithm for processing multimedia content, along with its accompanying report documenting the optimization process and performance analysis. The implementation is done following OOP principles and SOLID principles, using language-specific programming conventions. Additionally, a script for automated performance measurement of the algorithm and result storage is provided. Unit tests are included with the implementation to ensure algorithm correctness.
U okviru ovog projektnog zadatka, cilj je implementirati optimizovan algoritam za obradu multimedijalnog sadržaja, sa fokusom na zvuk ili sliku korišćenjem operacije konvolucije. Implementacija treba da bude u skladu sa principima objektno orijentisanog programiranja (OOP), SOLID principima, kao i principima pisanja čitljivog koda i konvencija korišćenih programskih jezika.
- Paralelizibilnost: Algoritam treba da bude paralelizibilan kako bi se iskoristile mogućnosti višejezgarnih procesora za bržu obradu.
- Konfigurabilnost: Korisnik treba da ima mogućnost ručnog specificiranja konvolucionog kernela prilikom pokretanja algoritma.
- Komandna linija: Program treba da prihvata putanje do ulaznog i izlaznog fajla, kao i vrednosti parametara algoritma preko argumenta komandne linije.
- Podrazumevane vrednosti: Obezbediti smislene podrazumevane vrednosti za sve argumente komandne linije radi praktičnosti korisnika.
- Optimizacija performansi: Implementirati optimizaciju algoritma kako bi se postigle visoke performanse, uz poseban fokus na efikasno korišćenje keš memorije i upotrebu SIMD instrukcija radi ubrzanja.
- Testiranje: Isprobati ispravnost algoritma kroz jedinične testove kako bi se osigurala njegova funkcionalnost.
- Merenja performansi: Izvršiti merenja vremena izvršavanja algoritma za različite veličine ulaza i različite slučajeve ulaznih podataka.
- Optimizacija: Grafički predstaviti rezultate merenja pre i posle primene optimizacija i paralelizacije.
- Izveštaj: Pripremiti izveštaj koji sadrži opis problema, opis osnovnog algoritma, opis optimizovanih varijanti algoritma, detalje o merenju performansi, hardver korišćen za merenja, grafičku analizu rezultata i zaključak.
- Automatizacija: Priložiti skriptu koja automatski pokreće sva merenja navedena u izveštaju i čuva rezultate u fajlu radi lakše reprodukcije.
Ovaj repozitorijum sadrži implementaciju optimizovanog algoritma za obradu multimedijalnog sadržaja, kao i pripadajući izveštaj koji dokumentuje proces optimizacije i analizu performansi. Implementacija je realizovana u skladu sa principima OOP i SOLID principima, uz korišćenje konvencija programskih jezika. Takođe, priložena je skripta za automatsko merenje performansi algoritma i čuvanje rezultata. Uz implementaciju su priloženi i jedinični testovi kako bi se osigurala ispravnost algoritma.