Skip to content

Commit 33c6ff3

Browse files
committed
[PEx] Corrections to new backtracking logic
1 parent d8d9e7e commit 33c6ff3

File tree

4 files changed

+28
-28
lines changed

4 files changed

+28
-28
lines changed

Src/PRuntimes/PExplicitRuntime/src/main/java/pexplicit/runtime/scheduler/Schedule.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ public Choice getChoice(int idx) {
5454
* @param choiceNum Choice depth
5555
*/
5656
public void removeChoicesAfter(int choiceNum) {
57-
choices.subList(choiceNum + 1, choices.size()).clear();
57+
if ((choiceNum + 1) < choices.size()) {
58+
choices.subList(choiceNum + 1, choices.size()).clear();
59+
}
5860
}
5961

6062
/**
@@ -117,6 +119,9 @@ public PValue<?> getCurrentDataChoice(int idx) {
117119

118120
public ScheduleChoice getScheduleChoiceAt(int choiceNum) {
119121
for (int i = choiceNum; i >= 0; i--) {
122+
if (choiceNum >= choices.size()) {
123+
continue;
124+
}
120125
Choice c = choices.get(i);
121126
if (c instanceof ScheduleChoice scheduleChoice) {
122127
return scheduleChoice;

Src/PRuntimes/PExplicitRuntime/src/main/java/pexplicit/runtime/scheduler/explicit/ExplicitSearchScheduler.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -455,26 +455,29 @@ private void endCurrTask() {
455455
}
456456

457457
private void setChildTask(SearchUnit unit, int choiceNum, SearchTask parentTask, boolean isExact) {
458-
SearchTask newTask = searchStrategy.createTask(choiceNum, parentTask);
458+
SearchTask newTask = searchStrategy.createTask(parentTask);
459459

460-
for (int i = 0; i <= choiceNum; i++) {
461-
newTask.addPrefixChoice(schedule.getChoice(i));
462-
}
460+
int maxChoiceNum = choiceNum;
463461

464462
newTask.addSuffixSearchUnit(choiceNum, unit);
465463

466464
if (!isExact) {
467465
for (int i: parentTask.getSearchUnitKeys(false)) {
468466
if (i > choiceNum) {
467+
if (i > maxChoiceNum) {
468+
maxChoiceNum = i;
469+
}
469470
newTask.addSuffixSearchUnit(i, parentTask.getSearchUnit(i));
470471
}
471472
}
472473
}
473474

475+
for (int i = 0; i <= maxChoiceNum; i++) {
476+
newTask.addPrefixChoice(schedule.getChoice(i));
477+
}
478+
474479
parentTask.addChild(newTask);
475480
searchStrategy.addNewTask(newTask);
476-
477-
assert (choiceNum >= parentTask.getCurrChoiceNumber());
478481
}
479482

480483
/**
@@ -534,14 +537,13 @@ private void postIterationCleanup() {
534537
if (newStepNumber == 0) {
535538
reset();
536539
stepState.resetToZero();
537-
schedule.clear();
538540
} else {
539541
stepNumber = newStepNumber;
540542
choiceNumber = scheduleChoice.getChoiceNumber();
541543
stepState.setTo(scheduleChoice.getChoiceState());
542544
assert (!PExplicitGlobal.getGlobalMachine(scheduleChoice.getCurrent()).getSendBuffer().isEmpty());
543-
schedule.removeChoicesAfter(backtrackChoiceNumber);
544545
}
546+
schedule.removeChoicesAfter(backtrackChoiceNumber);
545547
PExplicitLogger.logBacktrack(newStepNumber, cIdx, unit);
546548
return;
547549
}

Src/PRuntimes/PExplicitRuntime/src/main/java/pexplicit/runtime/scheduler/explicit/strategy/SearchStrategy.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,16 @@ public abstract class SearchStrategy implements Serializable {
3232
*/
3333
int currTaskStartIteration = 0;
3434

35-
public SearchTask createTask(int choiceNum, SearchTask parentTask) {
36-
SearchTask newTask = new SearchTask(allTasks.size(), choiceNum, parentTask);
35+
public SearchTask createTask(SearchTask parentTask) {
36+
SearchTask newTask = new SearchTask(allTasks.size(), parentTask);
3737
allTasks.add(newTask);
3838
pendingTasks.add(newTask.getId());
3939
return newTask;
4040
}
4141

4242
public void createFirstTask() {
4343
assert (allTasks.size() == 0);
44-
SearchTask firstTask = createTask(0, null);
44+
SearchTask firstTask = createTask(null);
4545
setCurrTask(firstTask);
4646
}
4747

Src/PRuntimes/PExplicitRuntime/src/main/java/pexplicit/runtime/scheduler/explicit/strategy/SearchTask.java

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,14 @@ public class SearchTask implements Serializable {
1616
@Getter
1717
private final List<SearchTask> children = new ArrayList<>();
1818
@Getter
19-
private final int currChoiceNumber;
19+
private int currChoiceNumber = 0;
2020
@Getter
2121
private final List<Choice> prefixChoices = new ArrayList<>();
2222
@Getter
2323
private final Map<Integer, SearchUnit> searchUnits = new HashMap<>();
2424

25-
public SearchTask(int id, int choiceNum, SearchTask parentTask) {
25+
public SearchTask(int id, SearchTask parentTask) {
2626
this.id = id;
27-
this.currChoiceNumber = choiceNum;
2827
this.parentTask = parentTask;
2928
}
3029

@@ -47,6 +46,9 @@ public void addPrefixChoice(Choice choice) {
4746

4847
public void addSuffixSearchUnit(int choiceNum, SearchUnit unit) {
4948
searchUnits.put(choiceNum, unit.transferUnit());
49+
if (choiceNum > currChoiceNumber) {
50+
currChoiceNumber = choiceNum;
51+
}
5052
}
5153

5254
@Override
@@ -72,19 +74,10 @@ public String toStringDetailed() {
7274
if (isInitialTask()) {
7375
return String.format("%s @0::0 (parent: null)", this);
7476
}
75-
Choice c = prefixChoices.get(currChoiceNumber);
76-
if (c instanceof ScheduleChoice scheduleChoice) {
77-
return String.format("%s @%d::%d (parent: %s)",
78-
this,
79-
scheduleChoice.getStepNumber(),
80-
currChoiceNumber,
81-
parentTask);
82-
} else {
83-
return String.format("%s -::%d (parent: %s)",
84-
this,
85-
currChoiceNumber,
86-
parentTask);
87-
}
77+
return String.format("%s ?::%d (parent: %s)",
78+
this,
79+
currChoiceNumber,
80+
parentTask);
8881
}
8982

9083
public List<Integer> getSearchUnitKeys(boolean reversed) {

0 commit comments

Comments
 (0)