diff options
author | huangs <huangs@chromium.org> | 2015-08-18 07:05:34 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-18 14:06:12 +0000 |
commit | 2bffdb364054d87a1cd7006735f36640b1e6bef7 (patch) | |
tree | ac78b66948200221413071b4b03481c39e0ddc3a /courgette | |
parent | 4095890cc20913234e839d3f135bbdc7ea429300 (diff) | |
download | chromium_src-2bffdb364054d87a1cd7006735f36640b1e6bef7.zip chromium_src-2bffdb364054d87a1cd7006735f36640b1e6bef7.tar.gz chromium_src-2bffdb364054d87a1cd7006735f36640b1e6bef7.tar.bz2 |
[Courgette] Unnest maximize loop in adjustment_method_2.cc to speed up courgette-gen.
In adjustment_method_2.cc, AssignmentProblem::AddPatternToLabelQueue(),
a maximize loop seems nested one level too deep. Moving it up one level
improves courgette-gen. Experiment (goo.gl/OlPjj6) shows this leads to
10% speed up in AdjustmentMethod, and 5% speed up in courgette-gen. We
also verified that final patch is unchanged, although in theory the
code may cause patch change owing to change in kUnwieldy early exit
condition.
Review URL: https://codereview.chromium.org/1286173005
Cr-Commit-Position: refs/heads/master@{#343912}
Diffstat (limited to 'courgette')
-rw-r--r-- | courgette/adjustment_method_2.cc | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/courgette/adjustment_method_2.cc b/courgette/adjustment_method_2.cc index 2869d49..57f02ac 100644 --- a/courgette/adjustment_method_2.cc +++ b/courgette/adjustment_method_2.cc @@ -1073,19 +1073,19 @@ class AssignmentProblem { sums[program_info][model_info] += score; } } + } - for (ScoreSet::iterator assignee_iterator = sums.begin(); - assignee_iterator != sums.end(); - ++assignee_iterator) { - LabelInfo* program_info = assignee_iterator->first; - for (LabelToScore::iterator p = assignee_iterator->second.begin(); - p != assignee_iterator->second.end(); - ++p) { - LabelInfo* model_info = p->first; - int score = p->second; - int* slot = &maxima[program_info][model_info]; - *slot = std::max(*slot, score); - } + for (ScoreSet::iterator assignee_iterator = sums.begin(); + assignee_iterator != sums.end(); + ++assignee_iterator) { + LabelInfo* program_info = assignee_iterator->first; + for (LabelToScore::iterator p = assignee_iterator->second.begin(); + p != assignee_iterator->second.end(); + ++p) { + LabelInfo* model_info = p->first; + int score = p->second; + int* slot = &maxima[program_info][model_info]; + *slot = std::max(*slot, score); } } } |