Changeset 3855 in Sophya for trunk/SophyaLib
- Timestamp:
- Aug 12, 2010, 1:02:24 AM (15 years ago)
- Location:
- trunk/SophyaLib/SysTools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/SysTools/parlex.cc
r3730 r3855 11 11 12 12 /*! 13 \class ParallelTaskInterface 14 \ingroup SysTools 15 \brief Interface definition for parallel task object. 16 17 The pure virtual method execute() should be redefined by the classes 18 inheriting from ParallelTaskInterface 19 */ 20 ParallelTaskInterface::ParallelTaskInterface() 21 { 22 setNbParallelThreads(0); 23 } 24 ParallelTaskInterface::~ParallelTaskInterface() 25 { 26 } 27 /*! 28 \brief Define the number of parallel threads running to perform the task 29 30 This method is called by ParallelExecutor object. If subclasses overwrite this method, 31 base class method should be called to set the value of nbparallel_ attribute. 32 */ 33 void ParallelTaskInterface::setNbParallelThreads(int nbparthr) 34 { 35 nbparallel_=nbparthr; 36 } 37 38 /*! 13 39 \class ParallelTaskFunction 14 40 \ingroup SysTools 15 41 \brief ParallelTaskInterface implementation for functions 42 43 The function which are executed by the ParallelTaskFunction execute() method should 44 conform to the prototype: int func(int tid, int nparthr) 45 46 tid (counting from zero) is the thread rank, and nparthr the number of parallel threads 47 executing in the context 16 48 */ 17 49 //! Constructor with the specification of the function to be executed … … 22 54 int ParallelTaskFunction::execute(int tid) 23 55 { 24 return parfunc_(tid );56 return parfunc_(tid, getNbParallelThreads()); 25 57 } 26 58 … … 184 216 vrc_[i] = 0; 185 217 } 218 ptask.setNbParallelThreads( nthr ); 186 219 } 187 220 … … 195 228 { 196 229 if (vptask.size()<1) throw ParmError("ParallelExecutor(vector<ptask>/Error vptask.size()<1"); 230 int nthr= (int)nThreads(); 197 231 for(size_t i=0; i<vpext_.size(); i++) { 198 232 vpext_[i] = new ParalExThread( (*vptask[i]), i); 233 vptask[i]->setNbParallelThreads(nthr); 199 234 vrc_[i] = 0; 200 235 } … … 219 254 for(size_t i=0; i<vpext_.size(); i++) 220 255 vpext_[i]->setParallelTask(ptask); 256 ptask.setNbParallelThreads( (int)nThreads() ); 221 257 return; 222 258 } … … 229 265 if (vptask.size()!=vpext_.size()) 230 266 throw SzMismatchError("ParallelExecutor::SetParallelTask(vector<ptask>) - vptask.size()!=vpext.size()"); 231 for(size_t i=0; i<vpext_.size(); i++) 267 int nthr= (int)nThreads(); 268 for(size_t i=0; i<vpext_.size(); i++) { 232 269 vpext_[i]->setParallelTask(*vptask[i]); 270 vptask[i]->setNbParallelThreads(nthr); 271 } 233 272 return; 234 273 } -
trunk/SophyaLib/SysTools/parlex.h
r3718 r3855 5 5 6 6 // Classes pour execution de taches paralleles en utilisant les threads 7 // R. Ansari UPS+LAL IN2P3/CNRS 200 57 // R. Ansari UPS+LAL IN2P3/CNRS 2009-2010 8 8 9 9 #include "zthread.h" … … 17 17 // s'executer en parallele 18 18 //-------------------------------------------------------------------- 19 /*!20 \class ParallelTaskInterface21 \ingroup SysTools22 \brief Interface definition for parallel task object.23 24 The pure virtual method execute() should be redefined by the classes25 inheriting from ParallelTaskInterface26 */27 19 class ParallelTaskInterface { 28 20 public: 29 explicit ParallelTaskInterface() { }30 virtual ~ParallelTaskInterface() { }21 explicit ParallelTaskInterface(); 22 virtual ~ParallelTaskInterface(); 31 23 /*! This method should perform the actual computation. The parameter tid 32 24 is used by the ParallelExecutor class to identify the thread calling the method 33 25 */ 34 26 virtual int execute(int tid) = 0; 27 //! Define the number of parallel threads running to perform the task (set by ParallelExecutor object) 28 virtual void setNbParallelThreads(int nbparthr); 29 //! Return the number of parallel threads running to perform the task 30 inline int getNbParallelThreads() { return nbparallel_; } 31 protected: 32 int nbparallel_; // total number of parallel threads which will perform the job 35 33 }; 36 34 37 35 //---- Implementation de ParallelTaskInterface pour l'execution des fonctions 38 typedef int (* ParalExFunction) (int); 36 //! Prototype for functions which executed by ParallelTaskFunction objects 37 typedef int (* ParalExFunction) (int,int); 39 38 //---- 40 class ParallelTaskFunction{39 class ParallelTaskFunction : public ParallelTaskInterface { 41 40 public: 42 41 explicit ParallelTaskFunction(ParalExFunction f); … … 116 115 //! Return RC for the ParalleTask.execute() of thread i 117 116 inline int getRC(size_t i) { return vrc_[i]; } 118 //! Return the ex ecption condition for the ParalleTask.execute() of thread i117 //! Return the exception condition for the ParalleTask.execute() of thread i 119 118 inline bool IfException(size_t i, string& msg) { return vpext_[i]->IfException(msg); } 120 119
Note:
See TracChangeset
for help on using the changeset viewer.