Fix the bug for MEL when adding a recurrent loop.

This commit is contained in:
yzhang87 2015-01-19 16:30:25 -05:00
Родитель 43ea68b59e
Коммит 0879cfef56
2 изменённых файлов: 18 добавлений и 0 удалений

Просмотреть файл

@ -1843,6 +1843,13 @@ namespace Microsoft { namespace MSR { namespace CNTK {
void ClearCalcOrderCaches()
{
for (std::map<const ComputationNodePtr, std::list<ComputationNodePtr>>::iterator it = m_cacheEvalOrders.begin(); it != m_cacheEvalOrders.end(); ++it)
{
for (auto iter2 = m_cacheEvalOrders[it->first].begin(); iter2 != m_cacheEvalOrders[it->first].end(); iter2++)
{
(*iter2)->clearCache();
}
}
m_cacheEvalOrders.clear();
m_cacheGradientCalcOrders.clear();
}
@ -2043,6 +2050,7 @@ namespace Microsoft { namespace MSR { namespace CNTK {
void FormRecurentLoops(const ComputationNodePtr rootNode)
{
std::vector<ComputationNodePtr> sourceLoopNodes;
getStrongSCC(rootNode);
std::list<ComputationNodePtr>& nodes = GetEvalOrder(rootNode, sourceLoopNodes);
std::list<ComputationNodePtr> nodesForGrad;

Просмотреть файл

@ -237,6 +237,16 @@ namespace Microsoft { namespace MSR { namespace CNTK {
m_indexInLoop = index;
}
void clearCache()
{
m_loopId = -1;
m_visitedOrder = -1;
m_index = -1;
m_lowlink = -1;
m_indexInLoop = 0;
m_visited = false;
m_inStack = false;
}
size_t GetIndex()
{
return m_index;