diff --git a/main.cpp b/main.cpp index c274193..5f18860 100644 --- a/main.cpp +++ b/main.cpp @@ -208,7 +208,7 @@ int main(int argc, char *argv[]) { vector> neig = {make_pair(-1, 1), make_pair(-1, 0), make_pair(-1, -1), make_pair(0, 1), make_pair(0, -1), make_pair(1, 1), - make_pair(1, 0), make_pair(1, -1)}; + make_pair(1, 0), make_pair(1, -1)}; ofstream csvfile; csvfile.open("performance.csv"); diff --git a/stencil.hpp b/stencil.hpp index 56033da..7d4edae 100644 --- a/stencil.hpp +++ b/stencil.hpp @@ -35,7 +35,7 @@ template class Stencil : public ff::ff_Map> { std::vector *> *> *OutputVector); private: - Task *svc_helper(Task *t); + Task *svc_helper(Task *t, int iterations); void constructor_helper(std::vector> neighborhood); std::function)> Convolution; @@ -100,7 +100,7 @@ void Stencil::constructor_helper( // svc function for fastflow library template Task *Stencil::svc(Task *task) { - task = svc_helper(task); + task = svc_helper(task, this->Iterations); ff::ff_node::ff_send_out(task); return this->GO_ON; } @@ -112,9 +112,15 @@ Stencil::operator()(std::vector> *matrix, int iterations) { if ((*matrix).size() == 0 || (*matrix)[0].size() == 0) { return matrix; } - Task *task = new Task(matrix, (*matrix).size(), (*matrix)[0].size()); - task = svc_helper(task); - return task->VectorData; + std::vector> * arena = new std::vector>(); + *arena = *matrix; + + Task *task = new Task(arena, (*arena).size(), (*arena)[0].size()); + task = svc_helper(task, iterations); + + *matrix = *task->VectorData; + delete task; + return matrix; } // function for std thread @@ -243,8 +249,8 @@ void Stencil::sequential( } } -template Task *Stencil::svc_helper(Task *task) { - int niter = Iterations; +template Task *Stencil::svc_helper(Task *task, int iterations) { + int niter = iterations; std::vector> *arena = new std::vector>(0); *arena = *(task->VectorData);