diff --git a/lab07/aaron/e2/upload/dbscan_parallel.cpp b/lab07/aaron/e2/upload/dbscan_parallel.cpp index 7f9994a..5ed7cc2 100644 --- a/lab07/aaron/e2/upload/dbscan_parallel.cpp +++ b/lab07/aaron/e2/upload/dbscan_parallel.cpp @@ -2,17 +2,18 @@ #include #include #include +#include namespace HPC { DBSCAN::DBSCAN(int minPts, double eps) : minPoints_(minPts), epsilon_(eps) {} -void DBSCAN::run(const std::vector &points) { +void DBSCAN::run(const std::vector &points, int threadNum) { dataset_ = points; const int n = dataset_.size(); - initializeNeighbors(); + initializeNeighbors(threadNum); int clusterIndex = 0; for (int i = 0; i < n; ++i) { @@ -52,8 +53,8 @@ bool DBSCAN::expandCluster(Point &p, std::set &neighbours, int clusterID) { return true; } -void DBSCAN::initializeNeighbors() { -#pragma omp parallel for +void DBSCAN::initializeNeighbors(int threadNum) { +#pragma omp parallel for num_threads(threadNum) for (int i = 0; i < dataset_.size(); ++i) { Point &pointToCheckNeighborsFor = dataset_[i]; for (int j = 0; j < dataset_.size(); ++j) { diff --git a/lab07/aaron/e2/upload/dbscan_parallel.h b/lab07/aaron/e2/upload/dbscan_parallel.h index e13064d..6792cb5 100644 --- a/lab07/aaron/e2/upload/dbscan_parallel.h +++ b/lab07/aaron/e2/upload/dbscan_parallel.h @@ -12,13 +12,13 @@ class DBSCAN { public: DBSCAN(int minPts, double eps); - void run(const std::vector &points); + void run(const std::vector &points, int threadNum); const std::vector &getPoints() const { return dataset_; } private: std::set regionQuery(const Point &point) const; - void initializeNeighbors(); + void initializeNeighbors(int threadNum); bool expandCluster(Point &point, std::set &neighbours, int clusterID); // void merge(std::vector& n, const std::vector& nPrime) const; diff --git a/lab07/aaron/e2/upload/run.cpp b/lab07/aaron/e2/upload/run.cpp index 946eeaf..9441691 100644 --- a/lab07/aaron/e2/upload/run.cpp +++ b/lab07/aaron/e2/upload/run.cpp @@ -10,23 +10,25 @@ int main() { std::vector points = readPointsFromFile("data"); - // Zeitmessung starten - auto start = std::chrono::high_resolution_clock::now(); + - DBSCAN ds(5, 0.01); - ds.run(points); + for (int i = 1; i < 13; i++) { + DBSCAN ds(5, 0.01); + // Zeitmessung starten + auto start = std::chrono::high_resolution_clock::now(); + + ds.run(points, i); - // Zeitmessung beenden - auto end = std::chrono::high_resolution_clock::now(); + // Zeitmessung beenden + auto end = std::chrono::high_resolution_clock::now(); - // Dauer berechnen in Millisekunden - auto duration = std::chrono::duration_cast(end - start).count(); - - std::cout << "Laufzeit: " << duration << " ms" << std::endl; - - - writePointsToFile(ds.getPoints(), "clustered"); + // Dauer berechnen in Millisekunden + auto duration = std::chrono::duration_cast(end - start).count(); + std::cout << "Laufzeit: " << duration << " ms" << std::endl; + writePointsToFile(ds.getPoints(), "clustered"); + } + return 0; } diff --git a/lab07/results/dbscna_results.csv b/lab07/results/dbscna_results.csv new file mode 100644 index 0000000..2e49c85 --- /dev/null +++ b/lab07/results/dbscna_results.csv @@ -0,0 +1 @@ +6807,4929,3753,3380,3148,2864,2796,2655,2702,2494,2482,2414