fixed and improved SAPFOR and FDVM
This commit is contained in:
@@ -12668,6 +12668,7 @@ int DistrArrayAssign(SgStatement *stmt)
|
|||||||
return(1);
|
return(1);
|
||||||
left_whole = !le->lhs();
|
left_whole = !le->lhs();
|
||||||
right_whole = !re->lhs();
|
right_whole = !re->lhs();
|
||||||
|
CANCEL_RTS2_MODE; // switch to basic RTS interface
|
||||||
ChangeDistArrayRef(le->lhs()); //replacing dvm-array references in subscript list
|
ChangeDistArrayRef(le->lhs()); //replacing dvm-array references in subscript list
|
||||||
ChangeDistArrayRef(re->lhs());
|
ChangeDistArrayRef(re->lhs());
|
||||||
LINE_NUMBER_BEFORE(stmt,stmt);
|
LINE_NUMBER_BEFORE(stmt,stmt);
|
||||||
@@ -12710,12 +12711,14 @@ int DistrArrayAssign(SgStatement *stmt)
|
|||||||
if(dvm_ind)
|
if(dvm_ind)
|
||||||
doCallAfter(DeleteObject_H(DVM000(dvm_ind)));
|
doCallAfter(DeleteObject_H(DVM000(dvm_ind)));
|
||||||
SET_DVM(to_init);
|
SET_DVM(to_init);
|
||||||
|
RESUMPTION_RTS2_MODE; // return to RTS2 interface
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// assignment statement of kind: <dvm_array_section> = <scalar_expression>
|
// assignment statement of kind: <dvm_array_section> = <scalar_expression>
|
||||||
if(only_debug)
|
if(only_debug)
|
||||||
return(1);
|
return(1);
|
||||||
|
CANCEL_RTS2_MODE; // switch to basic RTS interface
|
||||||
if(INTERFACE_RTS2 && !isWholeArray(stmt->expr(0)))
|
if(INTERFACE_RTS2 && !isWholeArray(stmt->expr(0)))
|
||||||
err("Illegal array statement in -Opl2 mode", 642, stmt);
|
err("Illegal array statement in -Opl2 mode", 642, stmt);
|
||||||
|
|
||||||
@@ -12735,6 +12738,7 @@ int DistrArrayAssign(SgStatement *stmt)
|
|||||||
else
|
else
|
||||||
doAssignStmtAfter(ArrayCopy(headr, to_init, to_init, to_init, headl, to_init, to_init+rl, to_init+2*rl, -1));
|
doAssignStmtAfter(ArrayCopy(headr, to_init, to_init, to_init, headl, to_init, to_init+rl, to_init+2*rl, -1));
|
||||||
SET_DVM(to_init);
|
SET_DVM(to_init);
|
||||||
|
RESUMPTION_RTS2_MODE; // return to RTS2 interface
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -12753,6 +12757,7 @@ int AssignDistrArray(SgStatement *stmt)
|
|||||||
// assignment statement of kind: <array_section> = <dvm_array_section>
|
// assignment statement of kind: <array_section> = <dvm_array_section>
|
||||||
if(only_debug)
|
if(only_debug)
|
||||||
return(1);
|
return(1);
|
||||||
|
CANCEL_RTS2_MODE; // switch to basic RTS interface
|
||||||
left_whole = !le->lhs();
|
left_whole = !le->lhs();
|
||||||
right_whole = !re->lhs();
|
right_whole = !re->lhs();
|
||||||
|
|
||||||
@@ -12781,8 +12786,10 @@ int AssignDistrArray(SgStatement *stmt)
|
|||||||
typer = ar->type()->baseType();
|
typer = ar->type()->baseType();
|
||||||
rr = Rank(ar);
|
rr = Rank(ar);
|
||||||
headr = HeaderRef(ar);
|
headr = HeaderRef(ar);
|
||||||
if(!headr) // if there is error of dvm-array specification, header is not created
|
if(!headr) { // if there is error of dvm-array specification, header is not created
|
||||||
|
RESUMPTION_RTS2_MODE; // return to RTS2 interface
|
||||||
return(0);
|
return(0);
|
||||||
|
}
|
||||||
if(!CompareTypes(typel,typer))
|
if(!CompareTypes(typel,typer))
|
||||||
err("Different types of left and right side",620,stmt);
|
err("Different types of left and right side",620,stmt);
|
||||||
|
|
||||||
@@ -12801,6 +12808,7 @@ int AssignDistrArray(SgStatement *stmt)
|
|||||||
doCallAfter(DeleteObject_H(DVM000(dvm_ind)));
|
doCallAfter(DeleteObject_H(DVM000(dvm_ind)));
|
||||||
|
|
||||||
SET_DVM(dvm_ind ? dvm_ind : to_init) ; //SET_DVM(to_init);
|
SET_DVM(dvm_ind ? dvm_ind : to_init) ; //SET_DVM(to_init);
|
||||||
|
RESUMPTION_RTS2_MODE; // return to RTS2 interface
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -415,6 +415,8 @@ const int Logical_8 = 12;
|
|||||||
#define HEDR(A) ((A)->thesymb->entry.Template.func_hedr)
|
#define HEDR(A) ((A)->thesymb->entry.Template.func_hedr)
|
||||||
#define FILE_LAST_STATEMENT(ST) ((SgStatement **)(ST)->attributeValue(0,LAST_STATEMENT))
|
#define FILE_LAST_STATEMENT(ST) ((SgStatement **)(ST)->attributeValue(0,LAST_STATEMENT))
|
||||||
#define CALLED_FUNCTIONS(ST) ((symb_list **)(ST)->attributeValue(0,RTC_CALLS))
|
#define CALLED_FUNCTIONS(ST) ((symb_list **)(ST)->attributeValue(0,RTC_CALLS))
|
||||||
|
#define INTERFACE_RTS2 (parloop_by_handler == 2)
|
||||||
|
#define CANCEL_RTS2_MODE if(parloop_by_handler == 2) parloop_by_handler = -1
|
||||||
#define RESUMPTION_RTS2_MODE if(parloop_by_handler == -1) parloop_by_handler = 2
|
#define RESUMPTION_RTS2_MODE if(parloop_by_handler == -1) parloop_by_handler = 2
|
||||||
#define HEADER_FOR_HANDLER(A) ( (SgSymbol **)(A)->attributeValue(0,HANDLER_HEADER) )
|
#define HEADER_FOR_HANDLER(A) ( (SgSymbol **)(A)->attributeValue(0,HANDLER_HEADER) )
|
||||||
#define USE_STATEMENTS_ARE_REQUIRED ( (int *) first_do_par->attributeValue(0,MODULE_USE) )
|
#define USE_STATEMENTS_ARE_REQUIRED ( (int *) first_do_par->attributeValue(0,MODULE_USE) )
|
||||||
|
|||||||
@@ -382,7 +382,17 @@ ArraySet DvmhRegionInserter::excludeRemotes(const ArraySet& block, SgStatement*
|
|||||||
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
||||||
|
|
||||||
SgStatement* next = remoteDir->lexNext();
|
SgStatement* next = remoteDir->lexNext();
|
||||||
const string leftS = next->variant() == ASSIGN_STAT ? OriginalSymbol(next->expr(0)->symbol())->identifier() : "";
|
const string leftS = "";
|
||||||
|
|
||||||
|
//TODO: record ref!
|
||||||
|
if (next->variant() == ASSIGN_STAT)
|
||||||
|
{
|
||||||
|
auto ex = next->expr(0);
|
||||||
|
if (ex->variant() == ARRAY_REF)
|
||||||
|
OriginalSymbol(ex->symbol())->identifier();
|
||||||
|
else if (ex->variant() == RECORD_REF && ex->rhs()->variant() == ARRAY_REF)
|
||||||
|
OriginalSymbol(ex->rhs()->symbol())->identifier();
|
||||||
|
}
|
||||||
|
|
||||||
set<DIST::Array*> raArrays;
|
set<DIST::Array*> raArrays;
|
||||||
|
|
||||||
|
|||||||
@@ -2666,7 +2666,7 @@ static void findArrayRefs(SgExpression *ex, SgStatement *st, string fName, int p
|
|||||||
const vector<string> &inRegion,
|
const vector<string> &inRegion,
|
||||||
const set<string> &funcParNames,
|
const set<string> &funcParNames,
|
||||||
map<SgStatement*, set<string>>& ompThreadPrivate,
|
map<SgStatement*, set<string>>& ompThreadPrivate,
|
||||||
const map<string, int>& keyValueFromGUI,
|
const map<string, int>& distrStateFromGUI,
|
||||||
const bool saveAllLocals,
|
const bool saveAllLocals,
|
||||||
map<string, vector<Messages>>& currMessages,
|
map<string, vector<Messages>>& currMessages,
|
||||||
int& errorCount)
|
int& errorCount)
|
||||||
@@ -2852,8 +2852,8 @@ static void findArrayRefs(SgExpression *ex, SgStatement *st, string fName, int p
|
|||||||
itNew->second.first->SetDistributeFlag(DIST::SPF_PRIV);
|
itNew->second.first->SetDistributeFlag(DIST::SPF_PRIV);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto it = keyValueFromGUI.find(itNew->second.first->GetIndepUniqName());
|
auto it = distrStateFromGUI.find(itNew->second.first->GetIndepUniqName());
|
||||||
if (it != keyValueFromGUI.end())
|
if (it != distrStateFromGUI.end())
|
||||||
{
|
{
|
||||||
if (it->second != oldVal)
|
if (it->second != oldVal)
|
||||||
{
|
{
|
||||||
@@ -2910,7 +2910,7 @@ static void findArrayRefs(SgExpression *ex, SgStatement *st, string fName, int p
|
|||||||
//assume all arguments of function as OUT, except for inctrinsics
|
//assume all arguments of function as OUT, except for inctrinsics
|
||||||
bool isWriteN = intr ? false : true;
|
bool isWriteN = intr ? false : true;
|
||||||
//need to correct W/R usage with GraphCall map later
|
//need to correct W/R usage with GraphCall map later
|
||||||
findArrayRefs(funcExp->arg(z), st, fName, z, isWriteN, commonBlocks, declaredArrays, declaratedArraysSt, privates, deprecatedByIO, isExecutable, currFunctionName, inRegion, funcParNames, ompThreadPrivate, keyValueFromGUI, saveAllLocals, currMessages, errorCount);
|
findArrayRefs(funcExp->arg(z), st, fName, z, isWriteN, commonBlocks, declaredArrays, declaratedArraysSt, privates, deprecatedByIO, isExecutable, currFunctionName, inRegion, funcParNames, ompThreadPrivate, distrStateFromGUI, saveAllLocals, currMessages, errorCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -2920,8 +2920,8 @@ static void findArrayRefs(SgExpression *ex, SgStatement *st, string fName, int p
|
|||||||
queue.push(findInfo("", ex->lhs(), -1, isWriteN));
|
queue.push(findInfo("", ex->lhs(), -1, isWriteN));
|
||||||
if (ex->rhs())
|
if (ex->rhs())
|
||||||
queue.push(findInfo("", ex->rhs(), -1, isWriteN));
|
queue.push(findInfo("", ex->rhs(), -1, isWriteN));
|
||||||
//findArrayRefs(ex->lhs(), st, "", -1, isWriteN, commonBlocks, declaredArrays, declaratedArraysSt, privates, deprecatedByIO, isExecutable, currFunctionName, inRegion, funcParNames, ompThreadPrivate, keyValueFromGUI, saveAllLocals, currMessages, errorCount);
|
//findArrayRefs(ex->lhs(), st, "", -1, isWriteN, commonBlocks, declaredArrays, declaratedArraysSt, privates, deprecatedByIO, isExecutable, currFunctionName, inRegion, funcParNames, ompThreadPrivate, distrStateFromGUI, saveAllLocals, currMessages, errorCount);
|
||||||
//findArrayRefs(ex->rhs(), st, "", -1, isWriteN, commonBlocks, declaredArrays, declaratedArraysSt, privates, deprecatedByIO, isExecutable, currFunctionName, inRegion, funcParNames, ompThreadPrivate, keyValueFromGUI, saveAllLocals, currMessages, errorCount);
|
//findArrayRefs(ex->rhs(), st, "", -1, isWriteN, commonBlocks, declaredArrays, declaratedArraysSt, privates, deprecatedByIO, isExecutable, currFunctionName, inRegion, funcParNames, ompThreadPrivate, distrStateFromGUI, saveAllLocals, currMessages, errorCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3036,7 +3036,7 @@ static void addPrivates(SgStatement *st, set<string>& privates, map<string, set<
|
|||||||
|
|
||||||
int getAllDeclaredArrays(SgFile *file, map<tuple<int, string, string>, pair<DIST::Array*, DIST::ArrayAccessInfo*>> &declaredArrays,
|
int getAllDeclaredArrays(SgFile *file, map<tuple<int, string, string>, pair<DIST::Array*, DIST::ArrayAccessInfo*>> &declaredArrays,
|
||||||
map<SgStatement*, set<tuple<int, string, string>>> &declaratedArraysSt, map<string, vector<Messages>> &currMessages,
|
map<SgStatement*, set<tuple<int, string, string>>> &declaratedArraysSt, map<string, vector<Messages>> &currMessages,
|
||||||
const vector<ParallelRegion*> ®ions, const map<string, int>& keyValueFromGUI)
|
const vector<ParallelRegion*> ®ions, const map<string, int>& distrStateFromGUI)
|
||||||
{
|
{
|
||||||
int countErrors = 0;
|
int countErrors = 0;
|
||||||
|
|
||||||
@@ -3243,7 +3243,7 @@ int getAllDeclaredArrays(SgFile *file, map<tuple<int, string, string>, pair<DIST
|
|||||||
findArrayRefs(funcExp->arg(z), st, fName, z, true,
|
findArrayRefs(funcExp->arg(z), st, fName, z, true,
|
||||||
commonBlocks, declaredArrays, declaratedArraysSt, privates, deprecatedByIO,
|
commonBlocks, declaredArrays, declaratedArraysSt, privates, deprecatedByIO,
|
||||||
isSgExecutableStatement(st) ? true : false, currFunctionName,
|
isSgExecutableStatement(st) ? true : false, currFunctionName,
|
||||||
regNames, funcParNames, ompThreadPrivate, keyValueFromGUI, saveAllLocals,
|
regNames, funcParNames, ompThreadPrivate, distrStateFromGUI, saveAllLocals,
|
||||||
currMessages, countErrors);
|
currMessages, countErrors);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3253,7 +3253,7 @@ int getAllDeclaredArrays(SgFile *file, map<tuple<int, string, string>, pair<DIST
|
|||||||
findArrayRefs(st->expr(i), st, "", -1, (st->variant() == ASSIGN_STAT && i == 0) ? true : false,
|
findArrayRefs(st->expr(i), st, "", -1, (st->variant() == ASSIGN_STAT && i == 0) ? true : false,
|
||||||
commonBlocks, declaredArrays, declaratedArraysSt, privates, deprecatedByIO,
|
commonBlocks, declaredArrays, declaratedArraysSt, privates, deprecatedByIO,
|
||||||
isSgExecutableStatement(st) ? true : false, currFunctionName,
|
isSgExecutableStatement(st) ? true : false, currFunctionName,
|
||||||
regNames, funcParNames, ompThreadPrivate, keyValueFromGUI, saveAllLocals,
|
regNames, funcParNames, ompThreadPrivate, distrStateFromGUI, saveAllLocals,
|
||||||
currMessages, countErrors);
|
currMessages, countErrors);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3290,7 +3290,7 @@ int getAllDeclaredArrays(SgFile *file, map<tuple<int, string, string>, pair<DIST
|
|||||||
|
|
||||||
for (int i = 0; i < 3; ++i)
|
for (int i = 0; i < 3; ++i)
|
||||||
findArrayRefs(st->expr(i), st, "", -1, false, commonBlocks, declaredArrays, declaratedArraysSt, privates, deprecatedByIO,
|
findArrayRefs(st->expr(i), st, "", -1, false, commonBlocks, declaredArrays, declaratedArraysSt, privates, deprecatedByIO,
|
||||||
false, "NULL", regNames, funcParNames, ompThreadPrivate, keyValueFromGUI, false,
|
false, "NULL", regNames, funcParNames, ompThreadPrivate, distrStateFromGUI, false,
|
||||||
currMessages, countErrors);
|
currMessages, countErrors);
|
||||||
}
|
}
|
||||||
st = st->lexNext();
|
st = st->lexNext();
|
||||||
@@ -3328,7 +3328,7 @@ int getAllDeclaredArrays(SgFile *file, map<tuple<int, string, string>, pair<DIST
|
|||||||
|
|
||||||
for (int i = 0; i < 3; ++i)
|
for (int i = 0; i < 3; ++i)
|
||||||
findArrayRefs(curr->expr(i), curr, "", -1, false, commonBlocks, declaredArrays, declaratedArraysSt, privates, deprecatedByIO,
|
findArrayRefs(curr->expr(i), curr, "", -1, false, commonBlocks, declaredArrays, declaratedArraysSt, privates, deprecatedByIO,
|
||||||
false, blockName, regNames, funcParNames, ompThreadPrivate, keyValueFromGUI, false,
|
false, blockName, regNames, funcParNames, ompThreadPrivate, distrStateFromGUI, false,
|
||||||
currMessages, countErrors);
|
currMessages, countErrors);
|
||||||
curr = curr->lexNext();
|
curr = curr->lexNext();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ std::string getShortName(const std::tuple<int, std::string, std::string> &uniqKe
|
|||||||
|
|
||||||
int getAllDeclaredArrays(SgFile *file, std::map<std::tuple<int, std::string, std::string>, std::pair<DIST::Array*, DIST::ArrayAccessInfo*>> &declaredArrays,
|
int getAllDeclaredArrays(SgFile *file, std::map<std::tuple<int, std::string, std::string>, std::pair<DIST::Array*, DIST::ArrayAccessInfo*>> &declaredArrays,
|
||||||
std::map<SgStatement*, std::set<std::tuple<int, std::string, std::string>>> &declaratedArraysSt, std::map<std::string, std::vector<Messages>> &currMessages,
|
std::map<SgStatement*, std::set<std::tuple<int, std::string, std::string>>> &declaratedArraysSt, std::map<std::string, std::vector<Messages>> &currMessages,
|
||||||
const std::vector<ParallelRegion*> ®ions, const std::map<std::string, int>& keyValueFromGUI);
|
const std::vector<ParallelRegion*> ®ions, const std::map<std::string, int>& distrStateFromGUI);
|
||||||
void insertSpfAnalysisBeforeParalleLoops(const std::vector<LoopGraph*> &loops);
|
void insertSpfAnalysisBeforeParalleLoops(const std::vector<LoopGraph*> &loops);
|
||||||
void recalculateArraySizes(std::set<DIST::Array*> &arraysDone, const std::set<DIST::Array*> &allArrays, const std::map<DIST::Array*, std::set<DIST::Array*>> &arrayLinksByFuncCalls, const std::map<std::string, std::vector<FuncInfo*>>& allFuncInfo);
|
void recalculateArraySizes(std::set<DIST::Array*> &arraysDone, const std::set<DIST::Array*> &allArrays, const std::map<DIST::Array*, std::set<DIST::Array*>> &arrayLinksByFuncCalls, const std::map<std::string, std::vector<FuncInfo*>>& allFuncInfo);
|
||||||
int getSizeOfType(SgType* t);
|
int getSizeOfType(SgType* t);
|
||||||
|
|||||||
@@ -943,7 +943,7 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne
|
|||||||
}
|
}
|
||||||
else if (curr_regime == GET_ALL_ARRAY_DECL)
|
else if (curr_regime == GET_ALL_ARRAY_DECL)
|
||||||
{
|
{
|
||||||
int err = getAllDeclaredArrays(file, declaredArrays, declaratedArraysSt, SPF_messages, subs_parallelRegions, keyValueFromGUI);
|
int err = getAllDeclaredArrays(file, declaredArrays, declaratedArraysSt, SPF_messages, subs_parallelRegions, distrStateFromGUI);
|
||||||
if (err != 0)
|
if (err != 0)
|
||||||
internalExit = -1;
|
internalExit = -1;
|
||||||
}
|
}
|
||||||
@@ -1167,6 +1167,8 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne
|
|||||||
getMaxMinBlockDistribution(file, min_max_block);
|
getMaxMinBlockDistribution(file, min_max_block);
|
||||||
else if (curr_regime == CONVERT_TO_C)
|
else if (curr_regime == CONVERT_TO_C)
|
||||||
covertToC(file);
|
covertToC(file);
|
||||||
|
else if (curr_regime == INSERT_NO_DISTR_FLAGS_FROM_GUI)
|
||||||
|
addPrivatesToArraysFromGUI(file, declaredArrays, distrStateFromGUI);
|
||||||
else if (curr_regime == TEST_PASS)
|
else if (curr_regime == TEST_PASS)
|
||||||
{
|
{
|
||||||
//test pass
|
//test pass
|
||||||
@@ -2485,6 +2487,7 @@ void runPass(const int curr_regime, const char *proj_name, const char *folderNam
|
|||||||
case PURE_INTENT_INSERT:
|
case PURE_INTENT_INSERT:
|
||||||
case REMOVE_OMP_DIRS_TRANSFORM:
|
case REMOVE_OMP_DIRS_TRANSFORM:
|
||||||
case REMOVE_COMMENTS:
|
case REMOVE_COMMENTS:
|
||||||
|
case INSERT_NO_DISTR_FLAGS_FROM_GUI:
|
||||||
runAnalysis(*project, curr_regime, true, "", folderName);
|
runAnalysis(*project, curr_regime, true, "", folderName);
|
||||||
break;
|
break;
|
||||||
case PRIVATE_REMOVING:
|
case PRIVATE_REMOVING:
|
||||||
|
|||||||
@@ -172,6 +172,7 @@ enum passes {
|
|||||||
REMOVE_COMMENTS,
|
REMOVE_COMMENTS,
|
||||||
GET_MIN_MAX_BLOCK_DIST,
|
GET_MIN_MAX_BLOCK_DIST,
|
||||||
CONVERT_TO_C,
|
CONVERT_TO_C,
|
||||||
|
INSERT_NO_DISTR_FLAGS_FROM_GUI,
|
||||||
|
|
||||||
TEST_PASS,
|
TEST_PASS,
|
||||||
EMPTY_PASS
|
EMPTY_PASS
|
||||||
@@ -349,6 +350,7 @@ static void setPassValues()
|
|||||||
passNames[REMOVE_COMMENTS] = "REMOVE_COMMENTS";
|
passNames[REMOVE_COMMENTS] = "REMOVE_COMMENTS";
|
||||||
passNames[GET_MIN_MAX_BLOCK_DIST] = "GET_MIN_MAX_BLOCK_DIST";
|
passNames[GET_MIN_MAX_BLOCK_DIST] = "GET_MIN_MAX_BLOCK_DIST";
|
||||||
passNames[CONVERT_TO_C] = "CONVERT_TO_C";
|
passNames[CONVERT_TO_C] = "CONVERT_TO_C";
|
||||||
|
passNames[INSERT_NO_DISTR_FLAGS_FROM_GUI] = "INSERT_NO_DISTR_FLAGS_FROM_GUI";
|
||||||
|
|
||||||
passNames[TEST_PASS] = "TEST_PASS";
|
passNames[TEST_PASS] = "TEST_PASS";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ std::pair<std::string, int> inOnlyForloopOnPlace;
|
|||||||
//
|
//
|
||||||
|
|
||||||
//cache for declaration arrays state switching
|
//cache for declaration arrays state switching
|
||||||
std::map<std::string, int> keyValueFromGUI;
|
std::map<std::string, int> distrStateFromGUI;
|
||||||
//
|
//
|
||||||
|
|
||||||
//for PROCESS_IO
|
//for PROCESS_IO
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ static SgType* createArrayCharType(int len, int dim)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void findDecls(SgExpression* ex, vector<SgExpression*>& local, const map<string, SgStatement*>& localParams,
|
static void findDecls(SgExpression* ex, vector<SgExpression*>& local, const map<string, SgStatement*>& localParams,
|
||||||
set<string>& added, set<string>& IntentInParams)
|
set<string>& added, set<string>& intentInParams)
|
||||||
{
|
{
|
||||||
if (ex)
|
if (ex)
|
||||||
{
|
{
|
||||||
@@ -48,7 +48,7 @@ static void findDecls(SgExpression* ex, vector<SgExpression*>& local, const map<
|
|||||||
localParams.find(ex->symbol()->identifier()) == localParams.end())
|
localParams.find(ex->symbol()->identifier()) == localParams.end())
|
||||||
{
|
{
|
||||||
if (added.find(ex->symbol()->identifier()) == added.end() &&
|
if (added.find(ex->symbol()->identifier()) == added.end() &&
|
||||||
IntentInadded.find(ex->symbol()->identifier()) == IntentInadded.end())
|
intentInParams.find(ex->symbol()->identifier()) == intentInParams.end())
|
||||||
{
|
{
|
||||||
added.insert(ex->symbol()->identifier());
|
added.insert(ex->symbol()->identifier());
|
||||||
local.push_back(ex);
|
local.push_back(ex);
|
||||||
@@ -60,15 +60,15 @@ static void findDecls(SgExpression* ex, vector<SgExpression*>& local, const map<
|
|||||||
{
|
{
|
||||||
if (ex->symbol()->variant() == VARIABLE_NAME &&
|
if (ex->symbol()->variant() == VARIABLE_NAME &&
|
||||||
added.find(ex->symbol()->identifier()) == added.end() &&
|
added.find(ex->symbol()->identifier()) == added.end() &&
|
||||||
IntentInadded.find(ex->symbol()->identifier()) == IntentInadded.end())
|
intentInParams.find(ex->symbol()->identifier()) == intentInParams.end())
|
||||||
{
|
{
|
||||||
added.insert(ex->symbol()->identifier());
|
added.insert(ex->symbol()->identifier());
|
||||||
local.push_back(new SgArrayRefExp(*ex->symbol()));
|
local.push_back(new SgArrayRefExp(*ex->symbol()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
findDecls(ex->lhs(), local, localParams, added, IntentInParams);
|
findDecls(ex->lhs(), local, localParams, added, intentInParams);
|
||||||
findDecls(ex->rhs(), local, localParams, added, IntentInParams);
|
findDecls(ex->rhs(), local, localParams, added, intentInParams);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,10 +90,10 @@ static void findLocalData(SgStatement* func, SgStatement* end, vector<SgExpressi
|
|||||||
SgStatement* start = func->lexNext();
|
SgStatement* start = func->lexNext();
|
||||||
|
|
||||||
FuncInfo* funcI = findFileInfoByName(func, allFuncInfo);
|
FuncInfo* funcI = findFileInfoByName(func, allFuncInfo);
|
||||||
set<string> IntentInParams;
|
set<string> intentInParams;
|
||||||
for (int i = 0; i < funcI->funcParams.countOfPars; ++i)
|
for (int i = 0; i < funcI->funcParams.countOfPars; ++i)
|
||||||
if (funcI->funcParams.isArgIn(i) && !funcI->funcParams.isArgOut(i))
|
if (funcI->funcParams.isArgIn(i) && !funcI->funcParams.isArgOut(i))
|
||||||
IntentInParams.insert(funcI->funcParams.identificators[i]);
|
intentInParams.insert(funcI->funcParams.identificators[i]);
|
||||||
|
|
||||||
for (SgStatement* st = start; st != end; st = st->lexNext())
|
for (SgStatement* st = start; st != end; st = st->lexNext())
|
||||||
{
|
{
|
||||||
@@ -114,7 +114,7 @@ static void findLocalData(SgStatement* func, SgStatement* end, vector<SgExpressi
|
|||||||
{
|
{
|
||||||
//printf("line %d %s Var %s\n", st->lineNumber(), st->fileName(), tag[st->variant()]);
|
//printf("line %d %s Var %s\n", st->lineNumber(), st->fileName(), tag[st->variant()]);
|
||||||
if (st->variant() == VAR_DECL || st->variant() == VAR_DECL_90)
|
if (st->variant() == VAR_DECL || st->variant() == VAR_DECL_90)
|
||||||
findDecls(st->expr(0), local, localParams, added, IntentInParams);
|
findDecls(st->expr(0), local, localParams, added, intentInParams);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ void InitPassesDependencies(map<passes, vector<passes>> &passDepsIn, set<passes>
|
|||||||
|
|
||||||
Pass(RESTORE_LOOP_FROM_ASSIGN) <= list({ SUBST_EXPR_AND_UNPARSE, SUBST_EXPR_RD_AND_UNPARSE });
|
Pass(RESTORE_LOOP_FROM_ASSIGN) <= list({ SUBST_EXPR_AND_UNPARSE, SUBST_EXPR_RD_AND_UNPARSE });
|
||||||
|
|
||||||
Pass(GET_ALL_ARRAY_DECL) <= Pass(CALL_GRAPH_IR);
|
Pass(GET_ALL_ARRAY_DECL) <= list({ CALL_GRAPH_IR, INSERT_NO_DISTR_FLAGS_FROM_GUI });
|
||||||
|
|
||||||
Pass(LOOP_GRAPH) <= Pass(PRIVATE_CALL_GRAPH_STAGE3) <= list(FIND_FUNC_TO_INCLUDE, PRIVATE_ANALYSIS_IR) <= list({ LOOP_ANALYZER_DATA_DIST_S0, LOOP_ANALYZER_DATA_DIST_S1, ONLY_ARRAY_GRAPH, LOOP_ANALYZER_ALIGNS });
|
Pass(LOOP_GRAPH) <= Pass(PRIVATE_CALL_GRAPH_STAGE3) <= list(FIND_FUNC_TO_INCLUDE, PRIVATE_ANALYSIS_IR) <= list({ LOOP_ANALYZER_DATA_DIST_S0, LOOP_ANALYZER_DATA_DIST_S1, ONLY_ARRAY_GRAPH, LOOP_ANALYZER_ALIGNS });
|
||||||
|
|
||||||
|
|||||||
@@ -4396,6 +4396,7 @@ void removeSpecialCommentsFromProject(SgFile* file)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: for gen_block and other variations, and redistributions dirs
|
||||||
void getMaxMinBlockDistribution(SgFile* file, pair<int, int>& min_max)
|
void getMaxMinBlockDistribution(SgFile* file, pair<int, int>& min_max)
|
||||||
{
|
{
|
||||||
SgStatement* st = file->firstStatement();
|
SgStatement* st = file->firstStatement();
|
||||||
@@ -4445,3 +4446,40 @@ void getMaxMinBlockDistribution(SgFile* file, pair<int, int>& min_max)
|
|||||||
st = st->lexNext();
|
st = st->lexNext();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void addPrivatesToArraysFromGUI(SgFile* file, const map<tuple<int, string, string>, pair<DIST::Array*, DIST::ArrayAccessInfo*>>& declaredArrays,
|
||||||
|
const map<string, int>& distrStateFromGUI)
|
||||||
|
{
|
||||||
|
map<SgStatement*, set<string>> added;
|
||||||
|
|
||||||
|
for (auto& arrayPair : declaredArrays)
|
||||||
|
{
|
||||||
|
DIST::Array* array = arrayPair.second.first;
|
||||||
|
string key = array->GetIndepUniqName();
|
||||||
|
auto it = distrStateFromGUI.find(key);
|
||||||
|
if (it == distrStateFromGUI.end())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (it->second != DIST::NO_DISTR)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for (auto& decl : array->GetDeclInfoWithSymb())
|
||||||
|
{
|
||||||
|
auto& place = decl.first;
|
||||||
|
const auto& symb = decl.second->GetOriginal();
|
||||||
|
|
||||||
|
if (place.first != file->filename())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
SgStatement* declSt = SgStatement::getStatementByFileAndLine(place.first, place.second);
|
||||||
|
checkNull(declSt, convertFileName(__FILE__).c_str(), __LINE__);
|
||||||
|
|
||||||
|
string toAdd = "!$SPF ANALYSIS(PRIVATE(" + string(symb->identifier()) + "))\n";
|
||||||
|
added[declSt].insert(toAdd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto& toInsert : added)
|
||||||
|
for (auto& elem : toInsert.second)
|
||||||
|
toInsert.first->addComment(elem.c_str());
|
||||||
|
}
|
||||||
@@ -110,3 +110,5 @@ void LogIftoIfThen(SgStatement* stmt);
|
|||||||
void removeSpecialCommentsFromProject(SgFile* file);
|
void removeSpecialCommentsFromProject(SgFile* file);
|
||||||
|
|
||||||
void getMaxMinBlockDistribution(SgFile* file, std::pair<int, int>& min_max);
|
void getMaxMinBlockDistribution(SgFile* file, std::pair<int, int>& min_max);
|
||||||
|
|
||||||
|
void addPrivatesToArraysFromGUI(SgFile* file, const std::map<std::tuple<int, std::string, std::string>, std::pair<DIST::Array*, DIST::ArrayAccessInfo*>>& declaredArrays, const std::map<std::string, int>& distrStateFromGUI);
|
||||||
@@ -1404,7 +1404,6 @@ pair<vector<string>, vector<string>> splitCommandLineForParse(char** argv, int a
|
|||||||
for (int z = 0; z < argc; ++z)
|
for (int z = 0; z < argc; ++z)
|
||||||
{
|
{
|
||||||
string arg = argv[z];
|
string arg = argv[z];
|
||||||
|
|
||||||
string ext = OnlyExt(arg.c_str());
|
string ext = OnlyExt(arg.c_str());
|
||||||
convertToLower(ext);
|
convertToLower(ext);
|
||||||
if (arg.find("*") != string::npos || checkFormat(ext, ""))
|
if (arg.find("*") != string::npos || checkFormat(ext, ""))
|
||||||
@@ -1423,11 +1422,11 @@ pair<vector<string>, vector<string>> splitCommandLineForParse(char** argv, int a
|
|||||||
{
|
{
|
||||||
auto cmp_ext = file.extension().string();
|
auto cmp_ext = file.extension().string();
|
||||||
convertToLower(cmp_ext);
|
convertToLower(cmp_ext);
|
||||||
|
if (cmp_ext.size() && cmp_ext[0] == '.')
|
||||||
|
cmp_ext.erase(cmp_ext.begin());
|
||||||
|
|
||||||
if (checkFormat(cmp_ext, arg))
|
if (checkFormat(cmp_ext, ext))
|
||||||
files.insert(file.filename().string());
|
files.insert(file.filename().string());
|
||||||
else
|
|
||||||
printf(" skip file %s\n", arg.c_str());
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define VERSION_SPF "2258"
|
#define VERSION_SPF "2262"
|
||||||
|
|||||||
@@ -1560,7 +1560,7 @@ int SPF_GetFileLineInfo(void*& context, int winHandler, short *options, short *p
|
|||||||
return retSize;
|
return retSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern map<string, int> keyValueFromGUI;
|
extern map<string, int> distrStateFromGUI;
|
||||||
int SPF_SetDistributionFlagToArray(void*& context, char *key, int flag)
|
int SPF_SetDistributionFlagToArray(void*& context, char *key, int flag)
|
||||||
{
|
{
|
||||||
MessageManager::clearCache();
|
MessageManager::clearCache();
|
||||||
@@ -1589,7 +1589,7 @@ int SPF_SetDistributionFlagToArray(void*& context, char *key, int flag)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
keyValueFromGUI[keyStr] = flag;
|
distrStateFromGUI[keyStr] = flag;
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
@@ -1654,7 +1654,7 @@ int SPF_SetDistributionFlagToArrays(void*& context, const char* keys, const char
|
|||||||
int flagI = -1;
|
int flagI = -1;
|
||||||
if (sscanf(flagsS[z].c_str(), "%d", &flagI) == -1)
|
if (sscanf(flagsS[z].c_str(), "%d", &flagI) == -1)
|
||||||
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
||||||
keyValueFromGUI[keysS[z]] = flagI;
|
distrStateFromGUI[keysS[z]] = flagI;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1887,6 +1887,14 @@ int SPF_SharedMemoryParallelization(void*& context, int winHandler, short* optio
|
|||||||
return simpleTransformPass(INSERT_PARALLEL_DIRS_NODIST, options, projName, folderName, output, outputSize, outputMessage, outputMessageSize);
|
return simpleTransformPass(INSERT_PARALLEL_DIRS_NODIST, options, projName, folderName, output, outputSize, outputMessage, outputMessageSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int SPF_InsertPrivateFromGUI(void*& context, int winHandler, short* options, short* projName, short* folderName, short*& output,
|
||||||
|
int*& outputSize, short*& outputMessage, int*& outputMessageSize)
|
||||||
|
{
|
||||||
|
MessageManager::clearCache();
|
||||||
|
MessageManager::setWinHandler(winHandler);
|
||||||
|
return simpleTransformPass(INSERT_NO_DISTR_FLAGS_FROM_GUI, options, projName, folderName, output, outputSize, outputMessage, outputMessageSize);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void convertBackSlash(char *str, int strL)
|
static inline void convertBackSlash(char *str, int strL)
|
||||||
{
|
{
|
||||||
for (int z = 0; z < strL; ++z)
|
for (int z = 0; z < strL; ++z)
|
||||||
@@ -2597,6 +2605,8 @@ const wstring Sapfor_RunTransformation(const char* transformName_c, const char*
|
|||||||
retCode = SPF_ResolveCommonBlockConflicts(context, winHandler, optSh, projSh, fold, output, outputSize, outputMessage, outputMessageSize);
|
retCode = SPF_ResolveCommonBlockConflicts(context, winHandler, optSh, projSh, fold, output, outputSize, outputMessage, outputMessageSize);
|
||||||
else if (whichRun == "SPF_SharedMemoryParallelization")
|
else if (whichRun == "SPF_SharedMemoryParallelization")
|
||||||
retCode = SPF_SharedMemoryParallelization(context, winHandler, optSh, projSh, fold, output, outputSize, outputMessage, outputMessageSize);
|
retCode = SPF_SharedMemoryParallelization(context, winHandler, optSh, projSh, fold, output, outputSize, outputMessage, outputMessageSize);
|
||||||
|
else if (whichRun == "SPF_InsertPrivateFromGUI")
|
||||||
|
retCode = SPF_InsertPrivateFromGUI(context, winHandler, optSh, projSh, fold, output, outputSize, outputMessage, outputMessageSize);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (showDebug)
|
if (showDebug)
|
||||||
|
|||||||
Reference in New Issue
Block a user