Refresh the report and better commenting
@ -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);
|
||||
@ -201,11 +201,9 @@ 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);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
@ -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 = [
|
||||
|
@ -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 = [
|
||||
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 99 KiB |
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 105 KiB |
@ -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
|
||||
|
@ -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
|
||||
|
@ -67,8 +67,8 @@
|
||||
Στην παρούσα εργασία γίνεται ευρεία χρήση πινάκων τόσο για εισαγωγή και εξαγωγή των δεδομένων, όσο και για τους υπολογισμούς.
|
||||
Για το λόγο αυτό θεωρήσαμε ότι έπρεπε πρώτα να υλοποιήσουμε κάποιες αφαιρέσεις που θα μας επέτρεπαν να χειριστούμε ευκολότερα το πρόβλημα
|
||||
|
||||
\subsection{Ο τύπος Matrix}
|
||||
Η πιο βασική αφαίρεση που υλοποιήσαμε είναι ο τύπος \textbf{Matrix}.
|
||||
\subsection{Ο τύπος Matrix<>}
|
||||
Η πιο βασική αφαίρεση που υλοποιήσαμε είναι ο τύπος \textbf{Matrix<>}.
|
||||
Πρόκειται για μια αναπαράσταση πινάκων, είτε μονοδιάστατων είτε δισδιάστατων.
|
||||
Η υλοποίησή του έγινε με χρήση templates και έτσι μπορούμε να κατασκευάζουμε πίνακες οποιουδήποτε τύπου.
|
||||
Η αφαίρεση εσωτερικά κάνει χρίση μονοδιάστατης αποθήκευσης των δεδομένων με αποτέλεσμα να έχουμε την δυνατότητα να διαλέγουμε εμείς το ordering του πίνακα.
|
||||
@ -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}
|
||||
|
@ -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
|