An open API service indexing awesome lists of open source software.

https://github.com/jakubfr4czek/concurrent-gauss-elimination

Concurrent gaussian elimination algorithm implemented using traces theory. Parallelism has been achieved employing CUDA cores.
https://github.com/jakubfr4czek/concurrent-gauss-elimination

agh agh-ust agh-wi conda cuda cuda-kernels cuda-toolkit diekert-graph graphviz java python python3 traces-theory

Last synced: 8 months ago
JSON representation

Concurrent gaussian elimination algorithm implemented using traces theory. Parallelism has been achieved employing CUDA cores.

Awesome Lists containing this project

README

          

# Concurrent Gaussian Elimination
Projekt wykorzystuje teorię śladów do współbieżnego rozwiązania układu równań metodą Eliminacji Gaussa.

# Opis zawartości repozytorium

Projekt został napisany w języku Python. Opis wykorzystanych modułów znajduje się w pliku environment.yml.

1) input - folder zawierający przykładowe dane wejściowe
2) output - folder zawierający przykładowe dane wyjściowe:
1) gauss_output.txt - zawiera rozwiązanie układu równań
2) traces_theory_output.txt - zawiera wyznaczony alfabet w sensie teorii śladów, relację zależności, słowo oraz klasy Foaty
3) diekert_graph.png - wyrenderowany graf Diekerta dla zadanego układu równań
3) sprawdzarka - folder zawierający pliki sprawdzarki
4) sprawozdanie - folder zawierający sprawozdanie z zadania w formacie pdf
5) environment.yml - folder zawierający zależności potrzebne do uruchomienia projektu
6) checker.py - moduł wykorzystujący sprawdzarkę do oceny poprawności kodu (Patrz: sekcja Uruchomienie checkera)
7) main.py - główny moduł, wywołuje funkcje wyznaczające obiekty matematyczne związane z teorią śladów oraz wyznacza rozwiązanie układu równań
8) scheduler.py - moduł odpowiedzialny za współbieżne wyznaczenie macierzy trójkątnej górnej przy wykorzystaniu rdzeni CUDA i wyznaczenie rozwiązania układu równań
9) traces_theory.py - moduł odpowiedzialny za wyznaczenie obiektów matematycznych związanych z teorią śladów
10) tools.py - funkcje pomocnicze do wyznaczania obiektów matematycznych związanych z teorią śladów
11) utility.py - funkcje pomocnicze realizujące zapis / odczyt do plików

# Uruchommienie projektu

Do uruchomienia projektu wymagana jest zainstalowana Anadonda (przetestowane na wersji 23.9.0). Oraz karta graficzna firmy Nvidia
posiadająca rdzenie CUDA. Kompatybilne karty można znaleźć tutaj: https://developer.nvidia.com/cuda-gpus.

W celu zainstalowania wymaganych zależności należy w terminalu kolejno wpisać:

```bash
cd "Concurrent Gauss Elimination"
conda env create -f environment.yml
conda activate Concurrent-Gauss-Elimination
python main.py input/example_input.txt output
```

Domyślnie graf Diekerta nie jest rysowany dla macierzy o rozmiarach większych od 10 bo jest on nieczytelny,
zachowanie to można zmienić ustawiając flagę force_graph na true w
funkcji traces_run w pliku main.py.

Funkcje traces_run i scheduler_run w pliku main.py działają niezależnie od siebie, pierwsza jest odpowiedzialna za wyznaczenie
obiektów matematycznych związanych z teorią śladów, a druga za rozwiązanie układu równań (oczywiście wyznaczając wcześniej klasy Foaty).

# Uruchomienie checkera

W celu skorzystania ze sprawdzarki wymagana jest instalacja Javy (przetesowane na wersji 21.0.2). Checker automatycznie
kompiluje i uruchamia sprawdzarkę korzystając z poleceń 'javac' i 'java'.

W folderze sprawdzarka znajduje się plik checker.py, a w nim funkcja check przyjmująca liczbę naturalną jako argument.
Uruchamia ona załączoną do treści zadania sprawdzarkę dla danego rozmiaru macierzy.