corrected style, updated version
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user