Code Monkey home page Code Monkey logo

openmp-class-bench's Introduction

Zrównoleglenie wstępnego przetwarzania danych przy użyciu OpenMP

Wprowadzenie

Celem projektu jest implementacja popularnych algorytmów do przetwarzania danych, a także wykonanie i opis pomiaru czasowago wariantów algorytmów bez/z zrównolegleniem operując na środowisku OpenMP.

\noindent W projekcie za wariant A uznaje się wersję algorytmu bez zrównoleglenia, podczas gdy wariant B odpowiada ze wersję algorytmu zrównoleglonego.

\noindent Warianty A i B zostały porównane do ich alternatywnej implementacji napisanej w Pythonie (Wariant) C

\noindent Pomiary zamieszczone w dokumencie zostały wykonane na podstawie uśrednienia czasu realizacji trzydziestu obiegów programu.

\noindent W ramach projektu zaimplementowano następujące algorytmy:

  • algorytm standaryzacji min-max
  • algorytm standaryzacji rozkładem normalnym
  • algorytm najbliższych sąsiadów (KNN)

\noindent Algorytmy porównano na przykładowym zbiorze danych opisanym w następnym rozdziale.

Informacje o sprzęcie na którym wykonano pomiar

\noindent Model sprzętu:

  • Dell XPS 15 9570

\noindent Procesor:

  • 12 x Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz, 3933 MHz

\noindent Karta graficzna:

  • nVidia GP107M [GeForce GTX 1050 Ti Mobile]
  • Intel UHD Graphics 630 (Mobile)

Opis zbióru danych

\noindent Dane pochodzą z archiwum uci. Zawierają próbki kolorów G, R, B z wycinków obrazków twarzy ludzi w tym:

  • starych
  • młodych
  • w średnim wieku
  • o różnej rasie i kolorze skóry

\noindent Sumaryczna liczba próbek wynosi 245057 z czego tylko 50859 próbek zawiera w sobie kolory twarzy. W danych istnieją też wycinki z różnych obrazków nie przedstawiających ludzi.

\noindent Oryginalnie kolumna ostatnia zawierająca informację o przynależności kolorów G, R, B do twarzy miała następującą postać:

\noindent SKIN:

  • 1 - twarz
  • 2 - nie twarz

\noindent Dane zostały poddane wstępnej obróbce:

  1. Zamieniono kolumny tak, by odpowiadała kolejność R, G, B
  2. Zamieniono oznaczenie SKIN na:
    • 0 - nie twarz
    • 1 - twarz

Implementacja

Standaryzacja Min-Max

Klasa MinMax zdefiniowana w pliku src/MinMax.cpp realizuje proces standaryzacji wartości w danej kolumnie do przedziału [0, 1].

\noindent Standaryzacja min-max jest opisana wzorem

Pomiar A

g++ src/min_max.cpp -o min_max_no_omp

:

Mean exec time for benches of op: 'DS->MinMaxDS' 180.7 ms
Mean exec time for benches of op: 'MAX op' 2.14444 ms
Mean exec time for benches of op: 'MIN op' 2.17778 ms

Pomiar B

g++ -fopenmp src/min_max.cpp -o min_max

:

Mean exec time for benches of op: 'DS->MinMaxDS' 163.3 ms
Mean exec time for benches of op: 'MAX op' 0.922222 ms
Mean exec time for benches of op: 'MIN op' 0.866667 ms

Pomiar C

Mean of elapsed time for 30 execs took 77.21493699991697 ms

Standaryzacja rozkładem normalnym

Klasa StandardScaler zdefiniowana w pliku src/MinMax.cpp realizuje proces standaryzacji wartości w danej kolumnie do rozkładu normalnego N(0,1). Średnia wartość oczekiwana jest równa 0, a odchylenie standardowe wynosi 1.

Pomiar A

g++ src/standard_scaler.cpp -o standard_scaler_no_omp

:

Mean exec time for benches of op: 'DS->StandardScalerDS' 196.967 ms
Mean exec time for benches of op: 'MEAN op' 2.2 ms
Mean exec time for benches of op: 'STD op' 7.07778 ms

Pomiar B

g++ -fopenmp src/standard_scaler.cpp -o standard_scaler

:

Mean exec time for benches of op: 'DS->StandardScalerDS' 159.567 ms
Mean exec time for benches of op: 'MEAN op' 2.37778 ms
Mean exec time for benches of op: 'STD op' 0.833333 ms

Pomiar C

Mean of elapsed time for 30 execs took 83.95475529996475 ms

Klasyfikacja najblizszymi sąsiadami

Klasa Knn zdefiniowana w pliku src/knn.cpp realizuje proces klasyfikacji przy użyciu algorytmu najbliższych sąsiadów. Dane na dwa zbiory, testowy (20%) i trenujący (80%), a do klasyfikacji używanych jest 5 sąsiadów, przy użyciu metryki euklidesowej.

\noindent Liczba rekordów została zmniejszona do 5000.

Pomiar A

Pomiar B

Pomiar C

Wnioski

\noindent Obserwując pomiary można zauważyć, iż wersja bez zastosowania OpenMP dla operacji cząstkowych budujących rozwiązanie końcowe jest około dwa razy wolniejsza od swojego zrównoleglonego odpowiednika.

\noindent Przy tak małym zbiorze danych różnice jednak nie są znaczące. Zatem OpenMP jest jak najbardziej przydatne, ale tylko przy procesowaniu znaczącej ilości danych.

\noindent Wersje Pythonowe są 2 razy szybsze z oczywistych względów

openmp-class-bench's People

Contributors

fierycod avatar filipkrzysiek avatar

Watchers

James Cloos avatar  avatar Artur Kulig avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.