shared memory parallelization: add notification message
This commit is contained in:
@@ -105,6 +105,7 @@ static void preventLoopsFromParallelizations(LoopGraph* loop, const set<DIST::Ar
|
|||||||
__spf_printToLongBuf(bufR, R202, to_wstring(array_ref).c_str());
|
__spf_printToLongBuf(bufR, R202, to_wstring(array_ref).c_str());
|
||||||
|
|
||||||
messagesForFile.push_back(Messages(WARR, loop->lineNum, bufR, bufE, 3023));
|
messagesForFile.push_back(Messages(WARR, loop->lineNum, bufR, bufE, 3023));
|
||||||
|
loop->hasAccessToSubArray = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ public:
|
|||||||
inDvmhRegion = 0;
|
inDvmhRegion = 0;
|
||||||
isFor = false;
|
isFor = false;
|
||||||
inCanonicalFrom = false;
|
inCanonicalFrom = false;
|
||||||
|
hasAccessToSubArray = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
~LoopGraph()
|
~LoopGraph()
|
||||||
@@ -111,7 +112,7 @@ public:
|
|||||||
{
|
{
|
||||||
return hasUnknownArrayDep || hasUnknownScalarDep || hasGoto || hasPrints || (hasConflicts.size() != 0) || hasStops || hasNonPureProcedures ||
|
return hasUnknownArrayDep || hasUnknownScalarDep || hasGoto || hasPrints || (hasConflicts.size() != 0) || hasStops || hasNonPureProcedures ||
|
||||||
hasUnknownArrayAssigns || hasNonRectangularBounds || hasIndirectAccess || hasWritesToNonDistribute || hasDifferentAlignRules || hasDvmIntervals ||
|
hasUnknownArrayAssigns || hasNonRectangularBounds || hasIndirectAccess || hasWritesToNonDistribute || hasDifferentAlignRules || hasDvmIntervals ||
|
||||||
!isFor || lastprivateScalars.size();
|
!isFor || lastprivateScalars.size() || hasAccessToSubArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasLimitsToSplit() const
|
bool hasLimitsToSplit() const
|
||||||
@@ -171,6 +172,9 @@ public:
|
|||||||
|
|
||||||
if (lastprivateScalars.size())
|
if (lastprivateScalars.size())
|
||||||
messages->push_back(Messages(NOTE, line, R199, L"lastprivate scalar dependency prevents parallelization of this loop", 3006));
|
messages->push_back(Messages(NOTE, line, R199, L"lastprivate scalar dependency prevents parallelization of this loop", 3006));
|
||||||
|
|
||||||
|
if(hasAccessToSubArray)
|
||||||
|
messages->push_back(Messages(NOTE, line, R204, L"Arrays' memory intersections prevents this loop from parallelization", 3024));
|
||||||
}
|
}
|
||||||
|
|
||||||
void setNewRedistributeRules(const std::vector<std::pair<DIST::Array*, DistrVariant*>> &newRedistributeRules)
|
void setNewRedistributeRules(const std::vector<std::pair<DIST::Array*, DistrVariant*>> &newRedistributeRules)
|
||||||
@@ -443,6 +447,8 @@ public:
|
|||||||
bool isFor;
|
bool isFor;
|
||||||
|
|
||||||
bool inCanonicalFrom;
|
bool inCanonicalFrom;
|
||||||
|
// make sense only for NODIST regime
|
||||||
|
bool hasAccessToSubArray;
|
||||||
|
|
||||||
std::vector<LoopGraph*> children;
|
std::vector<LoopGraph*> children;
|
||||||
std::vector<LoopGraph*> funcChildren;
|
std::vector<LoopGraph*> funcChildren;
|
||||||
|
|||||||
@@ -127,6 +127,7 @@ enum typeMessage { WARR, ERROR, NOTE };
|
|||||||
// 21 "empty parallel regions is forbidden"
|
// 21 "empty parallel regions is forbidden"
|
||||||
// 22 "Can not find align rules"
|
// 22 "Can not find align rules"
|
||||||
// 23 "Array reference '%s' has a different size from the original array"
|
// 23 "Array reference '%s' has a different size from the original array"
|
||||||
|
// 24 "Arrays' memory intersections prevents this loop from parallelization"
|
||||||
|
|
||||||
// 40xx LOW LEVEL WARNINGS
|
// 40xx LOW LEVEL WARNINGS
|
||||||
// 01
|
// 01
|
||||||
@@ -275,7 +276,7 @@ static void printStackTrace() { };
|
|||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
// Свободный - R204
|
// Свободный - R205
|
||||||
// Гайд по русификации сообщений: При добавлении нового сообщения, меняется последний сводобный идентификатор.
|
// Гайд по русификации сообщений: При добавлении нового сообщения, меняется последний сводобный идентификатор.
|
||||||
// В этом файле остаются только спецификаторы, для которых будет заполнен текст. Полный текст пишется в файле
|
// В этом файле остаются только спецификаторы, для которых будет заполнен текст. Полный текст пишется в файле
|
||||||
// russian_errors_text.txt. Спецификаторы там тоже сохраняются, по ним в визуализаторе будет восстановлен
|
// russian_errors_text.txt. Спецификаторы там тоже сохраняются, по ним в визуализаторе будет восстановлен
|
||||||
@@ -603,6 +604,8 @@ static const wchar_t *R151 = L"R151:";
|
|||||||
static const wchar_t *R171 = L"R171:%s";
|
static const wchar_t *R171 = L"R171:%s";
|
||||||
//3023
|
//3023
|
||||||
static const wchar_t *R202 = L"R202:%s";
|
static const wchar_t *R202 = L"R202:%s";
|
||||||
|
//3024
|
||||||
|
static const wchar_t* R204 = L"R204:";
|
||||||
|
|
||||||
//4001
|
//4001
|
||||||
//---TODO ошибки из SAGE
|
//---TODO ошибки из SAGE
|
||||||
|
|||||||
@@ -314,6 +314,8 @@ R151 = "Пустые области распараллеливания недо
|
|||||||
R171 = "Невозможно определить правила выравнивания для массива '%s'."
|
R171 = "Невозможно определить правила выравнивания для массива '%s'."
|
||||||
//3023
|
//3023
|
||||||
R202 = "Ссылка '%s' имеет отличный от оригинального массива размер"
|
R202 = "Ссылка '%s' имеет отличный от оригинального массива размер"
|
||||||
|
//3024
|
||||||
|
R204 = "Пересечения памяти массивов препятствуют распараллеливанию цикла"
|
||||||
|
|
||||||
//4001
|
//4001
|
||||||
//---TODO ошибки из SAGE
|
//---TODO ошибки из SAGE
|
||||||
|
|||||||
Reference in New Issue
Block a user