diff --git a/sapfor/experts/Sapfor_2017/_src/LoopAnalyzer/loop_analyzer.cpp b/sapfor/experts/Sapfor_2017/_src/LoopAnalyzer/loop_analyzer.cpp index 393f234..b899c9b 100644 --- a/sapfor/experts/Sapfor_2017/_src/LoopAnalyzer/loop_analyzer.cpp +++ b/sapfor/experts/Sapfor_2017/_src/LoopAnalyzer/loop_analyzer.cpp @@ -598,7 +598,7 @@ static void findArrayRef(const vector &parentLoops, SgExpression *cu } else { - if (currRegime == DATA_DISTR && side == LEFT) + if ((currRegime == DATA_DISTR || currRegime == SHARED_MEMORY_PAR) && side == LEFT) { auto symb = OriginalSymbol(currExp->symbol()); SgStatement *decl = declaratedInStmt(symb); @@ -1609,8 +1609,9 @@ void loopAnalyzer(SgFile *file, vector ®ions, mapsymbol()->identifier()] = modules[i]; map> privatesByModule; - for (int i = 0; i < modules.size(); ++i) - privatesByModule[modules[i]->symbol()->identifier()] = getPrivatesFromModule(modules[i], declaredArrays, declaratedArraysSt, modulesByName); + if(!sharedMemoryParallelization) + for (int i = 0; i < modules.size(); ++i) + privatesByModule[modules[i]->symbol()->identifier()] = getPrivatesFromModule(modules[i], declaredArrays, declaratedArraysSt, modulesByName); map funcByName; createMapOfFunc(AllfuncInfo, funcByName); @@ -1674,13 +1675,17 @@ void loopAnalyzer(SgFile *file, vector ®ions, mapvariant() != GLOBAL) + if(!sharedMemoryParallelization) { - tmpModFind = tmpModFind->controlParent(); - if (tmpModFind->variant() == MODULE_STMT) - fillFromModule(tmpModFind->symbol(), privatesByModule, privatesVars); + SgStatement* tmpModFind = st; + while (tmpModFind->variant() != GLOBAL) + { + tmpModFind = tmpModFind->controlParent(); + if (tmpModFind->variant() == MODULE_STMT) + fillFromModule(tmpModFind->symbol(), privatesByModule, privatesVars); + } } + commonBlocks.clear(); getCommonBlocksRef(commonBlocks, st, st->lastNodeOfStmt()); __spf_print(PRINT_PROF_INFO, " number of common blocks %d\n", (int)commonBlocks.size()); @@ -1727,7 +1732,8 @@ void loopAnalyzer(SgFile *file, vector ®ions, mapexpr(i), delcsSymbViewed, delcsStatViewed, declaredArrays, declaratedArraysSt, privatesVars); @@ -1735,9 +1741,12 @@ void loopAnalyzer(SgFile *file, vector ®ions, mapvariant(); if (currV == FOR_NODE) { - tryToFindPrivateInAttributes(st, privatesVars); - fillNonDistrArraysAsPrivate(st, declaredArrays, declaratedArraysSt, privatesVars); - + if(!sharedMemoryParallelization) + { + tryToFindPrivateInAttributes(st, privatesVars); + fillNonDistrArraysAsPrivate(st, declaredArrays, declaratedArraysSt, privatesVars); + } + set toAdd; tryToFindPrivateInAttributes(st, toAdd); @@ -1783,9 +1792,10 @@ void loopAnalyzer(SgFile *file, vector ®ions, map setDiff; - for (auto &privVars : privatesVars) - if (unitedPrivates.find(privVars) == unitedPrivates.end()) - setDiff.insert(privVars); + if(!sharedMemoryParallelization) + for (auto &privVars : privatesVars) + if (unitedPrivates.find(privVars) == unitedPrivates.end()) + setDiff.insert(privVars); allLoops[contrlParent->lineNumber()] = make_pair((SgForStmt*)contrlParent, make_pair(unitedPrivates, setDiff)); parentLoops.pop_back(); diff --git a/sapfor/experts/Sapfor_2017/_src/LoopAnalyzer/loop_analyzer.h b/sapfor/experts/Sapfor_2017/_src/LoopAnalyzer/loop_analyzer.h index 8fd2db9..70ffa60 100644 --- a/sapfor/experts/Sapfor_2017/_src/LoopAnalyzer/loop_analyzer.h +++ b/sapfor/experts/Sapfor_2017/_src/LoopAnalyzer/loop_analyzer.h @@ -17,7 +17,7 @@ typedef std::pair, std::pair> attrType; namespace DIST = Distribution; -enum REGIME { DATA_DISTR, COMP_DISTR, REMOTE_ACC, ARRAY_ACC_CORNER, UNDEF }; +enum REGIME { DATA_DISTR, COMP_DISTR, REMOTE_ACC, ARRAY_ACC_CORNER, SHARED_MEMORY_PAR, UNDEF }; // loop_analyzer.cpp bool checkExistence(SgExpression *exp, const std::string& doName);