]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
- Adding support gcc-4.3.2
authorribes <ribes>
Fri, 31 Oct 2008 13:32:05 +0000 (13:32 +0000)
committerribes <ribes>
Fri, 31 Oct 2008 13:32:05 +0000 (13:32 +0000)
- Bug-- in ContainerManager
- Adding support for prun machines

src/Batch/Batch_BatchManager_eClient.cxx
src/Batch/Batch_BatchManager_eSGE.cxx
src/Batch/MpiImpl.cxx
src/Batch/MpiImpl.hxx
src/Container/SALOME_ContainerManager.cxx
src/Launcher/Launcher.cxx
src/ResourcesManager/SALOME_ResourcesCatalog_Handler.cxx
src/ResourcesManager/SALOME_ResourcesCatalog_Parser.hxx
src/ResourcesManager/SALOME_ResourcesManager.cxx

index 17355739ccabf549b453641e7c59f1fb1c8c940c..d7004aa658f8555efb448aea865ee2603ce070c8 100644 (file)
@@ -203,6 +203,8 @@ namespace Batch {
       return new MpiImpl_OPENMPI();
     else if(mpiImpl == "slurm")
       return new MpiImpl_SLURM();
+    else if(mpiImpl == "prun")
+      return new MpiImpl_PRUN();
     else if(mpiImpl == "nompi")
       throw EmulationException("you must specified an mpi implementation for batch manager");
     else{
index 429f3c13d5a4b97ccc69aebf2d37485bd743bc62..1835e32bf2e9eae8f59eb3622f01ea1f08367295 100644 (file)
@@ -32,6 +32,8 @@
 #include <sstream>
 #include <sys/stat.h>
 #include "Batch_BatchManager_eSGE.hxx"
+#include <stdlib.h>
+#include <libgen.h>
 
 using namespace std;
 
@@ -242,7 +244,7 @@ namespace Batch {
       string::size_type p1 = fileToExecute.find_last_of("/");
       string::size_type p2 = fileToExecute.find_last_of(".");
       rootNameToExecute = fileToExecute.substr(p1+1,p2-p1-1);
-      fileNameToExecute = "~/" + dirForTmpFiles + "/" + string(basename(fileToExecute.c_str()));
+      fileNameToExecute = "~/" + dirForTmpFiles + "/" + string(basename((char *) fileToExecute.c_str()));
 
       int idx = dirForTmpFiles.find("Batch/");
       filelogtemp = dirForTmpFiles.substr(idx+6, dirForTmpFiles.length());
index 2a8341e055dbaa051290ccad032cd515dae6bbe3..2d28ceaf3d8cad64624af48b24bb6836cbd15eb4 100644 (file)
@@ -244,3 +244,40 @@ string MpiImpl_SLURM::halt()
   return "";
 }
 
+// prun implementation
+// Constructor
+MpiImpl_PRUN::MpiImpl_PRUN() : MpiImpl()
+{
+}
+
+// Destructor
+MpiImpl_PRUN::~MpiImpl_PRUN()
+{
+}
+
+string MpiImpl_PRUN::size()
+{
+  return "${RMS_NPROCS}";
+}
+
+string MpiImpl_PRUN::rank()
+{
+  return "${RMS_RANK}";
+}
+
+string MpiImpl_PRUN::boot(const string machinefile, const unsigned int nbnodes)
+{
+  return "";
+}
+
+string MpiImpl_PRUN::run(const string machinefile, const unsigned int nbproc, const string fileNameToExecute)
+{
+  ostringstream oss;
+  oss << "prun -n " << nbproc << " " << "-p mpi " << fileNameToExecute << endl;
+  return oss.str();
+}
+
+string MpiImpl_PRUN::halt()
+{
+  return "";
+}
index 1056c25815c812ef6df96220c830751f8fa64de6..2bc05c018cb446c2dc146d18c08445986595ecc4 100644 (file)
@@ -154,4 +154,23 @@ private:
 
 };
 
+class BATCH_EXPORT MpiImpl_PRUN : public MpiImpl
+{
+public:
+  // Constructeur et destructeur
+  MpiImpl_PRUN(); // constructor
+  virtual ~MpiImpl_PRUN(); //Destructor
+
+  std::string size(); // get number of process of current job
+  std::string rank(); // get process number of current job
+  std::string boot( const std::string machinefile, const unsigned int nbnodes); // get boot command
+  std::string run( const std::string machinefile, const unsigned int nbproc, const std::string fileNameToExecute); // get run command
+  std::string halt(); // get stop command
+
+protected:
+
+private:
+
+};
+
 #endif
index f38f8d07afb198f329ee30a90cf691c74b435178..14f215489e116d851e0c1d1ed1ab9da8fda40552 100644 (file)
@@ -308,16 +308,17 @@ StartContainer(const Engines::MachineParameters& params,
   // launch container with a system call
   int status=system(command.c_str());
 
-  RmTmpFile(); // command file can be removed here
 
   if (status == -1){
     MESSAGE("SALOME_LifeCycleCORBA::StartOrFindContainer rsh failed " <<
            "(system command status -1)");
+    RmTmpFile(); // command file can be removed here
     return Engines::Container::_nil();
   }
   else if (status == 217){
     MESSAGE("SALOME_LifeCycleCORBA::StartOrFindContainer rsh failed " <<
            "(system command status 217)");
+    RmTmpFile(); // command file can be removed here
     return Engines::Container::_nil();
   }
   else{
@@ -349,6 +350,7 @@ StartContainer(const Engines::MachineParameters& params,
         ret->logfilename(logFilename.c_str());
       }
 
+    RmTmpFile(); // command file can be removed here
     return ret;
   }
 }
index 804f8314c24292e5390fb9b50a5a6863c75d78dc..15ff35ebd89d75d469418f247eb65b065bce5829 100644 (file)
@@ -450,6 +450,9 @@ Batch::BatchManager_eClient *Launcher_cpp::FactoryBatchManager( const ParserReso
   case slurm:
     mpi = "slurm";
     break;
+  case prun:
+    mpi = "prun";
+    break;
   case nompi:
     throw LauncherException("you must specified an mpi implementation for batch manager");
     break;
@@ -514,9 +517,9 @@ string Launcher_cpp::buildSalomeCouplingScript(const string fileToExecute, const
   tempOutputFile << ":$PYTHONPATH" << endl ;
 
   // Test node rank
-  tempOutputFile << "if test " ;
+  tempOutputFile << "if test \"" ;
   tempOutputFile << mpiImpl->rank() ;
-  tempOutputFile << " = 0; then" << endl ;
+  tempOutputFile << "\" = \"0\"; then" << endl ;
 
   // -----------------------------------------------
   // Code for rank 0 : launch runAppli and a container
@@ -619,6 +622,8 @@ MpiImpl *Launcher_cpp::FactoryMpiImpl(MpiImplType mpi) throw(LauncherException)
     return new MpiImpl_OPENMPI();
   case slurm:
     return new MpiImpl_SLURM();
+  case prun:
+    return new MpiImpl_PRUN();
   case nompi:
     throw LauncherException("you must specified an mpi implementation for batch manager");
     break;
index 60833df4189c9e0c2cb2f410819f79d96cf40a16..df16779b34d3c0c915735ad29ea942ababdcff63 100755 (executable)
@@ -203,6 +203,8 @@ void SALOME_ResourcesCatalog_Handler::ProcessXmlDocument(xmlDocPtr theDoc)
                 _resource.mpi = openmpi;
               else if  (anMpi == "slurm")
                 _resource.mpi = slurm;
+              else if  (anMpi == "prun")
+                _resource.mpi = prun;
               else
                 _resource.mpi = nompi;
             }
@@ -405,6 +407,9 @@ void SALOME_ResourcesCatalog_Handler::PrepareDocToXmlFile(xmlDocPtr theDoc)
        case slurm:
          xmlNewProp(node, BAD_CAST test_mpi, BAD_CAST "slurm");
           break;
+       case prun:
+         xmlNewProp(node, BAD_CAST test_mpi, BAD_CAST "prun");
+          break;
         default:
          xmlNewProp(node, BAD_CAST test_mpi, BAD_CAST "");
         }
@@ -491,6 +496,9 @@ void SALOME_ResourcesCatalog_Handler::PrepareDocToXmlFile(xmlDocPtr theDoc)
        case slurm:
          xmlNewProp(node, BAD_CAST test_mpi, BAD_CAST "slurm");
           break;
+       case prun:
+         xmlNewProp(node, BAD_CAST test_mpi, BAD_CAST "prun");
+          break;
         default:
          xmlNewProp(node, BAD_CAST test_mpi, BAD_CAST "");
         }
index b0ce1c8001fc6bcae1f72abda6c328c9d8b9b2fd..def0bf55602c29f4e9f16676ef97e94a91c92f66 100755 (executable)
@@ -42,7 +42,7 @@ enum AccessModeType {interactive, batch};
 
 enum BatchType {none, pbs, lsf, sge};
 
-enum MpiImplType {nompi, lam, mpich1, mpich2, openmpi, slurm};
+enum MpiImplType {nompi, lam, mpich1, mpich2, openmpi, slurm, prun};
 
 class RESOURCESMANAGER_EXPORT ResourceDataToSort
   {
index 24df90f13203c2d464ee8be9766326650f12a486..7c8ad5c66901c0d3c5c018dd3e4623c1f6d629a4 100644 (file)
@@ -219,6 +219,8 @@ Engines::MachineParameters* SALOME_ResourcesManager::GetMachineParameters(const
     p_ptr->mpiImpl = "openmpi";
   else if( resource.mpi == slurm )
     p_ptr->mpiImpl = "slurm";
+  else if( resource.mpi == prun )
+    p_ptr->mpiImpl = "prun";
 
   if( resource.Batch == pbs )
     p_ptr->batch = "pbs";