From 072b587e905678d1aeeaeeb43b8573570e42614a Mon Sep 17 00:00:00 2001 From: Mikhail Kocharmin Date: Sat, 13 Apr 2024 13:29:57 +0300 Subject: [PATCH] shared memory parallelization: add notification message --- .../Sapfor_2017/_src/GraphCall/select_array_conf.cpp | 1 + sapfor/experts/Sapfor_2017/_src/GraphLoop/graph_loops.h | 8 +++++++- sapfor/experts/Sapfor_2017/_src/Utils/errors.h | 5 ++++- .../Sapfor_2017/_src/Utils/russian_errors_text.txt | 2 ++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/sapfor/experts/Sapfor_2017/_src/GraphCall/select_array_conf.cpp b/sapfor/experts/Sapfor_2017/_src/GraphCall/select_array_conf.cpp index 3e11f6b..f4f50e2 100644 --- a/sapfor/experts/Sapfor_2017/_src/GraphCall/select_array_conf.cpp +++ b/sapfor/experts/Sapfor_2017/_src/GraphCall/select_array_conf.cpp @@ -105,6 +105,7 @@ static void preventLoopsFromParallelizations(LoopGraph* loop, const setlineNum, bufR, bufE, 3023)); + loop->hasAccessToSubArray = true; } } } diff --git a/sapfor/experts/Sapfor_2017/_src/GraphLoop/graph_loops.h b/sapfor/experts/Sapfor_2017/_src/GraphLoop/graph_loops.h index d483eda..a6fb74c 100644 --- a/sapfor/experts/Sapfor_2017/_src/GraphLoop/graph_loops.h +++ b/sapfor/experts/Sapfor_2017/_src/GraphLoop/graph_loops.h @@ -72,6 +72,7 @@ public: inDvmhRegion = 0; isFor = false; inCanonicalFrom = false; + hasAccessToSubArray = false; } ~LoopGraph() @@ -111,7 +112,7 @@ public: { return hasUnknownArrayDep || hasUnknownScalarDep || hasGoto || hasPrints || (hasConflicts.size() != 0) || hasStops || hasNonPureProcedures || hasUnknownArrayAssigns || hasNonRectangularBounds || hasIndirectAccess || hasWritesToNonDistribute || hasDifferentAlignRules || hasDvmIntervals || - !isFor || lastprivateScalars.size(); + !isFor || lastprivateScalars.size() || hasAccessToSubArray; } bool hasLimitsToSplit() const @@ -171,6 +172,9 @@ public: if (lastprivateScalars.size()) 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> &newRedistributeRules) @@ -443,6 +447,8 @@ public: bool isFor; bool inCanonicalFrom; + // make sense only for NODIST regime + bool hasAccessToSubArray; std::vector children; std::vector funcChildren; diff --git a/sapfor/experts/Sapfor_2017/_src/Utils/errors.h b/sapfor/experts/Sapfor_2017/_src/Utils/errors.h index dbc94b2..e123e97 100644 --- a/sapfor/experts/Sapfor_2017/_src/Utils/errors.h +++ b/sapfor/experts/Sapfor_2017/_src/Utils/errors.h @@ -127,6 +127,7 @@ enum typeMessage { WARR, ERROR, NOTE }; // 21 "empty parallel regions is forbidden" // 22 "Can not find align rules" // 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 // 01 @@ -275,7 +276,7 @@ static void printStackTrace() { }; } \ } while (0) -// Свободный - R204 +// Свободный - R205 // Гайд по русификации сообщений: При добавлении нового сообщения, меняется последний сводобный идентификатор. // В этом файле остаются только спецификаторы, для которых будет заполнен текст. Полный текст пишется в файле // russian_errors_text.txt. Спецификаторы там тоже сохраняются, по ним в визуализаторе будет восстановлен @@ -603,6 +604,8 @@ static const wchar_t *R151 = L"R151:"; static const wchar_t *R171 = L"R171:%s"; //3023 static const wchar_t *R202 = L"R202:%s"; +//3024 +static const wchar_t* R204 = L"R204:"; //4001 //---TODO ошибки из SAGE diff --git a/sapfor/experts/Sapfor_2017/_src/Utils/russian_errors_text.txt b/sapfor/experts/Sapfor_2017/_src/Utils/russian_errors_text.txt index f44d671..8286bdd 100644 --- a/sapfor/experts/Sapfor_2017/_src/Utils/russian_errors_text.txt +++ b/sapfor/experts/Sapfor_2017/_src/Utils/russian_errors_text.txt @@ -314,6 +314,8 @@ R151 = "Пустые области распараллеливания недо R171 = "Невозможно определить правила выравнивания для массива '%s'." //3023 R202 = "Ссылка '%s' имеет отличный от оригинального массива размер" +//3024 +R204 = "Пересечения памяти массивов препятствуют распараллеливанию цикла" //4001 //---TODO ошибки из SAGE