From 2031bfce7f8e9e89072995e79169265c6a184547 Mon Sep 17 00:00:00 2001 From: Chris Jang Date: Tue, 21 Sep 2010 19:01:25 -0700 Subject: [PATCH] stop infinite EM loop during expectation when no kernels exist --- benchMatmul.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/benchMatmul.cpp b/benchMatmul.cpp index 3144269..fb56ebd 100644 --- a/benchMatmul.cpp +++ b/benchMatmul.cpp @@ -536,6 +536,7 @@ int main(int argc, char *argv[]) // using EM size_t bestGroupSize, bestBlockHeight, bestExtraParam = 0; int bestIndex = -1; + int loopCount = 0; // stop infinite loop if there are no good kernels vector< vector > pargs; bool foundMax = false; while (! foundMax) { @@ -590,6 +591,12 @@ int main(int argc, char *argv[]) // expectation lower bound could not be found for given value of extra parameter // so try another one bestExtraParam = (bestExtraParam + 1) % kernel.totalVariations(); + // infinite loop case if there are no kernels at all + if (kernel.totalVariations() == loopCount++) { + cerr << "error: no good kernels found so giving up" << endl + << "***DONE***" << endl; + exit(1); + } continue; } else { // if this happens during maximization, then just give up @@ -599,6 +606,8 @@ int main(int argc, char *argv[]) << "***DONE***" << endl; exit(1); } + } else { + loopCount = 0; } kernel.setParams(pargs[bestIndex]);