Browse Source

Refresh the report and better commenting

master
parent
commit
a8e7408fe6
15 changed files with 110 additions and 107 deletions
  1. BIN
      homework_1/homework_1_report.pdf
  2. +2
    -4
      homework_1/inc/v1.hpp
  3. +4
    -4
      homework_1/matlab/measurements_over_acc.m
  4. +4
    -4
      homework_1/matlab/measurements_over_th.m
  5. BIN
      homework_1/measurements/CILK_over_accuracy.png
  6. BIN
      homework_1/measurements/CILK_over_threads.png
  7. BIN
      homework_1/measurements/OMP_over_accuracy.png
  8. BIN
      homework_1/measurements/OMP_over_threads.png
  9. BIN
      homework_1/measurements/Pthreads_over_accuracy.png
  10. BIN
      homework_1/measurements/Pthreads_over_threads.png
  11. +24
    -24
      homework_1/measurements/over_acc.txt
  12. +30
    -28
      homework_1/measurements/over_threads.txt
  13. BIN
      homework_1/report/homework_1_report.pdf
  14. +46
    -16
      homework_1/report/homework_1_report.tex
  15. +0
    -27
      homework_1/run_measurements.sh

BIN
homework_1/homework_1_report.pdf View File


+ 2
- 4
homework_1/inc/v1.hpp View File

@@ -165,7 +165,7 @@ void knnsearch(MatrixD& C, MatrixD& Q, size_t num_slices, size_t k, size_t m, Ma
Q.columns());
}

