#include "SMESH_Mesh.hxx"
-#ifndef WIN32
-#include <boost/asio.hpp>
-#endif
-
#include "SMESH_Gen.hxx"
#include "SMESH_subMesh.hxx"
-enum ParallelismMethod {MultiThread, MultiNode};
-
class SMESH_EXPORT SMESH_ParallelMesh: public SMESH_Mesh
{
public:
virtual ~SMESH_ParallelMesh();
- // Locking mechanism
+#ifndef WIN32
void Lock() override {_my_lock.lock();};
void Unlock() override {_my_lock.unlock();};
- // We need to recreate the pool afterthe join
- void wait() override {_pool->join(); DeletePoolThreads(); InitPoolThreads(); };
- // Thread Pool
- void InitPoolThreads() {_pool = new boost::asio::thread_pool(GetPoolNbThreads());};
- void DeletePoolThreads() {delete _pool;};
- boost::asio::thread_pool* GetPool() {return _pool;};
- int GetPoolNbThreads();
+ int GetNbThreads() override{return _NbThreads;};
+ void SetNbThreads(long nbThreads) override{_NbThreads=nbThreads;};
- // Temporary folder
- void CreateTmpFolder();
- void DeleteTmpFolder();
- boost::filesystem::path GetTmpFolder() {return tmp_folder;};
+ void InitPoolThreads() override {_pool = new boost::asio::thread_pool(_NbThreads);};
+ void DeletePoolThreads() override {delete _pool;};
- //
- bool IsParallel() override {return true;};
+ void wait() override {_pool->join(); DeletePoolThreads(); InitPoolThreads(); };
- // Parallelims paramaters
- int GetParallelismMethod() {return _method;};
- void SetParallelismMethod(int aMethod) {_method = aMethod;};
+ bool IsParallel() override {return _NbThreads > 0;};
- // Mutlithreading parameters
- int GetNbThreads() {return _NbThreads;};
- void SetNbThreads(long nbThreads);
+ void CreateTmpFolder();
+ void DeleteTmpFolder();
- // Multinode parameters
- std::string GetResource() {return _resource;};
- void SetResource(std::string aResource) {_resource = aResource;};
+ boost::filesystem::path GetTmpFolder() override {return tmp_folder;};
+ boost::asio::thread_pool* GetPool() override {return _pool;};
+#else
+ void Lock() override {};
+ void Unlock() override {};
- int GetNbProc() {return _nbProc;};
- void SetNbProc(long nbProc) {_nbProc = nbProc;};
+ int GetNbThreads() override {return 0;};
+ void SetNbThreads(long nbThreads) {(void) nbThreads;};
- int GetNbProcPerNode() {return _nbProcPerNode;};
- void SetNbProcPerNode(long nbProcPerNodes) {_nbProcPerNode = nbProcPerNodes;};
+ void InitPoolThreads() override {};
+ void DeletePoolThreads() override {};
+ void wait() override {};
- int GetNbNode() {return _nbNode;};
- void SetNbNode(long nbNodes) {_nbNode = nbNodes;};
+ bool IsParallel() override {return false;};
- std::string GetWcKey() {return _wcKey;};
- void SetWcKey(std::string wcKey) {_wcKey = wcKey;};
+ void CreateTmpFolder();
+ void DeleteTmpFolder();
+#endif
- // Parallel computation
bool ComputeSubMeshes(
SMESH_Gen* gen,
SMESH_Mesh & aMesh,
SMESH_ParallelMesh():SMESH_Mesh() {};
SMESH_ParallelMesh(const SMESH_ParallelMesh& aMesh):SMESH_Mesh(aMesh) {};
private:
- // Mutex for multhitreading write in SMESH_Mesh
#ifndef WIN32
- boost::mutex _my_lock;
-#endif
boost::filesystem::path tmp_folder;
- // thread pool for computation
- boost::asio::thread_pool * _pool = nullptr;
-
- int _method = ParallelismMethod::MultiThread;
-
- int _NbThreads = std::thread::hardware_concurrency();
-
- int _nbProc = 1;
- int _nbProcPerNode = 1;
- int _nbNode = 1;
- std::string _resource = "";
- std::string _wcKey = "P11N0:SALOME";
+ boost::asio::thread_pool * _pool = nullptr; //thread pool for computation
+#endif
};
#endif