- Timestamp:
- 04/16/13 13:13:41 (11 years ago)
- Location:
- branches/OaaS
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/OaaS
- Property svn:ignore
-
old new 21 21 protoc.exe 22 22 _ReSharper.HeuristicLab 3.3 Tests 23 Google.ProtocolBuffers-2.4.1.473.dll 23 24 packages
-
- Property svn:mergeinfo changed
- Property svn:ignore
-
branches/OaaS/HeuristicLab.Clients.Hive/3.3/HiveTasks/OptimizerHiveTask.cs
r7782 r9363 31 31 namespace HeuristicLab.Clients.Hive { 32 32 public class OptimizerHiveTask : HiveTask<OptimizerTask> { 33 34 Object batchRunLocker = new Object();35 36 33 #region Constructors and Cloning 37 34 public OptimizerHiveTask() { } … … 60 57 protected override void UpdateChildHiveTasks() { 61 58 base.UpdateChildHiveTasks(); 62 if (Task != null && syncTasksWithOptimizers) { 63 if (!ItemTask.ComputeInParallel) { 64 this.childHiveTasks.Clear(); 65 } else { 66 if (ItemTask.Item is Optimization.Experiment) { 67 Optimization.Experiment experiment = (Optimization.Experiment)ItemTask.Item; 68 foreach (IOptimizer childOpt in experiment.Optimizers) { 69 var optimizerHiveTask = new OptimizerHiveTask(childOpt); 70 optimizerHiveTask.Task.Priority = Task.Priority; //inherit priority from parent 71 this.childHiveTasks.Add(optimizerHiveTask); 72 } 73 } else if (ItemTask.Item is Optimization.BatchRun) { 74 Optimization.BatchRun batchRun = ItemTask.OptimizerAsBatchRun; 75 if (batchRun.Optimizer != null) { 76 while (this.childHiveTasks.Count < batchRun.Repetitions) { 77 var optimizerHiveTask = new OptimizerHiveTask(batchRun.Optimizer); 78 optimizerHiveTask.Task.Priority = Task.Priority; 59 childHiveTasksLock.EnterWriteLock(); 60 try { 61 if (Task != null && syncTasksWithOptimizers) { 62 if (!ItemTask.ComputeInParallel) { 63 this.childHiveTasks.Clear(); 64 } else { 65 if (ItemTask.Item is Optimization.Experiment) { 66 Optimization.Experiment experiment = (Optimization.Experiment)ItemTask.Item; 67 foreach (IOptimizer childOpt in experiment.Optimizers) { 68 var optimizerHiveTask = new OptimizerHiveTask(childOpt); 69 optimizerHiveTask.Task.Priority = Task.Priority; //inherit priority from parent 79 70 this.childHiveTasks.Add(optimizerHiveTask); 80 71 } 81 while (this.childHiveTasks.Count > batchRun.Repetitions) { 82 this.childHiveTasks.Remove(this.childHiveTasks.Last()); 72 } else if (ItemTask.Item is Optimization.BatchRun) { 73 Optimization.BatchRun batchRun = ItemTask.OptimizerAsBatchRun; 74 if (batchRun.Optimizer != null) { 75 while (this.childHiveTasks.Count < batchRun.Repetitions) { 76 var optimizerHiveTask = new OptimizerHiveTask(batchRun.Optimizer); 77 optimizerHiveTask.Task.Priority = Task.Priority; 78 this.childHiveTasks.Add(optimizerHiveTask); 79 } 80 while (this.childHiveTasks.Count > batchRun.Repetitions) { 81 this.childHiveTasks.Remove(this.childHiveTasks.Last()); 82 } 83 83 } 84 84 } 85 85 } 86 86 } 87 } 88 finally { 89 childHiveTasksLock.ExitWriteLock(); 87 90 } 88 91 } … … 104 107 } 105 108 } 106 protected override void Der gisterItemTaskEvents() {107 base.Der gisterItemTaskEvents();109 protected override void DeregisterItemTaskEvents() { 110 base.DeregisterItemTaskEvents(); 108 111 if (ItemTask != null) { 109 112 if (ItemTask.Item is Optimization.Experiment) { … … 223 226 /// </summary> 224 227 private void UpdateOptimizerInBatchRun(BatchRun batchRun, OptimizerTask optimizerTask) { 225 if (batchRun.Optimizer == null) { 226 batchRun.Optimizer = (IOptimizer)optimizerTask.Item; // only set the first optimizer as Optimizer. if every time the Optimizer would be set, the runs would be cleared each time 227 } 228 lock (batchRunLocker) { 228 itemTaskLock.EnterWriteLock(); 229 try { 230 if (batchRun.Optimizer == null) { 231 batchRun.Optimizer = (IOptimizer)optimizerTask.Item; // only set the first optimizer as Optimizer. if every time the Optimizer would be set, the runs would be cleared each time 232 } 229 233 foreach (IRun run in optimizerTask.Item.Runs) { 230 234 if (!batchRun.Runs.Contains(run)) { … … 234 238 } 235 239 } 240 finally { 241 itemTaskLock.ExitWriteLock(); 242 } 236 243 } 237 244 … … 241 248 /// </summary> 242 249 private void UpdateOptimizerInExperiment(Optimization.Experiment experiment, OptimizerTask optimizerTask) { 243 if (optimizerTask.IndexInParentOptimizerList < 0) 244 throw new IndexOutOfRangeException("IndexInParentOptimizerList must be equal or greater than zero! The Task is invalid and the optimizer-tree cannot be reassembled."); 245 246 while (experiment.Optimizers.Count < optimizerTask.IndexInParentOptimizerList) { 247 experiment.Optimizers.Add(new UserDefinedAlgorithm("Placeholder")); // add dummy-entries to Optimizers so that its possible to insert the optimizerTask at the correct position 248 } 249 if (experiment.Optimizers.Count < optimizerTask.IndexInParentOptimizerList + 1) { 250 experiment.Optimizers.Add(optimizerTask.Item); 251 } else { 252 // if ComputeInParallel==true, don't replace the optimizer (except it is still a Placeholder) 253 // this is because Jobs with ComputeInParallel get submitted to hive with their child-optimizers deleted 254 if (!optimizerTask.ComputeInParallel || experiment.Optimizers[optimizerTask.IndexInParentOptimizerList].Name == "Placeholder") { 255 experiment.Optimizers[optimizerTask.IndexInParentOptimizerList] = optimizerTask.Item; 256 } 250 itemTaskLock.EnterWriteLock(); 251 try { 252 if (optimizerTask.IndexInParentOptimizerList < 0) 253 throw new IndexOutOfRangeException("IndexInParentOptimizerList must be equal or greater than zero! The Task is invalid and the optimizer-tree cannot be reassembled."); 254 255 while (experiment.Optimizers.Count < optimizerTask.IndexInParentOptimizerList) { 256 experiment.Optimizers.Add(new UserDefinedAlgorithm("Placeholder")); // add dummy-entries to Optimizers so that its possible to insert the optimizerTask at the correct position 257 } 258 if (experiment.Optimizers.Count < optimizerTask.IndexInParentOptimizerList + 1) { 259 experiment.Optimizers.Add(optimizerTask.Item); 260 } else { 261 // if ComputeInParallel==true, don't replace the optimizer (except it is still a Placeholder) 262 // this is because Jobs with ComputeInParallel get submitted to hive with their child-optimizers deleted 263 if (!optimizerTask.ComputeInParallel || experiment.Optimizers[optimizerTask.IndexInParentOptimizerList].Name == "Placeholder") { 264 experiment.Optimizers[optimizerTask.IndexInParentOptimizerList] = optimizerTask.Item; 265 } 266 } 267 } 268 finally { 269 itemTaskLock.ExitWriteLock(); 257 270 } 258 271 } … … 365 378 } 366 379 380 public void ExecuteReadActionOnItemTask(Action action) { 381 itemTaskLock.EnterReadLock(); 382 try { 383 action(); 384 } 385 finally { 386 itemTaskLock.ExitReadLock(); 387 } 388 } 389 367 390 #region Helpers 368 391 /// <summary>
Note: See TracChangeset
for help on using the changeset viewer.