corrected style, updated version

This commit is contained in:
ALEXks
2025-12-24 08:58:28 +03:00
parent 1c39001e28
commit a8f8f44ac1
9 changed files with 76 additions and 80 deletions

View File

@@ -1123,7 +1123,7 @@ static bool hasDependenciesBetweenArrays(LoopGraph* firstLoop, LoopGraph* loop,
for (int d = 0; d < dimensions; ++d)
{
//по измерениям массива отображение на цикл вложенности d
vector<set<pair<int, int>>> coefsRead[2], coefsWrite[2];
vector<set<pair<int, int>>> coeffsRead[2], coeffsWrite[2];
checkNull(currLoop[0], convertFileName(__FILE__).c_str(), __LINE__);
checkNull(currLoop[1], convertFileName(__FILE__).c_str(), __LINE__);
@@ -1133,31 +1133,31 @@ static bool hasDependenciesBetweenArrays(LoopGraph* firstLoop, LoopGraph* loop,
auto it = currLoop[k]->readOpsForLoop.find(array);
if (it != currLoop[k]->readOpsForLoop.end())
{
if (coefsRead[k].size() == 0)
coefsRead[k].resize(it->second.size());
if (coeffsRead[k].size() == 0)
coeffsRead[k].resize(it->second.size());
for (int z = 0; z < it->second.size(); ++z)
if (it->second[z].coefficients.size())
for (auto& coef : it->second[z].coefficients)
coefsRead[k][z].insert(coef.first);
coeffsRead[k][z].insert(coef.first);
}
auto itW = currLoop[k]->writeOpsForLoop.find(array);
if (itW != currLoop[k]->writeOpsForLoop.end())
{
if (coefsWrite[k].size() == 0)
coefsWrite[k].resize(itW->second.size());
if (coeffsWrite[k].size() == 0)
coeffsWrite[k].resize(itW->second.size());
for (int z = 0; z < itW->second.size(); ++z)
if (itW->second[z].coefficients.size())
for (auto& coef : itW->second[z].coefficients)
coefsWrite[k][z].insert(coef.first);
coeffsWrite[k][z].insert(coef.first);
}
}
//нет записей, значит нет зависимости
bool nulWrite = true;
for (auto& wr : coefsWrite)
for (auto& wr : coeffsWrite)
for (auto& elem : wr)
if (elem.size() != 0)
nulWrite = false;
@@ -1168,62 +1168,62 @@ static bool hasDependenciesBetweenArrays(LoopGraph* firstLoop, LoopGraph* loop,
// если чтение в одном цикле и запись (и наоборот) в другом идут по разным правилам, то пока что это зависимость.
// здесь можно уточнить.
const int len = std::max(coefsWrite[0].size(), coefsRead[0].size());
const int len = std::max(coeffsWrite[0].size(), coeffsRead[0].size());
int countW[2] = { 0, 0 };
int countR[2] = { 0, 0 };
for (int L = 0; L < 2; ++L)
for (int z = 0; z < coefsWrite[L].size(); ++z)
countW[L] += (coefsWrite[L][z].size() ? 1 : 0);
for (int z = 0; z < coeffsWrite[L].size(); ++z)
countW[L] += (coeffsWrite[L][z].size() ? 1 : 0);
for (int L = 0; L < 2; ++L)
for (int z = 0; z < coefsRead[L].size(); ++z)
countR[L] += (coefsRead[L][z].size() ? 1 : 0);
for (int z = 0; z < coeffsRead[L].size(); ++z)
countR[L] += (coeffsRead[L][z].size() ? 1 : 0);
for (int p = 0; p < len; ++p)
{
if (coefsWrite[1].size() && coefsWrite[0].size())
if (coefsWrite[0][p].size() != 0 && coefsWrite[1][p].size() != 0)
if (coefsWrite[0][p] != coefsWrite[1][p])
if (coeffsWrite[1].size() && coeffsWrite[0].size())
if (coeffsWrite[0][p].size() != 0 && coeffsWrite[1][p].size() != 0)
if (coeffsWrite[0][p] != coeffsWrite[1][p])
return true;
if (coefsRead[1].size() && coefsWrite[0].size())
if (coefsWrite[0][p].size() != 0 && coefsRead[1][p].size() != 0)
if (coefsWrite[0][p] != coefsRead[1][p])
if (coeffsRead[1].size() && coeffsWrite[0].size())
if (coeffsWrite[0][p].size() != 0 && coeffsRead[1][p].size() != 0)
if (coeffsWrite[0][p] != coeffsRead[1][p])
return true;
if (coefsWrite[1].size() && coefsRead[0].size())
if (coefsWrite[1][p].size() != 0 && coefsRead[0][p].size() != 0)
if (coefsWrite[1][p] != coefsRead[0][p])
if (coeffsWrite[1].size() && coeffsRead[0].size())
if (coeffsWrite[1][p].size() != 0 && coeffsRead[0][p].size() != 0)
if (coeffsWrite[1][p] != coeffsRead[0][p])
return true;
//отображение на разные измерения
if (coefsWrite[1].size() && coefsWrite[0].size())
if (coeffsWrite[1].size() && coeffsWrite[0].size())
{
if (coefsWrite[0][p].size() != 0 && coefsWrite[1][p].size() == 0 && countW[1] ||
coefsWrite[0][p].size() == 0 && coefsWrite[1][p].size() != 0 && countW[0])
if (coeffsWrite[0][p].size() != 0 && coeffsWrite[1][p].size() == 0 && countW[1] ||
coeffsWrite[0][p].size() == 0 && coeffsWrite[1][p].size() != 0 && countW[0])
return true;
}
if (coefsRead[1].size() && coefsWrite[0].size())
if (coeffsRead[1].size() && coeffsWrite[0].size())
{
if (coefsWrite[0][p].size() != 0 && coefsRead[1][p].size() == 0 && countR[1] ||
coefsWrite[0][p].size() == 0 && coefsRead[1][p].size() != 0 && countW[0])
if (coeffsWrite[0][p].size() != 0 && coeffsRead[1][p].size() == 0 && countR[1] ||
coeffsWrite[0][p].size() == 0 && coeffsRead[1][p].size() != 0 && countW[0])
return true;
}
if (coefsWrite[1].size() && coefsRead[1].size())
if (coeffsWrite[1].size() && coeffsRead[1].size())
{
if (coefsWrite[1][p].size() != 0 && coefsRead[0][p].size() == 0 && countR[0] ||
coefsWrite[1][p].size() == 0 && coefsRead[0][p].size() != 0 && countW[1])
if (coeffsWrite[1][p].size() != 0 && coeffsRead[0][p].size() == 0 && countR[0] ||
coeffsWrite[1][p].size() == 0 && coeffsRead[0][p].size() != 0 && countW[1])
return true;
}
//где то нет правил отображения вообще, но есть факт его наличия.
if ( ((coefsWrite[0].size() == 0 && coefsRead[0].size() == 0) && (countW[0] == 0 && countR[0] == 0))
if ( ((coeffsWrite[0].size() == 0 && coeffsRead[0].size() == 0) && (countW[0] == 0 && countR[0] == 0))
||
((coefsWrite[1].size() == 0 && coefsRead[1].size() == 0) && (countW[1] == 0 && countR[1] == 0)) )
((coeffsWrite[1].size() == 0 && coeffsRead[1].size() == 0) && (countW[1] == 0 && countR[1] == 0)) )
return true;
}