fixed distribution, fixed routine, fixed null program unparsing
This commit is contained in:
@@ -29,6 +29,8 @@ using std::make_pair;
|
||||
using std::min;
|
||||
using std::max;
|
||||
|
||||
extern map<tuple<int, string, string>, pair<DIST::Array*, DIST::ArrayAccessInfo*>> declaredArrays;
|
||||
|
||||
static bool findArrayRefAndCheck(SgExpression *ex, const DIST::Array* currArray, const vector<map<pair<int, int>, int>> &shiftsByAccess)
|
||||
{
|
||||
bool res = false;
|
||||
@@ -748,13 +750,31 @@ ParallelDirective::genDirective(File* file, const vector<pair<DIST::Array*, cons
|
||||
{
|
||||
const int i1 = ordered[k];
|
||||
vector<map<pair<int, int>, int>> shiftsByAccess;
|
||||
DIST::Array* currArray = NULL;
|
||||
DIST::Array* acrossArray = NULL;
|
||||
|
||||
if (!sharedMemoryParallelization)
|
||||
{
|
||||
currArray = allArrays.GetArrayByName(across[i1].first.second);
|
||||
if (currArray == NULL)
|
||||
acrossArray = allArrays.GetArrayByName(across[i1].first.second);
|
||||
if (acrossArray == NULL)
|
||||
{
|
||||
//TODO: need to fix SageDep analysis or use IR
|
||||
bool notPrivate = true;
|
||||
for (auto& arrayPair : declaredArrays)
|
||||
{
|
||||
auto array = arrayPair.second.first;
|
||||
if (array->GetName() == across[i1].first.second)
|
||||
{
|
||||
if (array->IsNotDistribute())
|
||||
notPrivate = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (notPrivate)
|
||||
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
||||
else
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -763,11 +783,12 @@ ParallelDirective::genDirective(File* file, const vector<pair<DIST::Array*, cons
|
||||
if (currArray_it == arrayByName.end())
|
||||
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
||||
|
||||
currArray = currArray_it->second;
|
||||
acrossArray = currArray_it->second;
|
||||
}
|
||||
|
||||
bool isOut = acrossOutAttribute.find(currArray) != acrossOutAttribute.end();
|
||||
string bounds = genBounds(across[i1], acrossShifts[i1], reducedG, allArrays, currArray, remoteReads, readOps, true, regionId, distribution, arraysInAcross, shiftsByAccess, arrayLinksByFuncCalls);
|
||||
bool isOut = acrossOutAttribute.find(acrossArray) != acrossOutAttribute.end();
|
||||
string bounds = genBounds(across[i1], acrossShifts[i1], reducedG, allArrays, acrossArray, remoteReads, readOps, true, regionId, distribution, arraysInAcross, shiftsByAccess, arrayLinksByFuncCalls);
|
||||
|
||||
if (bounds != "")
|
||||
{
|
||||
if (inserted != 0)
|
||||
@@ -808,8 +829,8 @@ ParallelDirective::genDirective(File* file, const vector<pair<DIST::Array*, cons
|
||||
|
||||
acrossAdd += across[i1].first.first + "(" + bounds + ")";
|
||||
|
||||
SgArrayRefExp* newArrayRef = new SgArrayRefExp(*getFromModule(byUseInFunc, currArray->GetDeclSymbol(filename, lineRange, allFiles)->GetOriginal()));
|
||||
newArrayRef->addAttribute(ARRAY_REF, currArray, sizeof(DIST::Array));
|
||||
SgArrayRefExp* newArrayRef = new SgArrayRefExp(*getFromModule(byUseInFunc, acrossArray->GetDeclSymbol(filename, lineRange, allFiles)->GetOriginal()));
|
||||
newArrayRef->addAttribute(ARRAY_REF, acrossArray, sizeof(DIST::Array));
|
||||
|
||||
for (auto& elem : genSubscripts(across[i1].second, acrossShifts[i1]))
|
||||
newArrayRef->addSubscript(*elem);
|
||||
@@ -857,10 +878,14 @@ ParallelDirective::genDirective(File* file, const vector<pair<DIST::Array*, cons
|
||||
const int i1 = ordered[k];
|
||||
vector<map<pair<int, int>, int>> shiftsByAccess;
|
||||
DIST::Array* shadowArray = allArrays.GetArrayByName(shadowRenew[i1].first.second);
|
||||
if (shadowArray == NULL)
|
||||
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
||||
|
||||
const string bounds = genBounds(shadowRenew[i1], shadowRenewShifts[i1], reducedG, allArrays, shadowArray, remoteReads, readOps, false, regionId, distribution, arraysInAcross, shiftsByAccess, arrayLinksByFuncCalls);
|
||||
|
||||
if (bounds != "")
|
||||
{
|
||||
DIST::Array* currArray = allArrays.GetArrayByName(shadowRenew[i1].first.second);
|
||||
DIST::Array* shadowArray = allArrays.GetArrayByName(shadowRenew[i1].first.second);
|
||||
|
||||
if (inserted != 0)
|
||||
{
|
||||
@@ -880,13 +905,13 @@ ParallelDirective::genDirective(File* file, const vector<pair<DIST::Array*, cons
|
||||
}
|
||||
|
||||
shadowAdd += shadowRenew[i1].first.first + "(" + bounds + ")";
|
||||
SgArrayRefExp* newArrayRef = new SgArrayRefExp(*getFromModule(byUseInFunc, currArray->GetDeclSymbol(filename, lineRange, allFiles)));
|
||||
newArrayRef->addAttribute(ARRAY_REF, currArray, sizeof(DIST::Array));
|
||||
SgArrayRefExp* newArrayRef = new SgArrayRefExp(*getFromModule(byUseInFunc, shadowArray->GetDeclSymbol(filename, lineRange, allFiles)));
|
||||
newArrayRef->addAttribute(ARRAY_REF, shadowArray, sizeof(DIST::Array));
|
||||
|
||||
for (auto& elem : genSubscripts(shadowRenew[i1].second, shadowRenewShifts[i1]))
|
||||
newArrayRef->addSubscript(*elem);
|
||||
|
||||
if (shadowRenew[i1].second.size() > 1 && needCorner(currArray, shiftsByAccess, loop))
|
||||
if (shadowRenew[i1].second.size() > 1 && needCorner(shadowArray, shiftsByAccess, loop))
|
||||
{
|
||||
SgExpression* tmp = new SgExpression(ARRAY_OP, newArrayRef, NULL, NULL);
|
||||
p->setLhs(*tmp);
|
||||
|
||||
@@ -1295,14 +1295,17 @@ void DvmhRegionInserter::createInterfaceBlockForParallelFunctions(bool onlyRouti
|
||||
|
||||
for (auto& callTo : parF->callsTo)
|
||||
{
|
||||
if (callTo->fileName != parF->fileName && isPure(parF->funcPointer->GetOriginal()))
|
||||
{
|
||||
if (onlyRoutine)
|
||||
if (!isPure(parF->funcPointer->GetOriginal()))
|
||||
continue;
|
||||
|
||||
if (callTo->fileName != parF->fileName && onlyRoutine)
|
||||
{
|
||||
insertRoutine(parF->funcPointer->GetOriginal(), parF, inLoops, arrayLinksByFuncCalls);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (callTo->fileName != parF->fileName || isPure(callTo->funcPointer->GetOriginal()))
|
||||
{
|
||||
auto it = callTo->interfaceBlocks.find(parF->funcName);
|
||||
if (it == callTo->interfaceBlocks.end())
|
||||
{
|
||||
|
||||
@@ -656,13 +656,27 @@ string removeIncludeStatsAndUnparse(SgFile *file, const char *fileName, const ch
|
||||
}
|
||||
}
|
||||
|
||||
//check for empty
|
||||
string comm = "";
|
||||
if (file->firstStatement()->comments())
|
||||
{
|
||||
comm = file->firstStatement()->comments();
|
||||
file->firstStatement()->delComments();
|
||||
}
|
||||
const string tmp = file->firstStatement()->unparse();
|
||||
bool isEmpty = (tmp.size() == 0);
|
||||
if (comm.size())
|
||||
file->firstStatement()->addComment(comm.c_str());
|
||||
|
||||
string strUnparse = "";
|
||||
if (toString)
|
||||
{
|
||||
if (!isEmpty)
|
||||
strUnparse = string(file->firstStatement()->unparse());
|
||||
}
|
||||
else
|
||||
{
|
||||
const string tmp = file->firstStatement()->unparse();
|
||||
if (tmp.size() > 0)
|
||||
if (!isEmpty)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
FILE* fOut;
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
#define VERSION_SPF "2383"
|
||||
#define VERSION_SPF "2384"
|
||||
|
||||
Reference in New Issue
Block a user