Projekt został zrealizowany w ramach przedmiotu Procesory Graficzne w Zastosowaniach Obliczeniowych w trakcie zimowego semestru roku akademickiego 2024-2025 z wykorzystaniem CUDA.
Projekt zawiera
cpu
to implementacja algorytmu wykonywana całkowicie na CPU.gpu1
to implementacja z wykorzystaniem własnych funkcji wykonywanych na karcie graficznej.gpu2
to alternatywna implementacja korzystająca z biblioteki Thrust.
-
$N$ - liczba punktów ($1 \leq N \leq 50 \times 10^6$ ) -
$d$ - liczba wymiarów przestrzeni ($1 \leq d \leq 20$ ) -
$k$ - liczba centroidów ($1 \leq k \leq 20$ )
W programie zaimplementowana dwa formaty danych wejściowych.
Pierwsza linia pliku zawiera
Przykładowo, dla
4 3 2
12.20 1.12 5.55
34.45 5.23 2.34
65.33 1.10 4.40
4.90 3.34 0.12
Format ten jest w pełni analogiczny do tekstowego.
Pierwsze float
.
Wyniki są zapisywane wyłącznie w formacie tekstowym.
Pierwsze
Przykładowo, dla
12.20 1.12 5.55
34.45 5.23 2.34
0
1
2
1
KMeans data_format computation_method input_file output_file
Program pobiera 4 parametry pozycyjne:
data_format
, który określa format danych wejściowych (txt
|bin
)computation_method
, który określa zastosowany algorytm (cpu
|gpu1
|gpu2
)input_file
, który określa ścieżkę do pliku wejściowego w odpowiednim formacieoutput_file
, który określa ścieżkę do pliku wyjściowego- jeżeli plik nie istnieje, to zostanie utworzony
- w przyciwnym przypadku jego zawartość zostanie nadpisana przez aktualne wywołanie programu
Dla
Pozycja kamery jest jest wyznaczana dynamicznie na podstawie aktualnego zbioru danych, aby zapewnić widoczność wszystkich punktów rozważanego zbioru.
Wizualizacja została zaimplementowana z wykorzystaniem OpenGL. Wszystkie potrzebne zależności zostały umieszczone w repozytorium i skonfigurowane w projekcie.
Dodatkowo KMeans.Visualization
zawiera skrypt kmeans_visualization.py
do wizualizacji wyniku działania algorytmu w języku Python oraz skrypt kmeans_generate_data.py
, pozwalający na wygenerowanie przykładowego pliku wejściowego.
Plik requirements.txt
zawiera biblioteki wymagane do uruchomienia skryptów. W celu zainstalowania potrzebnych zależności należy skorzystać z narzędzia pip.