private static v2008R2.ISchedulerTask CreateCleanupTask(v2008R2.ISchedulerJob job, string internalRemoteDirectoryName, string stdErrDirName, string stdOutDirName, string name, bool isFinalCleanup) { v2008R2.ISchedulerTask cleanupTask = job.CreateTask(); cleanupTask.WorkDirectory = internalRemoteDirectoryName; cleanupTask.Name = name; cleanupTask.IsExclusive = false; cleanupTask.StdErrFilePath = string.Format(@"{0}\{1}.txt", stdErrDirName, name); cleanupTask.StdOutFilePath = string.Format(@"{0}\{1}.txt", stdOutDirName, name); if (isFinalCleanup) { } else { cleanupTask.CommandLine = "ECHO The cleanup task is running."; } return(cleanupTask); }
private static v2008R2.ISchedulerTask CreateTask(int?taskNumber, ClusterSubmitterArgs clusterArgs, v2008R2.ISchedulerJob job, IDistributable distributableObj, v2008R2.IStringCollection nodesToUse) { Distribute.Locally local = new Distribute.Locally() { Cleanup = false, TaskCount = clusterArgs.TaskCount, Tasks = taskNumber.HasValue ? new RangeCollection(taskNumber.Value) : null, ParallelOptions = new ParallelOptions() { MaxDegreeOfParallelism = 1 } }; v2008R2.ISchedulerTask task = job.CreateTask(); if (nodesToUse != null) { task.RequiredNodes = nodesToUse; } if (clusterArgs.NumCoresPerTask != null) { task.MinimumNumberOfCores = clusterArgs.NumCoresPerTask.Value; task.MaximumNumberOfCores = clusterArgs.NumCoresPerTask.Value; task.MaximumNumberOfNodes = 1; local.ParallelOptions.MaxDegreeOfParallelism = clusterArgs.NumCoresPerTask.Value; } else if (clusterArgs.IsExclusive) { //task.MinimumNumberOfCores = 1; //task.MaximumNumberOfCores = 8; //task.MaximumNumberOfNodes = 1; } task.WorkDirectory = clusterArgs.ExternalRemoteDirectoryName; Distribute.Distribute distributeExe = new Distribute.Distribute() { Distributable = distributableObj, Distributor = local }; string taskArgString = CreateTaskString(distributeExe, clusterArgs.MinimalCommandLine); string exeName = distributeExe.Distributable is DistributableWrapper ? clusterArgs.ExeName : distributeExe.GetType().Assembly.GetName().Name; string taskCommandLine = null; if (clusterArgs.UseMPI) { taskCommandLine = string.Format("mpiexec -n {0} {1}\\{2} {3}", clusterArgs.NumCoresPerTask, clusterArgs.ExeRelativeDirectoryName, exeName, taskArgString); } else { taskCommandLine = string.Format("{0}\\{1} {2}", clusterArgs.ExeRelativeDirectoryName, exeName, taskArgString); } task.CommandLine = taskCommandLine; string taskNumberAsString = taskNumber.HasValue ? taskNumber.Value.ToString() : "*"; task.Name = Helper.CreateDelimitedString(" ", clusterArgs.Name, taskNumberAsString); task.StdErrFilePath = string.Format(@"{0}\{1}.txt", clusterArgs.StdErrDirName, taskNumberAsString); task.StdOutFilePath = string.Format(@"{0}\{1}.txt", clusterArgs.StdOutDirName, taskNumberAsString); if (task.StdErrFilePath.Length >= 160) { Console.WriteLine("Caution, std error file path is {0} characters, which will probably cause HPC to crash.", task.StdErrFilePath.Length); } return(task); }