Ejemplo n.º 1
0
        /// <summary>
        /// Submit the job to the Microsoft HPC server.
        /// </summary>
        public override object Submit(Job myJob)
        {
            string PrjName = InteractiveShell.WorkflowMgm.CurrentProject;

            ISchedulerJob  job  = null;
            ISchedulerTask task = null;

            // Create a job and add a task to the job.
            job         = m_scheduler.CreateJob();
            job.Name    = myJob.Name;
            job.Project = PrjName;
            job.MaximumNumberOfCores = myJob.NumberOfMPIProcs;
            job.MinimumNumberOfCores = myJob.NumberOfMPIProcs;

            job.UserName = m_Username;

            task = job.CreateTask();
            task.MaximumNumberOfCores = myJob.NumberOfMPIProcs;
            task.MinimumNumberOfCores = myJob.NumberOfMPIProcs;

            task.WorkDirectory = myJob.DeploymentDirectory;

            using (var str = new StringWriter()) {
                str.Write("mpiexec ");
                str.Write(Path.GetFileName(myJob.EntryAssembly.Location));
                foreach (string arg in myJob.CommandLineArguments)
                {
                    str.Write(" ");
                    str.Write(arg);
                }

                task.CommandLine = str.ToString();
            }
            foreach (var kv in myJob.EnvironmentVars)
            {
                string name = kv.Key;
                string valu = kv.Value;
                task.SetEnvironmentVariable(name, valu);
            }

            task.StdOutFilePath = Path.Combine(myJob.DeploymentDirectory, "stdout.txt");
            task.StdErrFilePath = Path.Combine(myJob.DeploymentDirectory, "stderr.txt");

            if (m_ComputeNodes != null)
            {
                foreach (string node in m_ComputeNodes)
                {
                    job.RequestedNodes.Add(node);
                }
            }


            job.AddTask(task);


            // Start the job.
            m_scheduler.SubmitJob(job, m_Password != null ? m_Username : null, m_Password);

            return(job.Id);
        }