// Intermediate results
// Initialize results
for (size_t i = 0; i < dst.rows(); ++i) {
for (size_t j = 0; j < dst.columns(); ++j) {
dst.set(std::numeric_limits<DstType>::infinity(), i, j);
@@ -202,9 +202,7 @@ void knnsearch(MatrixD& C, MatrixD& Q, size_t num_slices, size_t k, size_t m, Ma

#else
for (size_t qi = 0; qi < num_slices; ++qi) {
for (size_t qi = 0; qi < num_slices; ++qi) {
worker_body (corpus_slices, query_slices, idx, dst, qi, num_slices, corpus_slice_size, query_slice_size, k, m);
}
worker_body (corpus_slices, query_slices, idx, dst, qi, num_slices, corpus_slice_size, query_slice_size, k, m);
}
#endif



+ 4
- 4
homework_1/matlab/measurements_over_acc.m View File

@@ -5,17 +5,17 @@ ser_sift_acc = [ 4395 4365 4384 4315 4295 4246 ];
ser_mnist_ser_acc = [ 7936 7924 7886 7903 7844 7801 ];

omp_sift_acc = [
4093 4098 4040 4001 3980 3937
1162 1157 1148 1138 1134 1107
];
omp_mnist_acc = [
7575 7463 7389 7416 7321 7303
2044 2036 2028 2007 1993 1973
];
cilk_sift_acc = [
3718 3739 3673 3668 3608 3557
1148 1133 1127 1096 1079 1057
];
cilk_mnist_acc = [
7064 7071 7035 6948 6962 6913
2008 2024 1974 1965 1959 1947
];

pth_sift_acc = [


+ 4
- 4
homework_1/matlab/measurements_over_th.m View File

@@ -5,17 +5,17 @@ ser_sift_threads = [ 4418 4418 4418 4418 4418 4418 4418 ];
ser_mnist_ser_threads = [ 7924 7924 7924 7924 7924 7924 7924 ];

omp_sift_th = [
4469 4283 4096 3822 4060 4241 5193
4374 2194 1148 751 724 637 596
];
omp_mnist_th = [
8053 7806 7465 6828 7662 8013 8123
7918 3941 2031 1395 1415 1330 1292
];
cilk_sift_th = [
4225 4090 3696 3122 3860 4141 5103
4183 2076 1114 886 706 742 636
];
cilk_mnist_th = [
7744 7206 6965 6628 7362 7813 8123
7745 3883 2020 1454 1436 1342 1292
];

pth_sift_th = [


BIN
homework_1/measurements/CILK_over_accuracy.png View File

Before After
Width: 4000  |  Height: 2250  |  Size: 100 KiB Width: 4000  |  Height: 2250  |  Size: 93 KiB

BIN
homework_1/measurements/CILK_over_threads.png View File

Before After
Width: 4000  |  Height: 2250  |  Size: 92 KiB Width: 4000  |  Height: 2250  |  Size: 97 KiB

BIN
homework_1/measurements/OMP_over_accuracy.png View File

Before After
Width: 4000  |  Height: 2250  |  Size: 102 KiB Width: 4000  |  Height: 2250  |  Size: 97 KiB

BIN
homework_1/measurements/OMP_over_threads.png View File

Before After
Width: 4000  |  Height: 2250  |  Size: 104 KiB Width: 4000  |  Height: 2250  |  Size: 99 KiB

BIN
homework_1/measurements/Pthreads_over_accuracy.png View File

Before After
Width: 4000  |  Height: 2250  |  Size: 100 KiB Width: 4000  |  Height: 2250  |  Size: 100 KiB

BIN
homework_1/measurements/Pthreads_over_threads.png View File

Before After
Width: 4000  |  Height: 2250  |  Size: 105 KiB Width: 4000  |  Height: 2250  |  Size: 105 KiB

+ 24
- 24
homework_1/measurements/over_acc.txt View File

@@ -30,62 +30,62 @@ hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1 -c mtx/mni

# OMP-sift over acc
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/sift-128-euclidean.hdf5 /test -s 4 -a 100 -k 100 -t
[Timing]: knnsearch: 4093 [msec]
[Timing]: knnsearch: 1162 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/sift-128-euclidean.hdf5 /test -s 4 -a 80 -k 100 -t
[Timing]: knnsearch: 4098 [msec]
[Timing]: knnsearch: 1157 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/sift-128-euclidean.hdf5 /test -s 4 -a 60 -k 100 -t
[Timing]: knnsearch: 4040 [msec]
[Timing]: knnsearch: 1148 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/sift-128-euclidean.hdf5 /test -s 4 -a 40 -k 100 -t
[Timing]: knnsearch: 4001 [msec]
[Timing]: knnsearch: 1138 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/sift-128-euclidean.hdf5 /test -s 4 -a 20 -k 100 -t
[Timing]: knnsearch: 3980 [msec]
[Timing]: knnsearch: 1134 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/sift-128-euclidean.hdf5 /test -s 4 -a 10 -k 100 -t
[Timing]: knnsearch: 3937 [msec]
[Timing]: knnsearch: 1107 [msec]

# OMP-mnist over acc
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/mnist-784-euclidean.hdf5 /test -s 4 -a 100 -k 100 -t
[Timing]: knnsearch: 7575 [msec]
[Timing]: knnsearch: 2044 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/mnist-784-euclidean.hdf5 /test -s 4 -a 80 -k 100 -t
[Timing]: knnsearch: 7463 [msec]
[Timing]: knnsearch: 2036 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/mnist-784-euclidean.hdf5 /test -s 4 -a 60 -k 100 -t
[Timing]: knnsearch: 7389 [msec]
[Timing]: knnsearch: 2028 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/mnist-784-euclidean.hdf5 /test -s 4 -a 40 -k 100 -t
[Timing]: knnsearch: 7416 [msec]
[Timing]: knnsearch: 2007 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/mnist-784-euclidean.hdf5 /test -s 4 -a 20 -k 100 -t
[Timing]: knnsearch: 7321 [msec]
[Timing]: knnsearch: 1993 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/mnist-784-euclidean.hdf5 /test -s 4 -a 10 -k 100 -t
[Timing]: knnsearch: 7303 [msec]
[Timing]: knnsearch: 1973 [msec]



# CILK-sift over acc
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/sift-128-euclidean.hdf5 /test -s 4 -a 100 -k 100 -t
[Timing]: knnsearch: 4218 [msec]
[Timing]: knnsearch: 1148 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/sift-128-euclidean.hdf5 /test -s 4 -a 80 -k 100 -t
[Timing]: knnsearch: 4239 [msec]
[Timing]: knnsearch: 1133 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/sift-128-euclidean.hdf5 /test -s 4 -a 60 -k 100 -t
[Timing]: knnsearch: 4173 [msec]
[Timing]: knnsearch: 1127 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/sift-128-euclidean.hdf5 /test -s 4 -a 40 -k 100 -t
[Timing]: knnsearch: 4168 [msec]
[Timing]: knnsearch: 1096 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/sift-128-euclidean.hdf5 /test -s 4 -a 20 -k 100 -t
[Timing]: knnsearch: 4108 [msec]
[Timing]: knnsearch: 1079 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/sift-128-euclidean.hdf5 /test -s 4 -a 10 -k 100 -t
[Timing]: knnsearch: 4057 [msec]
[Timing]: knnsearch: 1057 [msec]


# CILK-mnist over acc
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/mnist-784-euclidean.hdf5 /test -s 4 -a 100 -k 100 -t
[Timing]: knnsearch: 7864 [msec]
[Timing]: knnsearch: 2008 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/mnist-784-euclidean.hdf5 /test -s 4 -a 80 -k 100 -t
[Timing]: knnsearch: 7871 [msec]
[Timing]: knnsearch: 2024 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/mnist-784-euclidean.hdf5 /test -s 4 -a 60 -k 100 -t
[Timing]: knnsearch: 7835 [msec]
[Timing]: knnsearch: 1974 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/mnist-784-euclidean.hdf5 /test -s 4 -a 40 -k 100 -t
[Timing]: knnsearch: 7748 [msec]
[Timing]: knnsearch: 1965 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/mnist-784-euclidean.hdf5 /test -s 4 -a 20 -k 100 -t
[Timing]: knnsearch: 7762 [msec]
[Timing]: knnsearch: 1959 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/mnist-784-euclidean.hdf5 /test -s 4 -a 10 -k 100 -t
[Timing]: knnsearch: 7713 [msec]
[Timing]: knnsearch: 1947 [msec]


# Pthreads-sift over acc


+ 30
- 28
homework_1/measurements/over_threads.txt View File

@@ -5,67 +5,69 @@ hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1 -c mtx/mni

# OMP-sift over threads
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/sift-128-euclidean.hdf5 /test -s 1 -k 100 -t
[Timing]: knnsearch: 4469 [msec]
[Timing]: knnsearch: 4374 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/sift-128-euclidean.hdf5 /test -s 2 -k 100 -t
[Timing]: knnsearch: 4283 [msec]
[Timing]: knnsearch: 2194 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/sift-128-euclidean.hdf5 /test -s 4 -k 100 -t
[Timing]: knnsearch: 4096 [msec]
[Timing]: knnsearch: 1148 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/sift-128-euclidean.hdf5 /test -s 6 -k 100 -t
[Timing]: knnsearch: 3822 [msec]
[Timing]: knnsearch: 751 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/sift-128-euclidean.hdf5 /test -s 8 -k 100 -t
[Timing]: knnsearch: 4060 [msec]
[Timing]: knnsearch: 724 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/sift-128-euclidean.hdf5 /test -s 10 -k 100 -t
[Timing]: knnsearch: 4241 [msec]
[Timing]: knnsearch: 637 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/sift-128-euclidean.hdf5 /test -s 12 -k 100 -t
[Timing]: knnsearch: 5193 [msec]
[Timing]: knnsearch: 596 [msec]

# OMP-mnist over threads
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/mnist-784-euclidean.hdf5 /test -s 1 -k 100 -t
[Timing]: knnsearch: 8053 [msec]
[Timing]: knnsearch: 7918 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/mnist-784-euclidean.hdf5 /test -s 2 -k 100 -t
[Timing]: knnsearch: 7806 [msec]
[Timing]: knnsearch: 3941 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/mnist-784-euclidean.hdf5 /test -s 4 -k 100 -t
[Timing]: knnsearch: 7465 [msec]
[Timing]: knnsearch: 2031 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/mnist-784-euclidean.hdf5 /test -s 6 -k 100 -t
[Timing]: knnsearch: 6828 [msec]
[Timing]: knnsearch: 1395 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/mnist-784-euclidean.hdf5 /test -s 8 -k 100 -t
[Timing]: knnsearch: 7662[msec]
[Timing]: knnsearch: 1415 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/mnist-784-euclidean.hdf5 /test -s 10 -k 100 -t
[Timing]: knnsearch: 8013 [msec]
[Timing]: knnsearch: 1330 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_omp -c mtx/mnist-784-euclidean.hdf5 /test -s 12 -k 100 -t
[Timing]: knnsearch: 8123 [msec]
[Timing]: knnsearch: 1292 [msec]


# CILK-sift over threads
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/sift-128-euclidean.hdf5 /test -s 1 -k 100 -t
[Timing]: knnsearch: 4225 [msec]
[Timing]: knnsearch: 4183 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/sift-128-euclidean.hdf5 /test -s 2 -k 100 -t
[Timing]: knnsearch: 4090 [msec]
[Timing]: knnsearch: 2076 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/sift-128-euclidean.hdf5 /test -s 4 -k 100 -t
[Timing]: knnsearch: 3696 [msec]
[Timing]: knnsearch: 1114 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/sift-128-euclidean.hdf5 /test -s 6 -k 100 -t
[Timing]: knnsearch: 3122 [msec]
[Timing]: knnsearch: 886 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/sift-128-euclidean.hdf5 /test -s 8 -k 100 -t
[Timing]: knnsearch: 3860 [msec]
[Timing]: knnsearch: 706 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/sift-128-euclidean.hdf5 /test -s 10 -k 100 -t
[Timing]: knnsearch: 4141 [msec]
[Timing]: knnsearch: 742 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/sift-128-euclidean.hdf5 /test -s 12 -k 100 -t
[Timing]: knnsearch: 5103 [msec]
[Timing]: knnsearch: 636 [msec]

# CILK-mnist over threads
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/mnist-784-euclidean.hdf5 /test -s 1 -k 100 -t
[Timing]: knnsearch: 7744 [msec]
[Timing]: knnsearch: 7745 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/mnist-784-euclidean.hdf5 /test -s 2 -k 100 -t
[Timing]: knnsearch: 7206 [msec]
[Timing]: knnsearch: 3883 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/mnist-784-euclidean.hdf5 /test -s 4 -k 100 -t
[Timing]: knnsearch: 6965 [msec]
[Timing]: knnsearch: 2020 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/mnist-784-euclidean.hdf5 /test -s 6 -k 100 -t
[Timing]: knnsearch: 6628 [msec]
[Timing]: knnsearch: 1454 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/mnist-784-euclidean.hdf5 /test -s 8 -k 100 -t
[Timing]: knnsearch: 7362 [msec]
[Timing]: knnsearch: 1436 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/mnist-784-euclidean.hdf5 /test -s 10 -k 100 -t
[Timing]: knnsearch: 7813 [msec]
[Timing]: knnsearch: 1342 [msec]
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_cilk -c mtx/mnist-784-euclidean.hdf5 /test -s 12 -k 100 -t
[Timing]: knnsearch: 158123[msec]
[Timing]: knnsearch: 1292 [msec]


# Pthreads-sift over threads
hoo2@shirka:~/Work/AUTH/PDS/homework_1$ eval $DOCK ./out/knnsearch_v1_pth -c mtx/sift-128-euclidean.hdf5 /test -s 1 -k 100 -t


BIN
homework_1/report/homework_1_report.pdf View File


+ 46
- 16
homework_1/report/homework_1_report.tex View File

@@ -67,8 +67,8 @@
Στην παρούσα εργασία γίνεται ευρεία χρήση πινάκων τόσο για εισαγωγή και εξαγωγή των δεδομένων, όσο και για τους υπολογισμούς.
Για το λόγο αυτό θεωρήσαμε ότι έπρεπε πρώτα να υλοποιήσουμε κάποιες αφαιρέσεις που θα μας επέτρεπαν να χειριστούμε ευκολότερα το πρόβλημα

\subsection{Ο τύπος Matrix}
Η πιο βασική αφαίρεση που υλοποιήσαμε είναι ο τύπος \textbf{Matrix}.
\subsection{Ο τύπος Matrix<>}
Η πιο βασική αφαίρεση που υλοποιήσαμε είναι ο τύπος \textbf{Matrix<>}.
Πρόκειται για μια αναπαράσταση πινάκων, είτε μονοδιάστατων είτε δισδιάστατων.
Η υλοποίησή του έγινε με χρήση templates και έτσι μπορούμε να κατασκευάζουμε πίνακες οποιουδήποτε τύπου.
Η αφαίρεση εσωτερικά κάνει χρίση μονοδιάστατης αποθήκευσης των δεδομένων με αποτέλεσμα να έχουμε την δυνατότητα να διαλέγουμε εμείς το ordering του πίνακα.
@@ -125,7 +125,7 @@ o \textbf{vA}, είναι ένα \textit{slice} του A, που δείχνει
Το κάθε Corpus με τα δύο διαφορετικά Queries και το κάθε Query αντίστοιχα.
Έπειτα συνενώναμε τα αποτελέσματα.
Αν και αυτή η προσέγγιση ήταν η ακριβείς μας έδινε όμως τη δυνατότητα να “φτηνύνουμε” τον τρόπο με τον οποίο ενώναμε τα αποτελέσματα.
Επίσης για την περίπτωση που το Queryήταν ίδιο με το Corpus, μας προσφέρεται η δυνατότητα να αποφύγουμε έναν από τους 4 συνδυασμούς.
Επίσης για την περίπτωση που το Query ήταν ίδιο με το Corpus, μας προσφέρεται η δυνατότητα να αποφύγουμε έναν από τους 4 συνδυασμούς.
\par
Η προσέγγιση αυτή, αν και απλή, δεν βολεύει για παραλληλοποίηση, καθώς τα νήματα που πρέπει να δημιουργηθούν βρίσκονται μέσα στην αναδρομή, καθιστώντας δύσχρηστη(όχι αδύνατη) τη χρήση των εργαλείων της cilk και της openMP.
Ακόμα και το “μέρος” στο οποίο θα έμπαινε η loop-α με τις join για την περίπτωση των pthreads ήταν περίπλοκο.
@@ -139,12 +139,35 @@ o \textbf{vA}, είναι ένα \textit{slice} του A, που δείχνει
Γίνεται δηλαδή πάλι χρήση της quick-select.
Για να μειώσουμε την ακρίβεια και εδώ μπορούμε να “φτωχύνουμε” το merge.
Για το σκοπό αυτό έχουμε ένα όρισμα στη συνάρτηση το οποίο μας κόβει τον αριθμό των κοντινότερων γειτόνων.
Σε αυτή την προσέγγιση υπάρχει ακόμα ένα ουσιαστικότερο όφελος.
Ο χωρισμός σε slices μας δίνει την δυνατότητα να δημιουργήσουμε threads που δεν θα χρειαστεί ποτέ να χρειαστούν κομμάτια μνήμης από άλλα threads.
Αυτό ο διαχωρισμός γίνεται στον έξω βρόχο επανάληψης της knnsearch
\begin{verbatim}
#pragma omp parallel for
for (size_t qi = 0; qi < num_slices; ++qi)
worker_body (corpus_slices, query_slices, idx, dst, qi,
num_slices, corpus_slice_size, query_slice_size, k, m);
\end{verbatim}
Για τα το παραπάνω snippet (που είναι και “καρδιά” του αλγόριθμου), ο κάθε worker δουλεύει σε δικό του corpus και query slice και αποθηκεύει τα δεδομένα σε δικό του slice πίσω στους idx και dst.
Με αυτό τον τρόπο δεν χρειαζόμαστε κανέναν συγχρονισμό για τα threads.

\subsection{knnsearch version 1}
\subsection{Μετρήσεις}

Για την παραγωγή των εκτελέσιμων χρησιμοποιήσαμε το προσωπικό μας(μου) laptop.
Στον κατάλογο με τον πηγαίο κώδικα υπάρχει ότι είναι απαραίτητο για την μεταγλώττιση και εκτέλεση του κώδικα.
Για τη μεταγλώττιση κάναμε χρήση του image hpcimage που βρίσκεται \href{https://hub.docker.com/r/hoo2/hpcimage}{εδώ}.
Για την μεταγλώττιση και εκτέλεση μπορεί κάποιος να δώσει τις παρακάτω εντολές στο root κατάλογο “homework\_1”.
\begin{verbatim}
DOCK="docker run --rm -v <PATH_to_homework_1>:/usr/src/PDS_homework_1 \
-w /usr/src/PDS_homework_1/ hoo2/hpcimage"
make -j IMAGE=hoo2/hpcimage v0
make -j IMAGE=hoo2/hpcimage v1
make -j IMAGE=hoo2/hpcimage v1_cilk
make -j IMAGE=hoo2/hpcimage v1_omp
make -j IMAGE=hoo2/hpcimage v1_pth
# run pthreads version with 4 slices
eval $DOCK ./out/knnsearch_v1_pth -c <path to hdf5> /test -k 100 -s 4 -t
\end{verbatim}

\section{Αποτελέσματα}

@@ -156,47 +179,54 @@ o \textbf{vA}, είναι ένα \textit{slice} του A, που δείχνει
\item Εκτελέσαμε την κάθε έκδοση του προγράμματος για δύο διαφορετικούς πίνακες(all-to-all) για \textbf{διαφορετική επιθυμητή ακρίβεια}.
\end{itemize}

Για αντιπαραβολή παραθέτουμε ότι ότι στο ίδιο μηχάνημα το οποίο πήραμε τις μετρήσεις η knnsearch έκδοση του matlab κάνει:
Για αντιπαραβολή παραθέτουμε ότι ότι στο ίδιο μηχάνημα το οποίο πήραμε τις μετρήσεις η knnsearch έκδοση του \textbf{matlab} κάνει:
\begin{itemize}
\item sift: \textbf{3.223628 [sec]}
\item mnist: \textbf{20.634987 [sec]}
\end{itemize}

Για την έκδοση με την openMP έχουμε:
{
\centering
\subsection{Επίδραση των threads - OpenMP}
Για την έκδοση με την openMP, χρησιμοποιώντας διαφορετικό αριθμό threads έχουμε: \\
\includegraphics[width=\textwidth]{../measurements/OMP_over_threads.png}
\captionof{figure}{Βελτιστοποίηση από την παραλληλοποίηση [openMP].}
\label{fig:openMP_th}

\subsection{Επίδραση των threads - openCilk}

Για την έκδοση με την Cilk έχουμε:
Για την έκδοση με την Cilk έχουμε: \\
\includegraphics[width=\textwidth]{../measurements/CILK_over_threads.png}
\captionof{figure}{Βελτιστοποίηση από την παραλληλοποίηση [open-cilk].}
\label{fig:cilk_th}

Για την έκδοση με τα pthreads έχουμε:
\subsection{Επίδραση των threads - pthreads}

Για την έκδοση με τα pthreads έχουμε: \\
\includegraphics[width=\textwidth]{../measurements/Pthreads_over_threads.png}
\captionof{figure}{Βελτιστοποίηση από την παραλληλοποίηση [pthreads].}
\label{fig:pthreads_th}

\subsection{Επίδραση της ακρίβειας - OpenMP}

Για την έκδοση με την openMP όσο αλλάζουμε την ακρίβεια έχουμε:
Για την έκδοση με την openMP όσο αλλάζουμε την ακρίβεια έχουμε: \\
\includegraphics[width=\textwidth]{../measurements/OMP_over_accuracy.png}
\captionof{figure}{Βελτιστοποίηση λόγο μειωμένης ακρίβειας [openMP].}
\label{fig:openMP_acc}

\subsection{Επίδραση της ακρίβειας - openCilk}

Για την έκδοση με την Cilk όσο αλλάζουμε την ακρίβεια έχουμε:
Για την έκδοση με την Cilk όσο αλλάζουμε την ακρίβεια έχουμε: \\
\includegraphics[width=\textwidth]{../measurements/CILK_over_accuracy.png}
\captionof{figure}{Βελτιστοποίηση λόγο μειωμένης ακρίβειας [open-cilk].}
\label{fig:cilk_acc}

Για την έκδοση με τα pthreads όσο αλλάζουμε την ακρίβεια έχουμε:
\subsection{Επίδραση της ακρίβειας - pthreads}

Για την έκδοση με τα pthreads όσο αλλάζουμε την ακρίβεια έχουμε: \\
\includegraphics[width=\textwidth]{../measurements/Pthreads_over_accuracy.png}
\captionof{figure}{Βελτιστοποίηση λόγο μειωμένης ακρίβειας [pthreads].}
\label{fig:pthreads_acc}
}

\section{Συμπεράσματα}

@@ -205,8 +235,8 @@ o \textbf{vA}, είναι ένα \textit{slice} του A, που δείχνει
Απ' ότι βλέπουμε παραπάνω, ενώ ο χρόνος βελτιώνεται καθώς χρησιμοποιούμε παραπάνω threads, αυτό δεν συμβαίνει όταν μειώνουμε την ακρίβεια.
Τουλάχιστον όχι όσο θα θέλαμε.
Φυσικά αυτό έχει να κάνει με την υλοποίηση μας, καθώς δεν επιλέξαμε καλή τεχνική συνένωσης.
Ακόμα φαίνεται ότι ενώ η μέθοδος με τα pthreads αποδίδει καλά, αυτό δεν συμβαίνει και με την cilk και την openmp.
Αυτό γιατί στην παρούσα υλοποίηση δεν γίνεται σωστή διαχείριση των threads.
Στην υλοποίησή μας δεν έγινε πολύ επιθετική στρατηγική μείωσης της ακρίβειας των αποτελεσμάτων.
Να πούμε επίσης ότι ο συγκεκριμένος αλγόριθμος, λόγο της ουσιαστικά “μη” επικοινωνίας που χρειάζονται τα threads, θα μπορούσε να χρησιμοποιηθεί και σε απομακρυσμένα συστήματα κάνοντας χρήση του MPI.


\end{document}

+ 0
- 27
homework_1/run_measurements.sh View File

@@ -1,27 +0,0 @@
#!/usr/bin/env bash

#
# Take measurements
#

DOCK="docker run --rm -v /home/hoo2/Work/AUTH/PDS/homework_1:/usr/src/PDS_homework_1 -w /usr/src/PDS_homework_1/ hoo2/hpcimage"

echo " "
echo "Serial"

echo "./out/knnsearch_v1 -c mtx/sift-128-euclidean.hdf5 /test -s 1 -k 100 -t"
eval $DOCK ./out/knnsearch_v1 -c mtx/sift-128-euclidean.hdf5 /test -s 10 -k 100 -t
echo "./out/knnsearch_v1 -c mtx/mnist-784-euclidean.hdf5 /test -s 1 -k 100 -t"
eval $DOCK ./out/knnsearch_v1 -c mtx/mnist-784-euclidean.hdf5 /test -s 10 -k 100 -t

echo " "
echo "OMP"

# echo ./out/knnsearch_v1 -c mtx/sift-128-euclidean.hdf5 /test -s 1 -k 100 -t
#eval $DOCK ./out/knnsearch_v1_omp -c mtx/sift-128-euclidean.hdf5 /test -s 10 -k 100 -t
# echo ./out/knnsearch_v1 -c mtx/mnist-784-euclidean.hdf5 /test -s 1 -k 100 -t
#eval $DOCK ./out/knnsearch_v1_omp -c mtx/mnist-784-euclidean.hdf5 /test -s 10 -k 100 -t
# echo ./out/knnsearch_v1 -c mtx/sift-128-euclidean.hdf5 /test -s 1 -k 100 -t
#eval $DOCK ./out/knnsearch_v1_omp -c mtx/sift-128-euclidean.hdf5 /test -s 10 -k 100 -t
# echo ./out/knnsearch_v1 -c mtx/mnist-784-euclidean.hdf5 /test -s 1 -k 100 -t
#eval $DOCK ./out/knnsearch_v1_omp -c mtx/mnist-784-euclidean.hdf5 /test -s 10 -k 100 -t

Loading…
Cancel
Save