Commit 333cfee2 authored by Sylvain Thery's avatar Sylvain Thery

remove CGoGN thread & current_thread parameter everywhere

parent e1d6adb5
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
#include "Algo/Modelisation/polyhedron.h" #include "Algo/Modelisation/polyhedron.h"
#include "Algo/Parallel/parallel_foreach.h" #include "Algo/Parallel/parallel_foreach.h"
#include "Algo/Parallel/cgogn_thread.h"
#include "Utils/cgognStream.h" #include "Utils/cgognStream.h"
#include "Utils/chrono.h" #include "Utils/chrono.h"
...@@ -63,28 +63,6 @@ VertexAttribute<PFP::VEC3> normal; ...@@ -63,28 +63,6 @@ VertexAttribute<PFP::VEC3> normal;
template <typename XXX>
class ThreadNormals: public Algo::Parallel::CGoGNThread<typename XXX::MAP>
{
protected:
VertexAttribute<typename XXX::VEC3>& m_positions;
VertexAttribute<typename XXX::VEC3>& m_normals;
public:
ThreadNormals(typename XXX::MAP& map, VertexAttribute<typename XXX::VEC3>& pos, VertexAttribute<typename XXX::VEC3>& norm, unsigned int th):
Algo::Parallel::CGoGNThread<typename XXX::MAP>(map,th),
m_positions(pos),
m_normals(norm)
{}
void operator()()
{
Algo::Geometry::computeNormalVertices<XXX>(this->m_map, m_positions, m_normals, SelectorTrue(), this->tid());
}
};
void MyQT::cb_initGL() void MyQT::cb_initGL()
{ {
Utils::GLSLShader::setCurrentOGLVersion(2); Utils::GLSLShader::setCurrentOGLVersion(2);
...@@ -109,9 +87,7 @@ void MyQT::cb_initGL() ...@@ -109,9 +87,7 @@ void MyQT::cb_initGL()
m_lines->setScale(2.0f); m_lines->setScale(2.0f);
m_lines->setColor(Geom::Vec4f(0.0f, 1.0f, 0.2f, 0.0f)); m_lines->setColor(Geom::Vec4f(0.0f, 1.0f, 0.2f, 0.0f));
CGoGNout << "Je calcule les normales en meme temps que les primitives" << CGoGNendl; Algo::Geometry::computeNormalVertices<PFP>(myMap, position, normal) ;
boost::thread thread1( ThreadNormals<PFP>(myMap,position,normal,1));
m_render->initPrimitives<PFP>(myMap, allDarts, Algo::Render::GL2::LINES); m_render->initPrimitives<PFP>(myMap, allDarts, Algo::Render::GL2::LINES);
m_render->initPrimitives<PFP>(myMap, allDarts, Algo::Render::GL2::POINTS); m_render->initPrimitives<PFP>(myMap, allDarts, Algo::Render::GL2::POINTS);
...@@ -119,8 +95,6 @@ void MyQT::cb_initGL() ...@@ -119,8 +95,6 @@ void MyQT::cb_initGL()
registerShader(m_shader); registerShader(m_shader);
registerShader(m_lines); registerShader(m_lines);
// on attend la fin du thread pour etre sur que normal est a jour
thread1.join();
m_normalVBO->updateData(normal); m_normalVBO->updateData(normal);
} }
......
...@@ -178,10 +178,10 @@ public: ...@@ -178,10 +178,10 @@ public:
}; };
template <typename PFP> template <typename PFP>
void computeAreaFaces(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, FaceAttribute<typename PFP::REAL>& area, const FunctorSelect& select, unsigned int nbth, unsigned int current_thread) void computeAreaFaces(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, FaceAttribute<typename PFP::REAL>& area, const FunctorSelect& select, unsigned int nbth)
{ {
FunctorConvexFaceArea<PFP> funct(map,position,area); FunctorConvexFaceArea<PFP> funct(map,position,area);
Algo::Parallel::foreach_cell<typename PFP::MAP,FACE>(map, funct, nbth, false, select, current_thread); Algo::Parallel::foreach_cell<typename PFP::MAP,FACE>(map, funct, nbth, false, select);
} }
...@@ -202,10 +202,10 @@ public: ...@@ -202,10 +202,10 @@ public:
}; };
template <typename PFP> template <typename PFP>
void computeOneRingAreaVertices(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, VertexAttribute<typename PFP::REAL>& area, const FunctorSelect& select, unsigned int nbth, unsigned int current_thread) void computeOneRingAreaVertices(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, VertexAttribute<typename PFP::REAL>& area, const FunctorSelect& select, unsigned int nbth)
{ {
FunctorConvexFaceArea<PFP> funct(map,position,area); FunctorConvexFaceArea<PFP> funct(map,position,area);
Algo::Parallel::foreach_cell<typename PFP::MAP,VERTEX>(map, funct, nbth, false, select, current_thread); Algo::Parallel::foreach_cell<typename PFP::MAP,VERTEX>(map, funct, nbth, false, select);
} }
...@@ -227,10 +227,10 @@ public: ...@@ -227,10 +227,10 @@ public:
}; };
template <typename PFP> template <typename PFP>
void computeVoronoiAreaVertices(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, VertexAttribute<typename PFP::REAL>& area, const FunctorSelect& select, unsigned int nbth, unsigned int current_thread) void computeVoronoiAreaVertices(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, VertexAttribute<typename PFP::REAL>& area, const FunctorSelect& select, unsigned int nbth)
{ {
FunctorConvexFaceArea<PFP> funct(map,position,area); FunctorConvexFaceArea<PFP> funct(map,position,area);
Algo::Parallel::foreach_cell<typename PFP::MAP,VERTEX>(map, funct, nbth, false, select, current_thread); Algo::Parallel::foreach_cell<typename PFP::MAP,VERTEX>(map, funct, nbth, false, select);
} }
......
...@@ -136,17 +136,17 @@ namespace Parallel ...@@ -136,17 +136,17 @@ namespace Parallel
template <typename PFP> template <typename PFP>
void computeCentroidVolumes(typename PFP::MAP& map, void computeCentroidVolumes(typename PFP::MAP& map,
const VertexAttribute<typename PFP::VEC3>& position, VolumeAttribute<typename PFP::VEC3>& vol_centroid, const VertexAttribute<typename PFP::VEC3>& position, VolumeAttribute<typename PFP::VEC3>& vol_centroid,
const FunctorSelect& select = allDarts, unsigned int nbth = 0, unsigned int current_thread = 0) ; const FunctorSelect& select = allDarts, unsigned int nbth = 0) ;
template <typename PFP> template <typename PFP>
void computeCentroidFaces(typename PFP::MAP& map, void computeCentroidFaces(typename PFP::MAP& map,
const VertexAttribute<typename PFP::VEC3>& position, FaceAttribute<typename PFP::VEC3>& face_centroid, const VertexAttribute<typename PFP::VEC3>& position, FaceAttribute<typename PFP::VEC3>& face_centroid,
const FunctorSelect& select = allDarts, unsigned int nbth = 0, unsigned int current_thread = 0) ; const FunctorSelect& select = allDarts, unsigned int nbth = 0) ;
template <typename PFP> template <typename PFP>
void computeNeighborhoodCentroidVertices(typename PFP::MAP& map, void computeNeighborhoodCentroidVertices(typename PFP::MAP& map,
const VertexAttribute<typename PFP::VEC3>& position, VertexAttribute<typename PFP::VEC3>& vertex_centroid, const VertexAttribute<typename PFP::VEC3>& position, VertexAttribute<typename PFP::VEC3>& vertex_centroid,
const FunctorSelect& select = allDarts, unsigned int nbth = 0, unsigned int current_thread = 0) ; const FunctorSelect& select = allDarts, unsigned int nbth = 0) ;
} }
} // namespace Geometry } // namespace Geometry
......
...@@ -134,10 +134,10 @@ public: ...@@ -134,10 +134,10 @@ public:
template <typename PFP> template <typename PFP>
void computeCentroidVolumes(typename PFP::MAP& map, void computeCentroidVolumes(typename PFP::MAP& map,
const VertexAttribute<typename PFP::VEC3>& position, VolumeAttribute<typename PFP::VEC3>& vol_centroid, const VertexAttribute<typename PFP::VEC3>& position, VolumeAttribute<typename PFP::VEC3>& vol_centroid,
const FunctorSelect& select, unsigned int nbth, unsigned int current_thread) const FunctorSelect& select, unsigned int nbth)
{ {
FunctorComputeCentroidVolumes<PFP> funct(map,position,vol_centroid); FunctorComputeCentroidVolumes<PFP> funct(map,position,vol_centroid);
Algo::Parallel::foreach_cell<typename PFP::MAP,VOLUME>(map, funct, nbth, true, select, current_thread); Algo::Parallel::foreach_cell<typename PFP::MAP,VOLUME>(map, funct, nbth, true, select);
} }
......
...@@ -133,7 +133,7 @@ void computeCurvatureVertices_NormalCycles( ...@@ -133,7 +133,7 @@ void computeCurvatureVertices_NormalCycles(
VertexAttribute<typename PFP::VEC3>& Kmax, VertexAttribute<typename PFP::VEC3>& Kmax,
VertexAttribute<typename PFP::VEC3>& Kmin, VertexAttribute<typename PFP::VEC3>& Kmin,
VertexAttribute<typename PFP::VEC3>& Knormal, VertexAttribute<typename PFP::VEC3>& Knormal,
const FunctorSelect& select = allDarts, unsigned int nbth = 0, unsigned int current_thread=0) ; const FunctorSelect& select = allDarts, unsigned int nbth = 0) ;
template <typename PFP> template <typename PFP>
void computeCurvatureVertices_QuadraticFitting( void computeCurvatureVertices_QuadraticFitting(
...@@ -144,7 +144,7 @@ void computeCurvatureVertices_QuadraticFitting( ...@@ -144,7 +144,7 @@ void computeCurvatureVertices_QuadraticFitting(
VertexAttribute<typename PFP::REAL>& kmin, VertexAttribute<typename PFP::REAL>& kmin,
VertexAttribute<typename PFP::VEC3>& Kmax, VertexAttribute<typename PFP::VEC3>& Kmax,
VertexAttribute<typename PFP::VEC3>& Kmin, VertexAttribute<typename PFP::VEC3>& Kmin,
const FunctorSelect& select = allDarts, unsigned int nbth=0, unsigned int current_thread=0); const FunctorSelect& select = allDarts, unsigned int nbth=0);
} // namespace Parallel } // namespace Parallel
......
...@@ -436,7 +436,7 @@ void computeCurvatureVertices_NormalCycles( ...@@ -436,7 +436,7 @@ void computeCurvatureVertices_NormalCycles(
VertexAttribute<typename PFP::VEC3>& Kmax, VertexAttribute<typename PFP::VEC3>& Kmax,
VertexAttribute<typename PFP::VEC3>& Kmin, VertexAttribute<typename PFP::VEC3>& Kmin,
VertexAttribute<typename PFP::VEC3>& Knormal, VertexAttribute<typename PFP::VEC3>& Knormal,
const FunctorSelect& select, unsigned int nbth, unsigned int current_thread) const FunctorSelect& select, unsigned int nbth)
{ {
// WAHOO BIG PROBLEM WITH LAZZY EMBEDDING !!! // WAHOO BIG PROBLEM WITH LAZZY EMBEDDING !!!
if (!map. template isOrbitEmbedded<VERTEX>()) if (!map. template isOrbitEmbedded<VERTEX>())
...@@ -456,7 +456,7 @@ void computeCurvatureVertices_NormalCycles( ...@@ -456,7 +456,7 @@ void computeCurvatureVertices_NormalCycles(
} }
FunctorComputeCurvatureVertices_NormalCycles<PFP> funct(map, radius, position, normal, edgeangle, kmax, kmin, Kmax, Kmin, Knormal); FunctorComputeCurvatureVertices_NormalCycles<PFP> funct(map, radius, position, normal, edgeangle, kmax, kmin, Kmax, Kmin, Knormal);
Algo::Parallel::foreach_cell<typename PFP::MAP,VERTEX>(map, funct, nbth, true, select, current_thread); Algo::Parallel::foreach_cell<typename PFP::MAP,VERTEX>(map, funct, nbth, true, select);
} }
...@@ -503,10 +503,10 @@ void computeCurvatureVertices_QuadraticFitting( ...@@ -503,10 +503,10 @@ void computeCurvatureVertices_QuadraticFitting(
VertexAttribute<typename PFP::REAL>& kmin, VertexAttribute<typename PFP::REAL>& kmin,
VertexAttribute<typename PFP::VEC3>& Kmax, VertexAttribute<typename PFP::VEC3>& Kmax,
VertexAttribute<typename PFP::VEC3>& Kmin, VertexAttribute<typename PFP::VEC3>& Kmin,
const FunctorSelect& select, unsigned int nbth, unsigned int current_thread) const FunctorSelect& select, unsigned int nbth)
{ {
FunctorComputeCurvatureVertices_QuadraticFitting<PFP> funct(map, position, normal, kmax, kmin, Kmax, Kmin); FunctorComputeCurvatureVertices_QuadraticFitting<PFP> funct(map, position, normal, kmax, kmin, Kmax, Kmin);
Algo::Parallel::foreach_cell<typename PFP::MAP,VERTEX>(map, funct, nbth, true, select, current_thread); Algo::Parallel::foreach_cell<typename PFP::MAP,VERTEX>(map, funct, nbth, true, select);
} }
} // namespace Parallel } // namespace Parallel
......
...@@ -71,11 +71,11 @@ void computeNormalVertices(typename PFP::MAP& map, const VertexAttribute<typenam ...@@ -71,11 +71,11 @@ void computeNormalVertices(typename PFP::MAP& map, const VertexAttribute<typenam
namespace Parallel namespace Parallel
{ {
template <typename PFP> template <typename PFP>
void computeNormalVertices(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, VertexAttribute<typename PFP::VEC3>& normal, const FunctorSelect& select = allDarts, unsigned int nbth = 0, unsigned int current_thread = 0) ; void computeNormalVertices(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, VertexAttribute<typename PFP::VEC3>& normal, const FunctorSelect& select = allDarts, unsigned int nbth = 0) ;
template <typename PFP> template <typename PFP>
void computeNormalFaces(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, FaceAttribute<typename PFP::VEC3>& face_normal, const FunctorSelect& select = allDarts, unsigned int nbth = 0, unsigned int thread = 0) ; void computeNormalFaces(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, FaceAttribute<typename PFP::VEC3>& face_normal, const FunctorSelect& select = allDarts, unsigned int nbth = 0) ;
} }
......
...@@ -187,10 +187,10 @@ public: ...@@ -187,10 +187,10 @@ public:
}; };
template <typename PFP> template <typename PFP>
void computeNormalVertices(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, VertexAttribute<typename PFP::VEC3>& normal, const FunctorSelect& select, unsigned int nbth, unsigned int current_thread) void computeNormalVertices(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, VertexAttribute<typename PFP::VEC3>& normal, const FunctorSelect& select, unsigned int nbth)
{ {
FunctorComputeNormalVertices<PFP> funct(map,position,normal); FunctorComputeNormalVertices<PFP> funct(map,position,normal);
Algo::Parallel::foreach_cell<typename PFP::MAP,VERTEX>(map, funct, nbth, false, select, current_thread); Algo::Parallel::foreach_cell<typename PFP::MAP,VERTEX>(map, funct, nbth, false, select);
} }
...@@ -211,10 +211,10 @@ public: ...@@ -211,10 +211,10 @@ public:
}; };
template <typename PFP> template <typename PFP>
void computeNormalFaces(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, FaceAttribute<typename PFP::VEC3>& normal, const FunctorSelect& select, unsigned int nbth, unsigned int current_thread) void computeNormalFaces(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, FaceAttribute<typename PFP::VEC3>& normal, const FunctorSelect& select, unsigned int nbth)
{ {
FunctorComputeNormalFaces<PFP> funct(map,position,normal); FunctorComputeNormalFaces<PFP> funct(map,position,normal);
Algo::Parallel::foreach_cell<typename PFP::MAP,FACE>(map, funct, nbth, false, select, current_thread); Algo::Parallel::foreach_cell<typename PFP::MAP,FACE>(map, funct, nbth, false, select);
} }
...@@ -236,10 +236,10 @@ public: ...@@ -236,10 +236,10 @@ public:
template <typename PFP> template <typename PFP>
void computeAnglesBetweenNormalsOnEdges(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, EdgeAttribute<typename PFP::REAL>& angles, const FunctorSelect& select, unsigned int nbth, unsigned int current_thread) void computeAnglesBetweenNormalsOnEdges(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, EdgeAttribute<typename PFP::REAL>& angles, const FunctorSelect& select, unsigned int nbth)
{ {
FunctorComputeAngleBetweenNormalsOnEdge<PFP> funct(map,position,angles); FunctorComputeAngleBetweenNormalsOnEdge<PFP> funct(map,position,angles);
Algo::Parallel::foreach_cell<typename PFP::MAP,EDGE>(map, funct, nbth, false, select, current_thread); Algo::Parallel::foreach_cell<typename PFP::MAP,EDGE>(map, funct, nbth, false, select);
} }
} // endnamespace Parallel } // endnamespace Parallel
......
...@@ -52,7 +52,7 @@ typename PFP::REAL totalVolume(typename PFP::MAP& map, const VertexAttribute<typ ...@@ -52,7 +52,7 @@ typename PFP::REAL totalVolume(typename PFP::MAP& map, const VertexAttribute<typ
namespace Parallel namespace Parallel
{ {
template <typename PFP> template <typename PFP>
typename PFP::REAL totalVolume(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, const FunctorSelect& select = allDarts, unsigned int nbth = 0, unsigned int current_thread = 0) ; typename PFP::REAL totalVolume(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, const FunctorSelect& select = allDarts, unsigned int nbth = 0) ;
} }
......
...@@ -156,7 +156,7 @@ public: ...@@ -156,7 +156,7 @@ public:
template <typename PFP> template <typename PFP>
typename PFP::REAL totalVolume(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, const FunctorSelect& select, unsigned int nbth, unsigned int current_thread) typename PFP::REAL totalVolume(typename PFP::MAP& map, const VertexAttribute<typename PFP::VEC3>& position, const FunctorSelect& select, unsigned int nbth)
{ {
if (nbth==0) if (nbth==0)
nbth = Algo::Parallel::optimalNbThreads(); nbth = Algo::Parallel::optimalNbThreads();
...@@ -170,7 +170,7 @@ typename PFP::REAL totalVolume(typename PFP::MAP& map, const VertexAttribute<typ ...@@ -170,7 +170,7 @@ typename PFP::REAL totalVolume(typename PFP::MAP& map, const VertexAttribute<typ
double total=0.0; double total=0.0;
Algo::Parallel::foreach_cell<typename PFP::MAP,VOLUME>(map, functs, true, select, current_thread); Algo::Parallel::foreach_cell<typename PFP::MAP,VOLUME>(map, functs, true, select);
for (unsigned int i=0; i < nbth; ++i) for (unsigned int i=0; i < nbth; ++i)
{ {
......
/*******************************************************************************
* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps *
* version 0.1 *
* Copyright (C) 2009-2012, IGG Team, LSIIT, University of Strasbourg *
* *
* This library is free software; you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as published by the *
* Free Software Foundation; either version 2.1 of the License, or (at your *
* option) any later version. *
* *
* This library is distributed in the hope that it will be useful, but WITHOUT *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License *
* for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with this library; if not, write to the Free Software Foundation, *
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
* *
* Web site: http://cgogn.unistra.fr/ *
* Contact information: cgogn@unistra.fr *
* *
*******************************************************************************/
#ifndef __PARALLEL_THREAD__
#define __PARALLEL_THREAD__
namespace CGoGN
{
namespace Algo
{
namespace Parallel
{
/**
* Class to encapsulate algorithm in a boost thread
* Usage:
* - Define a class MyCGoGNThread that inherit from CGoGNThread
* - call with boost::thread cgt1(MyCGoGNThread(map,1, ...);
* - wait to finish: cgt1.join();
*
* TODO: write a CGoGNThread version of "all" algorithm
*/
template<typename MAP>
class CGoGNThread
{
protected:
MAP& m_map;
unsigned int m_threadId;
unsigned int tid()
{
return m_threadId;
}
public:
CGoGNThread(MAP& map, unsigned int th):
m_map(map), m_threadId(th) {}
virtual ~CGoGNThread() {}
/**
* to implement with algo to execute (use m_threadId)
*/
virtual void operator()()=0;
};
} // namespace Parallel
} // namespace Algo
} // namespace CGoGN
#endif
...@@ -106,7 +106,7 @@ void setNbCore(unsigned int nb); ...@@ -106,7 +106,7 @@ void setNbCore(unsigned int nb);
* @param good a selector * @param good a selector
*/ */
template <typename MAP, unsigned int ORBIT> template <typename MAP, unsigned int ORBIT>
void foreach_cell(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool needMarkers = false, const FunctorSelect& good = allDarts, unsigned int currentThread = 0); void foreach_cell(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool needMarkers = false, const FunctorSelect& good = allDarts);
/** /**
* Traverse cells of a map in parallel. Use quick traversal, cell markers or dart markers if available ! * Traverse cells of a map in parallel. Use quick traversal, cell markers or dart markers if available !
...@@ -118,7 +118,7 @@ void foreach_cell(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool n ...@@ -118,7 +118,7 @@ void foreach_cell(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool n
* @param good a selector * @param good a selector
*/ */
template <typename MAP, unsigned int ORBIT> template <typename MAP, unsigned int ORBIT>
void foreach_cell(MAP& map, FunctorMapThreaded<MAP>& func, unsigned int nbth = 0, bool needMarkers = false, const FunctorSelect& good = allDarts, unsigned int currentThread = 0); void foreach_cell(MAP& map, FunctorMapThreaded<MAP>& func, unsigned int nbth = 0, bool needMarkers = false, const FunctorSelect& good = allDarts);
/** /**
...@@ -131,7 +131,7 @@ void foreach_cell(MAP& map, FunctorMapThreaded<MAP>& func, unsigned int nbth = 0 ...@@ -131,7 +131,7 @@ void foreach_cell(MAP& map, FunctorMapThreaded<MAP>& func, unsigned int nbth = 0
* @param good a selector * @param good a selector
*/ */
template <typename MAP, unsigned int ORBIT> template <typename MAP, unsigned int ORBIT>
void foreach_cell_all_thread(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool needMarkers = false, const FunctorSelect& good = allDarts, unsigned int currentThread = 0); void foreach_cell_all_thread(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool needMarkers = false, const FunctorSelect& good = allDarts);
/** /**
......
...@@ -127,7 +127,7 @@ inline unsigned int optimalNbThreads(NbParam p) ...@@ -127,7 +127,7 @@ inline unsigned int optimalNbThreads(NbParam p)
template <typename MAP, unsigned int ORBIT> template <typename MAP, unsigned int ORBIT>
void foreach_cell(MAP& map, FunctorMapThreaded<MAP>& func, unsigned int nbth, bool needMarkers, const FunctorSelect& good, unsigned int currentThread) void foreach_cell(MAP& map, FunctorMapThreaded<MAP>& func, unsigned int nbth, bool needMarkers, const FunctorSelect& good)
{ {
if (nbth == 0) if (nbth == 0)
nbth = optimalNbThreads(); nbth = optimalNbThreads();
...@@ -150,7 +150,7 @@ void foreach_cell(MAP& map, FunctorMapThreaded<MAP>& func, unsigned int nbth, bo ...@@ -150,7 +150,7 @@ void foreach_cell(MAP& map, FunctorMapThreaded<MAP>& func, unsigned int nbth, bo
funcs.push_back(func.duplicate()); funcs.push_back(func.duplicate());
} }
foreach_cell<MAP,ORBIT>(map,funcs,needMarkers,good,currentThread); foreach_cell<MAP,ORBIT>(map,funcs,needMarkers,good);
if (!shared) if (!shared)
for (unsigned int i = 0; i < nbth; ++i) for (unsigned int i = 0; i < nbth; ++i)
...@@ -158,7 +158,7 @@ void foreach_cell(MAP& map, FunctorMapThreaded<MAP>& func, unsigned int nbth, bo ...@@ -158,7 +158,7 @@ void foreach_cell(MAP& map, FunctorMapThreaded<MAP>& func, unsigned int nbth, bo
} }
template <typename MAP, unsigned int ORBIT> template <typename MAP, unsigned int ORBIT>
void foreach_cell(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool needMarkers, const FunctorSelect& good, unsigned int currentThread) void foreach_cell(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool needMarkers, const FunctorSelect& good)
{ {
unsigned int nbth = funcs.size(); unsigned int nbth = funcs.size();
...@@ -198,7 +198,7 @@ void foreach_cell(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool n ...@@ -198,7 +198,7 @@ void foreach_cell(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool n
{ {
if(map.template isOrbitEmbedded<ORBIT>()) if(map.template isOrbitEmbedded<ORBIT>())
{ {
cmark = new CellMarker<ORBIT>(map, currentThread) ; cmark = new CellMarker<ORBIT>(map) ;
d = map.begin(); d = map.begin();
unsigned int nb = 0; unsigned int nb = 0;
...@@ -215,7 +215,7 @@ void foreach_cell(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool n ...@@ -215,7 +215,7 @@ void foreach_cell(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool n
} }
else else
{ {
dmark = new DartMarker(map, currentThread) ; dmark = new DartMarker(map) ;
d = map.begin(); d = map.begin();
unsigned int nb = 0; unsigned int nb = 0;
while ((d != map.end()) && (nb < nbth*SIZE_BUFFER_THREAD) ) while ((d != map.end()) && (nb < nbth*SIZE_BUFFER_THREAD) )
...@@ -657,232 +657,11 @@ void foreach_cell2Pass(MAP& map, FunctorMapThreaded<MAP>& funcFront, FunctorMapT ...@@ -657,232 +657,11 @@ void foreach_cell2Pass(MAP& map, FunctorMapThreaded<MAP>& funcFront, FunctorMapT
delete funcs[i]; delete funcs[i];
} }
//
//
//template <typename MAP>
//void Foreach<MAP>::Foreach(MAP& map, unsigned int nbth):
//m_nbth(nbth)
//{
// if (m_nbth == 0)
// m_nbth = optimalNbThreads();
//
// m_funcs.reserve(m_nbth);
//
// m_vd = new std::vector<Dart>[2*nbth];
// for (unsigned int i = 0; i < 2*nbth; ++i)
// m_vd[i].reserve(SIZE_BUFFER_THREAD);
//}
//
//template <typename MAP>
//Foreach<MAP>::~Foreach(MAP& map, unsigned int nbth)
//{
// delete[] m_vd;
//}
//
//
//template <typename MAP>
//void Foreach<MAP>:: clearFunctors()
//{
// m_funcs.clear();
//}
//
//template <typename MAP>
//void Foreach<MAP>:: addFunctor(FunctorMapThreaded<MAP>* funcPtr)
//{
// m_funcs.push_back(funcPtr);
//}
//
//template <typename MAP>
//template<typename T>
//T* Foreach<MAP>::getFunctor(unsigned int i)
//{
// assert(i < m_funcs.size());
// return dynamic_cast<T*>(m_funcs[i]);
//}
//
//
//template <typename MAP>
//template <unsigned int ORBIT>
//void Foreach<MAP>::traverseCell<ORBIT>(bool needMarkers, const FunctorSelect& good, unsigned int currentThread)
//{
// assert(m_funcs.size() == m_nbth);
//
// boost::thread** threads = new boost::thread*[m_nbth];
//
// AttributeContainer* cont = NULL;
// DartMarker* dmark = NULL;
// CellMarker<ORBIT>* cmark = NULL;
// AttributeMultiVector<Dart>* quickTraversal = m_map.template getQuickTraversal<ORBIT>() ;
//
// // fill each vd buffers with SIZE_BUFFER_THREAD darts
// Dart d;
// unsigned int di=0;
//
// if(quickTraversal != NULL)
// {
// cont = &(m_map.template getAttributeContainer<ORBIT>()) ;
//
// di = cont->begin();
// unsigned int nb = 0;
// while ((di != cont->end()) && (nb < m_nbth*SIZE_BUFFER_THREAD) )
// {
// d = quickTraversal->operator[](di);
// if (good(d))
// {
// m_vd[nb%m_nbth].push_back(d);
// nb++;
// }
// cont->next(di);
// }
// }
// else
// {
// if(m_map.template isOrbitEmbedded<ORBIT>())
// {
// cmark = new CellMarker<ORBIT>(m_map, currentThread) ;
//
// d = m_map.begin();
// unsigned int nb = 0;
// while ((d != m_map.end()) && (nb < m_nbth*SIZE_BUFFER_THREAD) )
// {
// if (good(d) && (!m_map.isBoundaryMarked(d)) && (!cmark->isMarked(d)))
// {
// cmark->mark(d);
// m_vd[nb%m_nbth].push_back(d);
// nb++;
// }
// m_map.next(d);
// }
// }
// else
// {
// dmark = new DartMarker(m_map, currentThread) ;
// d = m_map.begin();
// unsigned int nb = 0;
// while ((d != m_map.end()) && (nb < m_nbth*SIZE_BUFFER_THREAD) )
// {
// if (good(d) && (!m_map.isBoundaryMarked(d)) && (!dmark->isMarked(d)))
// {
// dmark->markOrbit<ORBIT>(d);
// m_vd[nb%m_nbth].push_back(d);
// nb++;
// }
// m_map.next(d);
// }
// }
// }
//
// boost::barrier sync1(m_nbth+1);
// boost::barrier sync2(m_nbth+1);
// bool finished=false;
// // lauch threads
// if (needMarkers)
// {
// unsigned int nbth_prec = m_map.getNbThreadMarkers();
// if (nbth_prec < m_nbth+1)
// m_map.addThreadMarker(m_nbth+1-nbth_prec);
// }
//
// for (unsigned int i = 0; i < m_nbth; ++i)
// threads[i] = new boost::thread(ThreadFunction<MAP>(m_funcs[i], m_vd[i],sync1,sync2, finished,1+i));
//
//
// if (cont)
// {
// while (di != cont->end())
// {
// for (unsigned int i = 0; i < m_nbth; ++i)
// m_vd[m_nbth+i].clear();