libpredict_integration: add smart search by processes_per_processor
This commit is contained in:
@@ -383,8 +383,10 @@ void runPredictScheme(SgProject& project,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<size_t> best;
|
vector<size_t> bestTopology;
|
||||||
double bestTime = std::numeric_limits<double>::max();
|
double bestTime = std::numeric_limits<double>::max();
|
||||||
|
size_t bestProcessesPerProcessor = 0;
|
||||||
|
int prevProcCount = -1;
|
||||||
|
|
||||||
for (size_t processes_per_processor = 1; processes_per_processor <= maxCoresCount; ++processes_per_processor) {
|
for (size_t processes_per_processor = 1; processes_per_processor <= maxCoresCount; ++processes_per_processor) {
|
||||||
int procCount = 0;
|
int procCount = 0;
|
||||||
@@ -406,6 +408,11 @@ void runPredictScheme(SgProject& project,
|
|||||||
break; // No more processors available
|
break; // No more processors available
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (procCount == prevProcCount) {
|
||||||
|
continue; // Skip with procCount value unchanged for different processes_per_processor
|
||||||
|
}
|
||||||
|
|
||||||
|
prevProcCount = procCount;
|
||||||
__spf_print(1, "Calculate with processes_per_processor=%zu, procCount=%d\n", processes_per_processor, procCount);
|
__spf_print(1, "Calculate with processes_per_processor=%zu, procCount=%d\n", processes_per_processor, procCount);
|
||||||
|
|
||||||
for (size_t n1 = 2; n1 <= procCount; ++n1) {
|
for (size_t n1 = 2; n1 <= procCount; ++n1) {
|
||||||
@@ -439,7 +446,8 @@ void runPredictScheme(SgProject& project,
|
|||||||
|
|
||||||
if (currTime < bestTime) {
|
if (currTime < bestTime) {
|
||||||
bestTime = currTime;
|
bestTime = currTime;
|
||||||
best = topology;
|
bestTopology = topology;
|
||||||
|
bestProcessesPerProcessor = processes_per_processor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -447,13 +455,14 @@ void runPredictScheme(SgProject& project,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!best.empty()) {
|
if (!bestTopology.empty()) {
|
||||||
string outStr;
|
string outStr;
|
||||||
for (const auto& elem : best) {
|
for (const auto& elem : bestTopology) {
|
||||||
outStr += std::to_string(elem) + " ";
|
outStr += std::to_string(elem) + " ";
|
||||||
}
|
}
|
||||||
|
|
||||||
__spf_print(1, "best topology %s with time %f\n", outStr.c_str(), bestTime);
|
__spf_print(1, "best topology %s with time %f (processes_per_processor=%zu)\n",
|
||||||
|
outStr.c_str(), bestTime, bestProcessesPerProcessor);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
__spf_print(1, "impossible to calculate best topology: project does not contain distribution directives\n");
|
__spf_print(1, "impossible to calculate best topology: project does not contain distribution directives\n");
|
||||||
|
|||||||
Reference in New Issue
Block a user