Merge branch 'master' of https://github.com/Microsoft/CNTK into amitaga/gradAggStateResetFix
This commit is contained in:
Коммит
9c65189d32
|
@ -112,7 +112,7 @@ TIMIT*.statelist text
|
|||
TIMIT*.tfsa text
|
||||
TIMIT*.transitions text
|
||||
|
||||
Examples/Text/ATIS/data/ATIS.* text
|
||||
Examples/Text/ATIS/Data/ATIS.* text
|
||||
|
||||
Examples/SequenceToSequence/CMUDict/Data/cmudict-0.7b* text
|
||||
|
||||
|
|
|
@ -7,9 +7,9 @@
|
|||
#
|
||||
# This program reads the TimitSubjectList.txt file, which is included in the
|
||||
# demo distribution. It then creates three files:
|
||||
# HCopyTimit.scp - script that converts MFCC to audio features
|
||||
# CntkTimit.scp - list of files that are read by CNTK for training
|
||||
# CntkTimitOutput.scp - list of output files for CNTK (likelhihood scores)
|
||||
# HCopyTimit.scp - script that converts MFCC to audio features
|
||||
# CntkTimit.scp - list of files that are read by CNTK for training
|
||||
# CntkTimitOutput.scp - list of output files for CNTK (likelhihood scores)
|
||||
# All these files can be edited by hand if you don't want to run this python
|
||||
# script.
|
||||
|
||||
|
@ -18,16 +18,16 @@ import os, sys
|
|||
# Set up the base directory name. This will be prepended to each file name
|
||||
# so hcopy knows where to find the wave files.
|
||||
if len(sys.argv) > 1:
|
||||
baseDir = sys.argv[1]
|
||||
if os.path.isdir(baseDir) == False:
|
||||
print "Can't find TIMIT base directory: " + baseDir
|
||||
sys.exit(1)
|
||||
baseDir = sys.argv[1]
|
||||
if os.path.isdir(baseDir) == False:
|
||||
print "Can't find TIMIT base directory: " + baseDir
|
||||
sys.exit(1)
|
||||
else:
|
||||
print "Syntax: " + sys.argv[0] + " TIMIT_base_directory_path"
|
||||
sys.exit(1)
|
||||
print "Syntax: " + sys.argv[0] + " TIMIT_base_directory_path"
|
||||
sys.exit(1)
|
||||
|
||||
if not baseDir.endswith('\\') and not baseDir.endswith('/'):
|
||||
baseDir += '/'
|
||||
baseDir += '/'
|
||||
|
||||
hcopyScript = 'HCopyTimit.scp'
|
||||
cnScript = 'CntkTimit.scp'
|
||||
|
@ -42,22 +42,22 @@ fileList = 'TimitSubjectList.txt'
|
|||
fileListFp = open(fileList)
|
||||
|
||||
if !hcopyScriptFp or !cnScriptFp or !cnOutputScriptFp or !fileListFp:
|
||||
print "Can't open the necessary output files."
|
||||
sys.exit(0)
|
||||
print "Can't open the necessary output files."
|
||||
sys.exit(0)
|
||||
|
||||
for origFile in fileListFp:
|
||||
origFile = origFile.strip()
|
||||
fullFile = baseDir + origFile
|
||||
|
||||
# Flatten the output structure. Replace / with -
|
||||
outFile = origFile.replace('/', '-').replace('\\', '-')
|
||||
featFile = 'Features/train-' + outFile
|
||||
hcopyScriptFp.write(fullFile+'.nst ' + featFile+'.fbank_zda\n')
|
||||
cnScriptFp.write(featFile+'.fbank_zda\n')
|
||||
cnOutputScriptFp.write('Output/train-'+outFile+'.log\n')
|
||||
fileCount += 1
|
||||
if fileCount > 100000000: # Debugging
|
||||
break
|
||||
origFile = origFile.strip()
|
||||
fullFile = baseDir + origFile
|
||||
|
||||
# Flatten the output structure. Replace / with -
|
||||
outFile = origFile.replace('/', '-').replace('\\', '-')
|
||||
featFile = 'Features/train-' + outFile
|
||||
hcopyScriptFp.write(fullFile+'.nst ' + featFile+'.fbank_zda\n')
|
||||
cnScriptFp.write(featFile+'.fbank_zda\n')
|
||||
cnOutputScriptFp.write('Output/train-'+outFile+'.log\n')
|
||||
fileCount += 1
|
||||
if fileCount > 100000000: # Debugging
|
||||
break
|
||||
|
||||
fileListFp.close()
|
||||
hcopyScriptFp.close()
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
The ATIS corpus was converted to CTF format with these commands (tcsh):
|
||||
|
||||
# convert third column into the IOB format
|
||||
cd Examples/Text/ATIS/data
|
||||
cd Examples/Text/ATIS/Data
|
||||
foreach f (atis.test atis.train)
|
||||
cat $f.tsv \
|
||||
| awk -F '\t' '{print $3}' $f.tsv \
|
||||
|
|
|
@ -123,15 +123,15 @@ static void DoEvalBNBase(const ConfigParameters& config, IDataReader& reader)
|
|||
template <typename ElemType>
|
||||
void DoEvalBN(const ConfigParameters& config)
|
||||
{
|
||||
// evaluate batch normalization mean and various
|
||||
ConfigParameters readerConfig(config(L"reader"));
|
||||
// evaluate batch normalization mean and various
|
||||
ConfigParameters readerConfig(config(L"reader"));
|
||||
|
||||
// Should trace level to zero in Post BN?
|
||||
//readerConfig.Insert("traceLevel", config(L"traceLevel", "0"));
|
||||
// Should trace level to zero in Post BN?
|
||||
//readerConfig.Insert("traceLevel", config(L"traceLevel", "0"));
|
||||
|
||||
DataReader evaBNDataReader(readerConfig);
|
||||
DataReader evaBNDataReader(readerConfig);
|
||||
|
||||
DoEvalBNBase<ElemType>(config, evaBNDataReader);
|
||||
DoEvalBNBase<ElemType>(config, evaBNDataReader);
|
||||
}
|
||||
|
||||
template <typename ElemType>
|
||||
|
|
|
@ -988,8 +988,8 @@ public:
|
|||
return defaultValue;
|
||||
}
|
||||
|
||||
// Look up a variable through the nested hierarchy. If not found, return false, and 'result'is untouched.
|
||||
bool TryFind(const std::string& name, ConfigValue& result, const char* defaultvalue = NULL) const
|
||||
// Look up a variable through the nested hierarchy. If not found, return false, and 'result'is untouched.
|
||||
bool TryFind(const std::string& name, ConfigValue& result, const char* defaultvalue = NULL) const
|
||||
{
|
||||
auto iter = find(name);
|
||||
|
||||
|
@ -1001,15 +1001,15 @@ public:
|
|||
if (iter == end() && m_parent != NULL)
|
||||
{
|
||||
result = m_parent->Find(name, defaultvalue);
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
else if (defaultvalue != NULL)
|
||||
{
|
||||
// no parent, so use default value
|
||||
std::string fullName = m_configName + ":" + name;
|
||||
result = ConfigValue(defaultvalue, fullName, this);
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1017,18 +1017,18 @@ public:
|
|||
rhs = this->ResolveVariables(rhs);
|
||||
std::string fullName = m_configName + ":" + name;
|
||||
result = ConfigValue(rhs, fullName, this);
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false; // not found
|
||||
}
|
||||
|
||||
// Look up a variable using TryFind() above. If not found, return empty string.
|
||||
ConfigValue Find(const std::string& name, const char* defaultvalue = NULL) const
|
||||
{
|
||||
ConfigValue result;
|
||||
TryFind(name, result, defaultvalue); // (if returns false, we return an empty ConfigValue)
|
||||
return result;
|
||||
}
|
||||
// Look up a variable using TryFind() above. If not found, return empty string.
|
||||
ConfigValue Find(const std::string& name, const char* defaultvalue = NULL) const
|
||||
{
|
||||
ConfigValue result;
|
||||
TryFind(name, result, defaultvalue); // (if returns false, we return an empty ConfigValue)
|
||||
return result;
|
||||
}
|
||||
|
||||
// ResolveVariablesInSingleLine - In this method we replace all substrings of 'configLine' of the form "$varName$"
|
||||
// (where varName is a variable name), with the value of the "varName" variable in config.
|
||||
|
@ -1087,17 +1087,17 @@ public:
|
|||
|
||||
// Note that this call to "Find" can trigger further substitutions of the form $varName2$ -> varValue2,
|
||||
// thus making this search process recursive.
|
||||
ConfigValue varConfigValue;
|
||||
const bool foundValue = this->TryFind(varName, varConfigValue);
|
||||
if (!foundValue)
|
||||
ConfigValue varConfigValue;
|
||||
const bool foundValue = this->TryFind(varName, varConfigValue);
|
||||
if (!foundValue)
|
||||
{
|
||||
RuntimeError("No variable found with the name %s. Parsing of string failed: %s:%s",
|
||||
varName.c_str(), m_configName.c_str(),
|
||||
newConfigLine.c_str());
|
||||
}
|
||||
|
||||
std::string varValue = varConfigValue;
|
||||
if (varValue.find_first_of("\n") != std::string::npos)
|
||||
std::string varValue = varConfigValue;
|
||||
if (varValue.find_first_of("\n") != std::string::npos)
|
||||
LogicError("Newline characters are not allowed in the value of a variable which is resolved using $varName$ feature");
|
||||
|
||||
// Replace $varName$ with 'varValue'. Then continue the search for
|
||||
|
|
|
@ -138,7 +138,7 @@ public:
|
|||
|
||||
// partial forward entry
|
||||
void ForwardProp(const ComputationNodeBasePtr rootNode, const ComputationNodeBasePtr startNode,
|
||||
const ComputationNodeBasePtr endNode);
|
||||
const ComputationNodeBasePtr endNode);
|
||||
|
||||
template <class NODESET> // version that takes multiple nodes
|
||||
void ForwardProp(const NODESET& nodes)
|
||||
|
|
|
@ -671,37 +671,37 @@ shared_ptr<ComputationNode<ElemType>> ComputationNetworkBuilder<ElemType>::LogPl
|
|||
template <class ElemType>
|
||||
shared_ptr<ComputationNode<ElemType>> ComputationNetworkBuilder<ElemType>::Less(const ComputationNodePtr a, const ComputationNodePtr b, const std::wstring nodeName)
|
||||
{
|
||||
return net.AddNodeToNetAndAttachInputs(New<LessNode<ElemType>>(net.GetDeviceId(), nodeName), { a, b });
|
||||
return net.AddNodeToNetAndAttachInputs(New<LessNode<ElemType>>(net.GetDeviceId(), nodeName), { a, b });
|
||||
}
|
||||
|
||||
template <class ElemType>
|
||||
shared_ptr<ComputationNode<ElemType>> ComputationNetworkBuilder<ElemType>::Equal(const ComputationNodePtr a, const ComputationNodePtr b, const std::wstring nodeName)
|
||||
{
|
||||
return net.AddNodeToNetAndAttachInputs(New<EqualNode<ElemType>>(net.GetDeviceId(), nodeName), { a, b });
|
||||
return net.AddNodeToNetAndAttachInputs(New<EqualNode<ElemType>>(net.GetDeviceId(), nodeName), { a, b });
|
||||
}
|
||||
|
||||
template <class ElemType>
|
||||
shared_ptr<ComputationNode<ElemType>> ComputationNetworkBuilder<ElemType>::Greater(const ComputationNodePtr a, const ComputationNodePtr b, const std::wstring nodeName)
|
||||
{
|
||||
return net.AddNodeToNetAndAttachInputs(New<GreaterNode<ElemType>>(net.GetDeviceId(), nodeName), { a, b });
|
||||
return net.AddNodeToNetAndAttachInputs(New<GreaterNode<ElemType>>(net.GetDeviceId(), nodeName), { a, b });
|
||||
}
|
||||
|
||||
template <class ElemType>
|
||||
shared_ptr<ComputationNode<ElemType>> ComputationNetworkBuilder<ElemType>::GreaterEqual(const ComputationNodePtr a, const ComputationNodePtr b, const std::wstring nodeName)
|
||||
{
|
||||
return net.AddNodeToNetAndAttachInputs(New<LessNode<ElemType>>(net.GetDeviceId(), nodeName), { a, b });
|
||||
return net.AddNodeToNetAndAttachInputs(New<LessNode<ElemType>>(net.GetDeviceId(), nodeName), { a, b });
|
||||
}
|
||||
|
||||
template <class ElemType>
|
||||
shared_ptr<ComputationNode<ElemType>> ComputationNetworkBuilder<ElemType>::NotEqual(const ComputationNodePtr a, const ComputationNodePtr b, const std::wstring nodeName)
|
||||
{
|
||||
return net.AddNodeToNetAndAttachInputs(New<EqualNode<ElemType>>(net.GetDeviceId(), nodeName), { a, b });
|
||||
return net.AddNodeToNetAndAttachInputs(New<EqualNode<ElemType>>(net.GetDeviceId(), nodeName), { a, b });
|
||||
}
|
||||
|
||||
template <class ElemType>
|
||||
shared_ptr<ComputationNode<ElemType>> ComputationNetworkBuilder<ElemType>::LessEqual(const ComputationNodePtr a, const ComputationNodePtr b, const std::wstring nodeName)
|
||||
{
|
||||
return net.AddNodeToNetAndAttachInputs(New<GreaterNode<ElemType>>(net.GetDeviceId(), nodeName), { a, b });
|
||||
return net.AddNodeToNetAndAttachInputs(New<GreaterNode<ElemType>>(net.GetDeviceId(), nodeName), { a, b });
|
||||
}
|
||||
|
||||
template <class ElemType>
|
||||
|
|
|
@ -48,7 +48,7 @@ public:
|
|||
virtual bool InputUsedInComputingInputNodesGradients(size_t /*childIndex*/) const override { return false; }
|
||||
|
||||
private:
|
||||
void Log(const FrameRange& fr, bool logGradientInstead) const;
|
||||
void Log(const FrameRange& fr, bool logGradientInstead) const;
|
||||
|
||||
private:
|
||||
// configuration
|
||||
|
|
|
@ -109,8 +109,8 @@ class MATH_API BlockHandlerAVX
|
|||
};
|
||||
|
||||
#define LOADAVX2_128x4 \
|
||||
__m256i r0b0a2 = _mm256_load_si256((__m256i*)currA2); \
|
||||
__m256i r0b0b2 = _mm256_load_si256((__m256i*)(currA2 + 16)); \
|
||||
__m256i r0b0a2 = _mm256_load_si256((__m256i*)currA2); \
|
||||
__m256i r0b0b2 = _mm256_load_si256((__m256i*)(currA2 + 16)); \
|
||||
__m256i r0b0c2 = _mm256_load_si256((__m256i*)(currA2 + 32)); \
|
||||
__m256i r0b0d2 = _mm256_load_si256((__m256i*)(currA2 + 48)); \
|
||||
__m256i r0b0e2 = _mm256_load_si256((__m256i*)(currA2 + 64)); \
|
||||
|
@ -146,8 +146,8 @@ __m256i r3b0g2 = _mm256_load_si256((__m256i*)(currA2 + 480));\
|
|||
__m256i r3b0h2 = _mm256_load_si256((__m256i*)(currA2 + 496));\
|
||||
|
||||
#define LOADAVX2_128x1 \
|
||||
__m256i r0b0a2 = _mm256_load_si256((__m256i*)currA2); \
|
||||
__m256i r0b0b2 = _mm256_load_si256((__m256i*)(currA2 + 16)); \
|
||||
__m256i r0b0a2 = _mm256_load_si256((__m256i*)currA2); \
|
||||
__m256i r0b0b2 = _mm256_load_si256((__m256i*)(currA2 + 16)); \
|
||||
__m256i r0b0c2 = _mm256_load_si256((__m256i*)(currA2 + 32)); \
|
||||
__m256i r0b0d2 = _mm256_load_si256((__m256i*)(currA2 + 48)); \
|
||||
__m256i r0b0e2 = _mm256_load_si256((__m256i*)(currA2 + 64)); \
|
||||
|
@ -157,8 +157,8 @@ __m256i r0b0h2 = _mm256_load_si256((__m256i*)(currA2 + 112));
|
|||
|
||||
|
||||
#define LOADAVX_128x1 \
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA); \
|
||||
__m256i r0b0b = _mm256_load_si256((__m256i*)(currA + 16)); \
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA); \
|
||||
__m256i r0b0b = _mm256_load_si256((__m256i*)(currA + 16)); \
|
||||
__m256i r0b0c = _mm256_load_si256((__m256i*)(currA + 32)); \
|
||||
__m256i r0b0d = _mm256_load_si256((__m256i*)(currA + 48)); \
|
||||
__m256i r0b0e = _mm256_load_si256((__m256i*)(currA + 64)); \
|
||||
|
@ -168,8 +168,8 @@ __m256i r0b0h = _mm256_load_si256((__m256i*)(currA + 112));
|
|||
|
||||
|
||||
#define LOADAVX_128x4 \
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA); \
|
||||
__m256i r0b0b = _mm256_load_si256((__m256i*)(currA + 16)); \
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA); \
|
||||
__m256i r0b0b = _mm256_load_si256((__m256i*)(currA + 16)); \
|
||||
__m256i r0b0c = _mm256_load_si256((__m256i*)(currA + 32)); \
|
||||
__m256i r0b0d = _mm256_load_si256((__m256i*)(currA + 48)); \
|
||||
__m256i r0b0e = _mm256_load_si256((__m256i*)(currA + 64)); \
|
||||
|
@ -205,10 +205,10 @@ __m256i r3b0g = _mm256_load_si256((__m256i*)(currA + 480));\
|
|||
__m256i r3b0h = _mm256_load_si256((__m256i*)(currA + 496));\
|
||||
|
||||
#define LOADAVX_64x4 \
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA); \
|
||||
__m256i r0b0b = _mm256_load_si256((__m256i*)currA + 1); \
|
||||
__m256i r0b0c = _mm256_load_si256((__m256i*)currA + 2); \
|
||||
__m256i r0b0d = _mm256_load_si256((__m256i*)currA + 3); \
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA);\
|
||||
__m256i r0b0b = _mm256_load_si256((__m256i*)currA + 1);\
|
||||
__m256i r0b0c = _mm256_load_si256((__m256i*)currA + 2);\
|
||||
__m256i r0b0d = _mm256_load_si256((__m256i*)currA + 3);\
|
||||
\
|
||||
__m256i r1b0a = _mm256_load_si256((__m256i*)currA + 4);\
|
||||
__m256i r1b0b = _mm256_load_si256((__m256i*)currA + 5);\
|
||||
|
@ -226,15 +226,15 @@ __m256i r3b0c = _mm256_load_si256((__m256i*)currA + 14);\
|
|||
__m256i r3b0d = _mm256_load_si256((__m256i*)currA + 15);
|
||||
|
||||
#define LOADAVX_64x1 \
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA); \
|
||||
__m256i r0b0b = _mm256_load_si256((__m256i*)currA + 1); \
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA); \
|
||||
__m256i r0b0b = _mm256_load_si256((__m256i*)currA + 1); \
|
||||
__m256i r0b0c = _mm256_load_si256((__m256i*)currA + 2); \
|
||||
__m256i r0b0d = _mm256_load_si256((__m256i*)currA + 3);
|
||||
|
||||
|
||||
#define LOADAVX_32x4 \
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA); \
|
||||
__m256i r0b0b = _mm256_load_si256((__m256i*)currA + 1); \
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA); \
|
||||
__m256i r0b0b = _mm256_load_si256((__m256i*)currA + 1); \
|
||||
\
|
||||
__m256i r1b0a = _mm256_load_si256((__m256i*)currA + 2);\
|
||||
__m256i r1b0b = _mm256_load_si256((__m256i*)currA + 3);\
|
||||
|
@ -246,19 +246,19 @@ __m256i r3b0a = _mm256_load_si256((__m256i*)currA + 6);\
|
|||
__m256i r3b0b = _mm256_load_si256((__m256i*)currA + 7);\
|
||||
|
||||
#define LOADAVX_32x1 \
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA); \
|
||||
__m256i r0b0b = _mm256_load_si256((__m256i*)currA + 1);
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA); \
|
||||
__m256i r0b0b = _mm256_load_si256((__m256i*)currA + 1);
|
||||
|
||||
|
||||
|
||||
#define LOADAVX_16x4 \
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA); \
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA);\
|
||||
__m256i r1b0a = _mm256_load_si256((__m256i*)currA + 1);\
|
||||
__m256i r2b0a = _mm256_load_si256((__m256i*)currA + 2);\
|
||||
__m256i r3b0a = _mm256_load_si256((__m256i*)currA + 3);\
|
||||
|
||||
#define LOADAVX_16x1 \
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA);
|
||||
__m256i r0b0a = _mm256_load_si256((__m256i*)currA);
|
||||
|
||||
#define LOAD_8x4 \
|
||||
__m128i r0b0a = _mm_load_si128((__m128i*)currA);\
|
||||
|
@ -388,7 +388,7 @@ FORCEINLINE void BlockHandlerAVX::HandleBlock32x4(int currBlock, int startRow, i
|
|||
__m256i accum1 = _mm256_set1_epi16(0);
|
||||
__m256i accum2 = _mm256_set1_epi16(0);
|
||||
__m256i accum3 = _mm256_set1_epi16(0);
|
||||
__m256i accum4 = _mm256_set1_epi16(0);
|
||||
__m256i accum4 = _mm256_set1_epi16(0);
|
||||
|
||||
kernelavx32x4(
|
||||
r0b0a, r0b0b,
|
||||
|
@ -447,7 +447,7 @@ FORCEINLINE void BlockHandlerAVX::HandleBlock64x4(int currBlock, int startRow, i
|
|||
__m256i accum1 = _mm256_set1_epi16(0);
|
||||
__m256i accum2 = _mm256_set1_epi16(0);
|
||||
__m256i accum3 = _mm256_set1_epi16(0);
|
||||
__m256i accum4 = _mm256_set1_epi16(0);
|
||||
__m256i accum4 = _mm256_set1_epi16(0);
|
||||
|
||||
kernelavx64x4(
|
||||
r0b0a, r0b0b, r0b0c, r0b0d,
|
||||
|
|
|
@ -150,7 +150,7 @@ template <class ElemType>
|
|||
CPUMatrix<ElemType>::CPUMatrix(const CPUMatrix<ElemType>& deepCopyFrom)
|
||||
{
|
||||
ZeroInit();
|
||||
SetValue(deepCopyFrom);
|
||||
SetValue(deepCopyFrom);
|
||||
}
|
||||
|
||||
//assignment operator, deep copy
|
||||
|
@ -840,7 +840,7 @@ void CPUMatrix<ElemType>::SetValue(const CPUMatrix<ElemType>& deepCopyFrom)
|
|||
if (this == &deepCopyFrom)
|
||||
return;
|
||||
|
||||
SetValue(deepCopyFrom.GetNumRows(), deepCopyFrom.GetNumCols(), deepCopyFrom.Data(), 0);
|
||||
SetValue(deepCopyFrom.GetNumRows(), deepCopyFrom.GetNumCols(), deepCopyFrom.Data(), 0);
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
@ -876,7 +876,7 @@ void CPUMatrix<ElemType>::SetValue(const size_t numRows, const size_t numCols, E
|
|||
if (matrixFlags & matrixFlagDontOwnBuffer)
|
||||
{
|
||||
// free previous array allocation if any before overwriting
|
||||
delete[] Buffer();
|
||||
delete[] Buffer();
|
||||
|
||||
m_numRows = numRows;
|
||||
m_numCols = numCols;
|
||||
|
@ -1359,7 +1359,7 @@ template <class ElemType>
|
|||
void CPUMatrix<ElemType>::RequireSize(const size_t numRows, const size_t numCols, bool growOnly /*=true*/)
|
||||
{
|
||||
if (GetNumRows() != numRows || GetNumCols() != numCols)
|
||||
Resize(numRows, numCols, growOnly);
|
||||
Resize(numRows, numCols, growOnly);
|
||||
}
|
||||
|
||||
// Resize() -- change matrix size
|
||||
|
@ -2990,7 +2990,7 @@ void CPUMatrix<ElemType>::VectorNorm2(CPUMatrix<ElemType>& c, const bool isColWi
|
|||
|
||||
assert(m > 0 && n > 0); // converting from size_t to int may cause overflow
|
||||
|
||||
ElemType* bufPtr = us.Data();
|
||||
ElemType* bufPtr = us.Data();
|
||||
if (isColWise) // col-wise
|
||||
{
|
||||
c.RequireSize(1, n);
|
||||
|
@ -4867,9 +4867,9 @@ void CPUMatrix<ElemType>::AddScaledDifference(const ElemType alpha, const CPUMat
|
|||
if (a.IsEmpty())
|
||||
LogicError("AddScaledDifference: Input matrix a is empty.");
|
||||
|
||||
ElemType* aBufPtr = a.Data();
|
||||
ElemType* bBufPtr = b.Data();
|
||||
ElemType* cBufPtr = c.Data();
|
||||
ElemType* aBufPtr = a.Data();
|
||||
ElemType* bBufPtr = b.Data();
|
||||
ElemType* cBufPtr = c.Data();
|
||||
long m = (long) c.GetNumElements();
|
||||
#pragma omp parallel for
|
||||
// four-way unrolling
|
||||
|
@ -4909,9 +4909,9 @@ void CPUMatrix<ElemType>::AssignScaledDifference(const ElemType alpha, const CPU
|
|||
if (&c != &a && &c != &b)
|
||||
c.RequireSize(a.GetNumRows(), a.GetNumCols());
|
||||
|
||||
ElemType* aBufPtr = a.Data();
|
||||
ElemType* bBufPtr = b.Data();
|
||||
ElemType* cBufPtr = c.Data();
|
||||
ElemType* aBufPtr = a.Data();
|
||||
ElemType* bBufPtr = b.Data();
|
||||
ElemType* cBufPtr = c.Data();
|
||||
long m = (long) c.GetNumElements();
|
||||
#pragma omp parallel for
|
||||
// four-way unrolling
|
||||
|
@ -5014,8 +5014,8 @@ template <class ElemType>
|
|||
assert(m > 0 && n > 0); // converting from size_t to int may cause overflow
|
||||
c.RequireSize(m, n);
|
||||
|
||||
ElemType* aBufPtr = a.Data();
|
||||
ElemType* cBufPtr = c.Data();
|
||||
ElemType* aBufPtr = a.Data();
|
||||
ElemType* cBufPtr = c.Data();
|
||||
|
||||
if (alpha == 0)
|
||||
{
|
||||
|
@ -5108,8 +5108,8 @@ void CPUMatrix<ElemType>::InnerProduct(const CPUMatrix<ElemType>& a, const CPUMa
|
|||
{
|
||||
c.RequireSize(1, n);
|
||||
|
||||
ElemType* aBufPtr = a.Data();
|
||||
ElemType* bBufPtr = b.Data();
|
||||
ElemType* aBufPtr = a.Data();
|
||||
ElemType* bBufPtr = b.Data();
|
||||
if (sizeof(ElemType) == sizeof(double))
|
||||
{
|
||||
#pragma omp parallel for
|
||||
|
@ -5132,8 +5132,8 @@ void CPUMatrix<ElemType>::InnerProduct(const CPUMatrix<ElemType>& a, const CPUMa
|
|||
{
|
||||
c.RequireSize(m, 1);
|
||||
|
||||
ElemType* aBufPtr = a.Data();
|
||||
ElemType* bBufPtr = b.Data();
|
||||
ElemType* aBufPtr = a.Data();
|
||||
ElemType* bBufPtr = b.Data();
|
||||
if (sizeof(ElemType) == sizeof(double))
|
||||
{
|
||||
#pragma omp parallel for
|
||||
|
@ -5603,7 +5603,7 @@ template <class ElemType>
|
|||
ElemType CPUMatrix<ElemType>::LogSumOfElements() const
|
||||
{
|
||||
ElemType fAlpha = (ElemType) LZERO;
|
||||
ElemType* bufPtr = Data();
|
||||
ElemType* bufPtr = Data();
|
||||
for (int k = 0; k < GetNumElements(); k++)
|
||||
fAlpha = (ElemType) LogAddD(fAlpha, bufPtr[k]);
|
||||
return fAlpha;
|
||||
|
|
|
@ -95,13 +95,13 @@ template <class ElemType>
|
|||
SetComputeDeviceId(CPUDEVICE);
|
||||
|
||||
SetCompIndexSize(0);
|
||||
SetColIdx(-1);
|
||||
SetBuffer(nullptr, 0, false);
|
||||
SetUnCompIndex(nullptr);
|
||||
SetCompIndex(nullptr);
|
||||
SetBlockSize(0);
|
||||
SetBlockIdShift(0);
|
||||
SetBlockIds(nullptr);
|
||||
SetColIdx(-1);
|
||||
SetBuffer(nullptr, 0, false);
|
||||
SetUnCompIndex(nullptr);
|
||||
SetCompIndex(nullptr);
|
||||
SetBlockSize(0);
|
||||
SetBlockIdShift(0);
|
||||
SetBlockIds(nullptr);
|
||||
}
|
||||
|
||||
//should only be used by constructors.
|
||||
|
@ -230,7 +230,7 @@ void CPUSparseMatrix<ElemType>::SetValue(const size_t row, const size_t col, con
|
|||
SecondaryIndexLocation()[c] = CPUSPARSE_INDEX_TYPE(nz);
|
||||
SetColIdx((int) c);
|
||||
}
|
||||
// Note we don't have m_nz anymore. In order for the change from m_nz to
|
||||
// Note we don't have m_nz anymore. In order for the change from m_nz to
|
||||
// NzCount to make sense, we need to propogate nz+1 to all col slices.
|
||||
for (size_t max = c + 1; max < m_numCols + 1; max++)
|
||||
{
|
||||
|
@ -674,9 +674,9 @@ void CPUSparseMatrix<ElemType>::Allocate(const size_t numRows, const size_t numC
|
|||
if (keepExistingValues && (NzCount() > numNZElemToReserve || GetCompIndexSize() > newCompIndexSize))
|
||||
LogicError("Allocate: To keep values m_nz should <= numNZElemToReserve and m_compIndexSize <= newCompIndexSize");
|
||||
|
||||
memset(pArray, 0, sizeof(ElemType) * numNZElemToReserve);
|
||||
memset(unCompIndex, 0, sizeof(CPUSPARSE_INDEX_TYPE) * numNZElemToReserve);
|
||||
memset(compIndex, 0, sizeof(CPUSPARSE_INDEX_TYPE) * newCompIndexSize);
|
||||
memset(pArray, 0, sizeof(ElemType) * numNZElemToReserve);
|
||||
memset(unCompIndex, 0, sizeof(CPUSPARSE_INDEX_TYPE) * numNZElemToReserve);
|
||||
memset(compIndex, 0, sizeof(CPUSPARSE_INDEX_TYPE) * newCompIndexSize);
|
||||
|
||||
if (keepExistingValues && NzCount() > 0)
|
||||
{
|
||||
|
@ -764,12 +764,12 @@ void CPUSparseMatrix<ElemType>::Resize(const size_t numRows, const size_t numCol
|
|||
{
|
||||
VerifyResizable(__func__);
|
||||
|
||||
m_sliceViewOffset = 0;
|
||||
m_sliceViewOffset = 0;
|
||||
m_numRows = numRows;
|
||||
m_numCols = numCols;
|
||||
SetNumStorageRows(numRows);
|
||||
SetNumStorageCols(numCols);
|
||||
SetFormat(matrixFormat);
|
||||
SetNumStorageRows(numRows);
|
||||
SetNumStorageCols(numCols);
|
||||
SetFormat(matrixFormat);
|
||||
|
||||
size_t newCompIndexSize = (numCols > numRows ? numCols : numRows) + 1;
|
||||
bool reallocate = (GetCompIndexSize() < newCompIndexSize);
|
||||
|
@ -785,7 +785,7 @@ void CPUSparseMatrix<ElemType>::Resize(const size_t numRows, const size_t numCol
|
|||
template <class ElemType>
|
||||
void CPUSparseMatrix<ElemType>::Reset()
|
||||
{
|
||||
// This is equivalent to setting m_nz = 0; Note we can only do this for sparse CSC/CSR because CompIndexSize is overloaded.
|
||||
// This is equivalent to setting m_nz = 0; Note we can only do this for sparse CSC/CSR because CompIndexSize is overloaded.
|
||||
if (GetFormat() == MatrixFormat::matrixFormatSparseCSC || GetFormat() == MatrixFormat::matrixFormatSparseCSR)
|
||||
memset(GetCompIndex(), 0, sizeof(CPUSPARSE_INDEX_TYPE) * GetCompIndexSize());
|
||||
SetColIdx(-1);
|
||||
|
@ -1511,7 +1511,7 @@ MATH_API File& operator<<(File& stream, const CPUSparseMatrix<ElemType>& us)
|
|||
|
||||
stream.PutMarker(fileMarkerBeginSection, std::wstring(L"BMAT"));
|
||||
stream << sizeof(ElemType);
|
||||
stream << std::wstring(L"nnmatrix"); // Note this is needed for compatability, and could potentially be an empty string
|
||||
stream << std::wstring(L"nnmatrix"); // Note this is needed for compatability, and could potentially be an empty string
|
||||
|
||||
size_t nz, numRows, numCols;
|
||||
size_t compressedSize = us.SecondaryIndexCount();
|
||||
|
|
|
@ -68,7 +68,7 @@ void* CUDAPageLockedMemAllocator::Malloc(size_t)
|
|||
|
||||
void* CUDAPageLockedMemAllocator::Malloc(size_t, int)
|
||||
{
|
||||
return nullptr;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void CUDAPageLockedMemAllocator::Free(void*)
|
||||
|
|
|
@ -1183,7 +1183,7 @@ template <class ElemType>
|
|||
void GPUMatrix<ElemType>::SetValue(const size_t numRows, const size_t numCols, int deviceId, ElemType* pArray, size_t matrixFlags)
|
||||
{
|
||||
// handle externally managed case
|
||||
// BUGBUG: This is super super ugly, and needs to be fixed, but if matrixFlags has the right value, then we can't free anything,
|
||||
// BUGBUG: This is super super ugly, and needs to be fixed, but if matrixFlags has the right value, then we can't free anything,
|
||||
// and everything gets wonky. This should be fixed, and would go away if it is made a shared_ptr.
|
||||
if (matrixFlags & matrixFlagDontOwnBuffer)
|
||||
{
|
||||
|
|
|
@ -670,7 +670,7 @@ void GPUSparseMatrix<ElemType>::Reshape(const size_t numRows, const size_t numCo
|
|||
template <class ElemType>
|
||||
void GPUSparseMatrix<ElemType>::Allocate(const size_t numRows, const size_t numCols, const size_t numNZElemToReserve, const bool growOnly /*= true*/, bool keepExistingValues /*= true*/)
|
||||
{
|
||||
// BugBug: This doesn't work because allocate is called from Resize sometimes and resize expects allocate to know the old values not the new values, so this won't work.
|
||||
// BugBug: This doesn't work because allocate is called from Resize sometimes and resize expects allocate to know the old values not the new values, so this won't work.
|
||||
if (GetNumRows() != numRows || GetNumCols() != numCols)
|
||||
LogicError("Error, calling allocate with dimensions (%d, %d), but the matrix has dimension (%d, %d).", (int)numRows, (int)numCols, (int)GetNumRows(), (int)GetNumCols());
|
||||
|
||||
|
@ -679,14 +679,14 @@ void GPUSparseMatrix<ElemType>::Allocate(const size_t numRows, const size_t numC
|
|||
|
||||
if (reallocate)
|
||||
{
|
||||
// Note that we are allocating one buffer for all of our data structures. Thus the ElemType* nzValues array lives directly next to
|
||||
// the GPUSPARSE_INDEX_TYPE* rowIndices/colIndices in sparseCSC/CSR formats. Thus we allocate the number of bytes, and then set the
|
||||
// start pointer to an ElemType*.
|
||||
// Note that we are allocating one buffer for all of our data structures. Thus the ElemType* nzValues array lives directly next to
|
||||
// the GPUSPARSE_INDEX_TYPE* rowIndices/colIndices in sparseCSC/CSR formats. Thus we allocate the number of bytes, and then set the
|
||||
// start pointer to an ElemType*.
|
||||
char* buf = TracingGPUMemoryAllocator::Allocate<char>(GetComputeDeviceId(), bufferSizeNeeded);
|
||||
ElemType* pArray = (ElemType*)(buf);
|
||||
|
||||
// Note this is required due to m_nz
|
||||
CUDA_CALL(cudaMemset(pArray, 0, bufferSizeNeeded));
|
||||
// Note this is required due to m_nz
|
||||
CUDA_CALL(cudaMemset(pArray, 0, bufferSizeNeeded));
|
||||
if (Buffer() != nullptr)
|
||||
{
|
||||
if (keepExistingValues)
|
||||
|
@ -717,7 +717,7 @@ void GPUSparseMatrix<ElemType>::Allocate(const size_t numRows, const size_t numC
|
|||
else // if requested size is smaller, keeping original values does not make sense
|
||||
{
|
||||
SetSizeAllocated(ElemCountFromBufferSize(numRows, numCols, GetFormat(), BufferSizeAllocated()));
|
||||
CUDA_CALL(cudaMemset(Buffer(), 0, BufferSizeAllocated()));
|
||||
CUDA_CALL(cudaMemset(Buffer(), 0, BufferSizeAllocated()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -730,7 +730,7 @@ void GPUSparseMatrix<ElemType>::RequireSizeAndAllocate(const size_t numRows, con
|
|||
template <class ElemType>
|
||||
void GPUSparseMatrix<ElemType>::RequireSizeAndAllocate(const size_t numRows, const size_t numCols, const size_t numNZElemToReserve, const MatrixFormat matrixFormat, const bool growOnly /*= true*/, bool keepExistingValues /*= true*/)
|
||||
{
|
||||
RequireSize(numRows, numCols, matrixFormat, growOnly);
|
||||
RequireSize(numRows, numCols, matrixFormat, growOnly);
|
||||
|
||||
size_t bufferSizeNeeded = BufferSizeNeeded(numRows, numCols, numNZElemToReserve, matrixFormat);
|
||||
bool reallocate = (BufferSizeAllocated() < bufferSizeNeeded || (!growOnly && BufferSizeAllocated() > bufferSizeNeeded));
|
||||
|
@ -771,8 +771,8 @@ void GPUSparseMatrix<ElemType>::Resize(const size_t numRows, const size_t numCol
|
|||
SetNumStorageCols(numCols);
|
||||
SetFormat(matrixFormat);
|
||||
|
||||
// If we really did resize the number of rows/columns, then we changed the number of nz elements allocated. That is, if we used to have a buffer capable of
|
||||
// stroring 100 nz elements and 10 columns in CSC format, but we resized to 20 columns, we can no longer store 100 elements, we can only store 95.
|
||||
// If we really did resize the number of rows/columns, then we changed the number of nz elements allocated. That is, if we used to have a buffer capable of
|
||||
// stroring 100 nz elements and 10 columns in CSC format, but we resized to 20 columns, we can no longer store 100 elements, we can only store 95.
|
||||
// Thus we must reset the number of nz elements which can be stored. So let's compute it now.
|
||||
size_t newNzElem = ComputeMaxNZElemFromBufferSize(numRows, numCols, BufferSizeAllocated(), matrixFormat);
|
||||
SetSizeAllocated(newNzElem);
|
||||
|
@ -828,7 +828,7 @@ void GPUSparseMatrix<ElemType>::SetMatrixFromCSRFormat(const GPUSPARSE_INDEX_TYP
|
|||
|
||||
if (sizeof(CPUSPARSE_INDEX_TYPE) == sizeof(GPUSPARSE_INDEX_TYPE))
|
||||
{
|
||||
// ColSize doesn't work since it requires NzCount() to be usable (RowSize doesn't, since it's the fixed, compressed,
|
||||
// ColSize doesn't work since it requires NzCount() to be usable (RowSize doesn't, since it's the fixed, compressed,
|
||||
// dimension. Since NzCount is not available (because the sparse indices which is where the NzCount is copmuted from
|
||||
// haven't been copied in yet), we just tell it how many bytes to copy. That is, nz * sizeof(GPUSPARSE_INDEX_TYPE);
|
||||
CUDA_CALL(cudaMemcpy(RowLocation(), h_CSRRow, RowSize(), kind));
|
||||
|
@ -905,7 +905,7 @@ void GPUSparseMatrix<ElemType>::SetMatrixFromCSCFormat(const CPUSPARSE_INDEX_TYP
|
|||
SetFormat(matrixFormatSparseCSC);
|
||||
RequireSizeAndAllocate(numRows, numCols, nz, true, false);
|
||||
|
||||
// m_nz doesn't exist anymore. How are we going to deal with the NzSize, RowSize, and ColSize? Do it ourselves of course.
|
||||
// m_nz doesn't exist anymore. How are we going to deal with the NzSize, RowSize, and ColSize? Do it ourselves of course.
|
||||
cudaMemcpyKind kind = IsOnDevice ? cudaMemcpyDeviceToDevice : cudaMemcpyHostToDevice;
|
||||
CUDA_CALL(cudaMemcpy(Data(), h_Val, nz * sizeof(ElemType), kind));
|
||||
|
||||
|
@ -1443,7 +1443,7 @@ ElemType GPUSparseMatrix<ElemType>::Adagrad(GPUMatrix<ElemType>& c, const bool n
|
|||
if (!needAveMultiplier)
|
||||
return 1;
|
||||
|
||||
let nz = NzCount();
|
||||
let nz = NzCount();
|
||||
cublasHandle_t cuHandle = GPUMatrix<ElemType>::GetCublasHandle(GetComputeDeviceId());
|
||||
if (sizeof(ElemType) == sizeof(float))
|
||||
{
|
||||
|
@ -2190,7 +2190,7 @@ GPUSparseMatrix<ElemType> GPUSparseMatrix<ElemType>::ColumnSlice(size_t startCol
|
|||
slice.ShallowCopyFrom(*this);
|
||||
slice.SetNumCols(numCols);
|
||||
slice.m_sliceViewOffset = m_sliceViewOffset + startColumn; // Just shift the compressed index location to the new startColumn - that's it!
|
||||
// Note: m_nz is missing from here because it does not exist. We must compute it every time.
|
||||
// Note: m_nz is missing from here because it does not exist. We must compute it every time.
|
||||
|
||||
return slice;
|
||||
}
|
||||
|
@ -2803,8 +2803,8 @@ MATH_API File& operator<<(File& stream, const GPUSparseMatrix<ElemType>& us)
|
|||
|
||||
stream.PutMarker(fileMarkerBeginSection, std::wstring(L"BMAT"));
|
||||
stream << sizeof(ElemType);
|
||||
std::wstring s(L"nnmatrix");
|
||||
stream << s;
|
||||
std::wstring s(L"nnmatrix");
|
||||
stream << s;
|
||||
|
||||
size_t nz = us.GetNumNZElements(), numElemAllocated = us.GetNumElemAllocated(), numRows = us.GetNumRows(), numCols = us.GetNumCols();
|
||||
size_t compressedSize = us.SecondaryIndexCount();
|
||||
|
|
|
@ -101,16 +101,16 @@ public:
|
|||
return Data();
|
||||
}
|
||||
|
||||
GPUSPARSE_INDEX_TYPE NzCount() const
|
||||
GPUSPARSE_INDEX_TYPE NzCount() const
|
||||
{
|
||||
if (GetFormat() == matrixFormatSparseCSC)
|
||||
return SecondaryIndexValueAt(GetNumCols()) - SecondaryIndexValueAt(0);
|
||||
return SecondaryIndexValueAt(GetNumCols()) - SecondaryIndexValueAt(0);
|
||||
if (GetFormat() == matrixFormatSparseCSR )
|
||||
return SecondaryIndexValueAt(GetNumRows()) - SecondaryIndexValueAt(0);
|
||||
return SecondaryIndexValueAt(GetNumRows()) - SecondaryIndexValueAt(0);
|
||||
else if (GetFormat() == matrixFormatSparseBlockCol)
|
||||
return (int)(GetNumRows() * GetBlockSize());
|
||||
else
|
||||
NOT_IMPLEMENTED;
|
||||
NOT_IMPLEMENTED;
|
||||
|
||||
}
|
||||
inline size_t NzSize() const { return sizeof(ElemType) * NzCount(); } // actual number of element bytes in use
|
||||
|
@ -118,26 +118,26 @@ public:
|
|||
inline size_t GetNumNZElements() const { return NzCount(); }
|
||||
|
||||
void ClearNzCount();
|
||||
// The sparse matrix representation of CSC/CSR uses one large matrix (m_pArray) with offsets to the Major/Secondary index location.
|
||||
// m_pArray [0,nz] are the nz elements, [nz+1,2*nz+1] is the major index location, and [2*nz+2,2*nz+2+ numcols/rows] is the secondary
|
||||
// index location.
|
||||
// The sparse matrix representation of CSC/CSR uses one large matrix (m_pArray) with offsets to the Major/Secondary index location.
|
||||
// m_pArray [0,nz] are the nz elements, [nz+1,2*nz+1] is the major index location, and [2*nz+2,2*nz+2+ numcols/rows] is the secondary
|
||||
// index location.
|
||||
GPUSPARSE_INDEX_TYPE* MajorIndexLocation() const // row/col ids in CSC/CSR format, blockId2col/blockId2row in BlockCol/BlockRow format
|
||||
{
|
||||
return (GPUSPARSE_INDEX_TYPE*) (Buffer() + GetSizeAllocated());
|
||||
}
|
||||
|
||||
// Note: Data is already offset by the sliceViewOffset, so we can just add the allocated size to get the start of the MajorIndexLoc
|
||||
// Note: Data is already offset by the sliceViewOffset, so we can just add the allocated size to get the start of the MajorIndexLoc
|
||||
GPUSPARSE_INDEX_TYPE* MajorIndexLocationWithSliceViewOffset() const
|
||||
{
|
||||
return (GPUSPARSE_INDEX_TYPE*) (Data() + GetSizeAllocated());
|
||||
}
|
||||
|
||||
// MajorIndexCount depends on the format.
|
||||
// 1. SparseBlockCol: numCols
|
||||
// 2. SparseBlockRow: numRows
|
||||
// 3. SparseCSC/CSR : nnz
|
||||
// Note that NzCount is the number of non-zero elements currently in use. GetSizeAllocated is the number
|
||||
// of nz values that will fit in the current buffer.
|
||||
// MajorIndexCount depends on the format.
|
||||
// 1. SparseBlockCol: numCols
|
||||
// 2. SparseBlockRow: numRows
|
||||
// 3. SparseCSC/CSR : nnz
|
||||
// Note that NzCount is the number of non-zero elements currently in use. GetSizeAllocated is the number
|
||||
// of nz values that will fit in the current buffer.
|
||||
size_t MajorIndexCount() const
|
||||
{
|
||||
return MajorIndexCount(GetNumRows(), GetNumCols(), NzCount(), GetFormat());
|
||||
|
@ -172,7 +172,7 @@ public:
|
|||
NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
// Since the m_sliceViewOffset effects Data and MajorIndexLocation differently than SecondaryIndexLocation, we compute it fully here.
|
||||
// Since the m_sliceViewOffset effects Data and MajorIndexLocation differently than SecondaryIndexLocation, we compute it fully here.
|
||||
GPUSPARSE_INDEX_TYPE* SecondaryIndexLocation() const // compressed index, col/row in CSC/CSR format, col2blockId/row2blockId in BlockCol/BlockRow format
|
||||
{
|
||||
if (GetFormat() == matrixFormatSparseBlockCol)
|
||||
|
@ -217,7 +217,7 @@ public:
|
|||
return sizeof(ElemType) * numNZ + sizeof(GPUSPARSE_INDEX_TYPE) * (MajorIndexCount(numRows, numCols, numNZ, format) + SecondaryIndexCount(numRows, numCols, numNZ, format));
|
||||
}
|
||||
|
||||
// SecondaryIndexValueAt calls SecondaryIndexLocation which is already appropriately offset by m_sliceViewOffset
|
||||
// SecondaryIndexValueAt calls SecondaryIndexLocation which is already appropriately offset by m_sliceViewOffset
|
||||
inline ElemType* Data() const
|
||||
{
|
||||
return (Buffer() +
|
||||
|
|
|
@ -24,10 +24,6 @@
|
|||
#pragma warning(disable : 4239) // nonstandard extension; triggered by this pattern: "auto& second = transposeB ? b.m_GPUMatrix->Transpose() : *b.m_GPUMatrix;"
|
||||
#pragma warning(disable : 4702) // unreachable code; triggered for unknown reasons
|
||||
|
||||
#ifndef min
|
||||
#define min(a, b) (((a) < (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
// Helper to dispath matrix calls to the 4 underlying matrix libraries (CPU,GPU) x (DENSE,SPARSE)
|
||||
// 'MatrixPointerToCheck' determines where the operation takes place.
|
||||
// 'MatrixPointerToSetFlag' is the output. If not null and its location is BOTH, we collapse it to one.
|
||||
|
@ -436,11 +432,11 @@ Matrix<ElemType>::Matrix(const size_t numRows, const size_t numCols, ElemType* p
|
|||
}
|
||||
}
|
||||
|
||||
// Why is this here??
|
||||
// Why is this here??
|
||||
/*
|
||||
if (matrixFlagDontOwnBuffer & matrixFlags)
|
||||
m_baseMatrix->SetOwnBuffer(false);
|
||||
*/
|
||||
*/
|
||||
}
|
||||
|
||||
//copy constructor, deep copy
|
||||
|
|
|
@ -2672,8 +2672,9 @@ SGDParams::SGDParams(const ConfigRecordType& configSGD, size_t sizeofElemType)
|
|||
size_t numMPIWorkers = pMPI->NumNodesInUse();
|
||||
const ConfigRecordType& configParallelTrain(configSGD(L"ParallelTrain", ConfigRecordType::Record()));
|
||||
m_parallelizationMethod = ParseParallelizationMethod(configParallelTrain(L"parallelizationMethod", L"none"));
|
||||
m_parallelizationStartEpochNum = configParallelTrain(L"parallelizationStartEpoch", (int) 1) - 1; // Epoch numbers internally are 0 based
|
||||
m_parallelizationStartEpochNum = configParallelTrain(L"parallelizationStartEpoch", (int) 1) - 1; // Internally, epoch numbers are 0-based
|
||||
if (m_parallelizationStartEpochNum < 0 /* sic */)
|
||||
// Be explicit that user-facing epoch numbers are 1-based
|
||||
InvalidArgument("parallelizationStartEpoch must be greater or equal to 1");
|
||||
m_enableDistributedMBReading = configParallelTrain(L"distributedMBReading", false);
|
||||
m_syncStatsTrace = configParallelTrain(L"syncPerfStats", (int) 0);
|
||||
|
|
|
@ -127,7 +127,7 @@ speechTrain = new TrainAction [
|
|||
Err = ClassificationError(labels, LSTMoutputW, tag='evaluation') // this also gets tracked
|
||||
|
||||
// decoding
|
||||
logPrior = LogPrior(labels)
|
||||
logPrior = LogPrior(labels)
|
||||
ScaledLogLikelihood = Minus(LSTMoutputW, logPrior, tag='output') // sadly we can't say x - y since we want to assign a tag
|
||||
]
|
||||
]
|
||||
|
|
|
@ -28,10 +28,10 @@ struct EvalFixture
|
|||
fprintf(stderr, "Executable path: %s\n", m_parentPath.c_str());
|
||||
|
||||
#ifdef _WIN32
|
||||
// The executable path on Windows is e.g. <cntk>/x64/Debug/Unittests/
|
||||
// The executable path on Windows is e.g. <cntk>/x64/Debug/Unittests/
|
||||
m_testDataPath = m_parentPath + "/../../../Tests/UnitTests/EvalTests";
|
||||
#else
|
||||
// The executable path on Linux is e.g. <cntk>/build/cpu/release/bin/
|
||||
// The executable path on Linux is e.g. <cntk>/build/cpu/release/bin/
|
||||
m_testDataPath = m_parentPath + "/../../../../Tests/UnitTests/EvalTests";
|
||||
#endif
|
||||
boost::filesystem::path absTestPath(m_testDataPath);
|
||||
|
|
|
@ -35,10 +35,10 @@ struct DataFixture
|
|||
fprintf(stderr, "Executable path: %s\n", m_parentPath.c_str());
|
||||
|
||||
#ifdef _WIN32
|
||||
// The executable path on Windows is e.g. <cntk>/x64/Debug/Unittests/
|
||||
// The executable path on Windows is e.g. <cntk>/x64/Debug/Unittests/
|
||||
m_testDataPath = m_parentPath + "/../../../Tests/UnitTests/NetworkTests";
|
||||
#else
|
||||
// The executable path on Linux is e.g. <cntk>/build/cpu/release/bin/
|
||||
// The executable path on Linux is e.g. <cntk>/build/cpu/release/bin/
|
||||
m_testDataPath = m_parentPath + "/../../../../Tests/UnitTests/NetworkTests";
|
||||
#endif
|
||||
boost::filesystem::path absTestPath(m_testDataPath);
|
||||
|
|
|
@ -35,10 +35,10 @@ struct ReaderFixture
|
|||
fprintf(stderr, "Executable path: %s\n", m_parentPath.c_str());
|
||||
|
||||
#ifdef _WIN32
|
||||
// The executable path on Windows is e.g. <cntk>/x64/Debug/Unittests/
|
||||
// The executable path on Windows is e.g. <cntk>/x64/Debug/Unittests/
|
||||
m_testDataPath = m_parentPath + "/../../../Tests/UnitTests/ReaderTests";
|
||||
#else
|
||||
// The executable path on Linux is e.g. <cntk>/build/cpu/release/bin/
|
||||
// The executable path on Linux is e.g. <cntk>/build/cpu/release/bin/
|
||||
m_testDataPath = m_parentPath + "/../../../../Tests/UnitTests/ReaderTests";
|
||||
#endif
|
||||
boost::filesystem::path absTestPath(m_testDataPath);
|
||||
|
|
|
@ -166,5 +166,7 @@ void TrainResNetCifarClassifer(const DeviceDescriptor& device, bool testSaveAndR
|
|||
|
||||
void TestCifarResnet()
|
||||
{
|
||||
#ifndef CPUONLY
|
||||
TrainResNetCifarClassifer(DeviceDescriptor::GPUDevice(0), true /*testSaveAndReLoad*/);
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -347,10 +347,14 @@ void TestRecurrentFunctionCloning()
|
|||
void FunctionTests()
|
||||
{
|
||||
TestSlice(DeviceDescriptor::CPUDevice());
|
||||
#ifndef CPUONLY
|
||||
TestSlice(DeviceDescriptor::GPUDevice(0));
|
||||
#endif
|
||||
|
||||
TestReduceSum(DeviceDescriptor::CPUDevice());
|
||||
#ifndef CPUONLY
|
||||
TestReduceSum(DeviceDescriptor::GPUDevice(0));
|
||||
#endif
|
||||
|
||||
TestRecurrentFunctionCloning();
|
||||
}
|
||||
|
|
|
@ -179,6 +179,8 @@ void TrainSequenceToSequenceTranslator(const DeviceDescriptor& device, bool useS
|
|||
void TrainSequenceToSequenceTranslator()
|
||||
{
|
||||
// TODO: Also test with sparse input variables in the graph
|
||||
#ifndef CPUONLY
|
||||
TrainSequenceToSequenceTranslator(DeviceDescriptor::GPUDevice(0), false, false, true, false);
|
||||
#endif
|
||||
TrainSequenceToSequenceTranslator(DeviceDescriptor::CPUDevice(), false, true, false, true);
|
||||
}
|
||||
|
|
|
@ -78,6 +78,8 @@ void TrainLSTMSequenceClassifer(const DeviceDescriptor& device, bool testSaveAnd
|
|||
|
||||
void TrainLSTMSequenceClassifer()
|
||||
{
|
||||
#ifndef CPUONLY
|
||||
TrainLSTMSequenceClassifer(DeviceDescriptor::GPUDevice(0), true);
|
||||
#endif
|
||||
TrainLSTMSequenceClassifer(DeviceDescriptor::CPUDevice(), false);
|
||||
}
|
||||
|
|
|
@ -124,5 +124,7 @@ void TrainMNISTClassifier(const DeviceDescriptor& device)
|
|||
void TrainerTests()
|
||||
{
|
||||
TrainSimpleFeedForwardClassifer(DeviceDescriptor::CPUDevice());
|
||||
#ifndef CPUONLY
|
||||
TrainMNISTClassifier(DeviceDescriptor::GPUDevice(0));
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
#!/bin/bash
|
||||
# vim:set expandtab shiftwidth=2 tabstop=2:
|
||||
|
||||
errorCount=0
|
||||
|
||||
gitTree=HEAD
|
||||
|
||||
checkEmptyStdout()
|
||||
{
|
||||
local cmd=$1
|
||||
local message=$2
|
||||
local output=$(bash -c "$cmd")
|
||||
if [ ! -z "$output" ]
|
||||
then
|
||||
echo "=============================================================================="
|
||||
echo "Error: $message:"
|
||||
echo "------------------------------------------------------------------------------"
|
||||
echo "$output"
|
||||
errorCount=$((errorCount + 1))
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# TODO switch to something without extra command quoting
|
||||
|
||||
checkEmptyStdout \
|
||||
"git ls-tree -r -t --name-only $gitTree | tr '[:upper:]' '[:lower:]' | sort | uniq --repeated" \
|
||||
"git ls-tree: path names that only differ in case:"
|
||||
|
||||
checkEmptyStdout \
|
||||
"git grep -l \$'\t' $gitTree -- *.cpp *.h *.cu *.bat *.bs | cut -d: -f2-" \
|
||||
"files with hard tabs encountered"
|
||||
|
||||
checkEmptyStdout \
|
||||
"for i in .gitattributes .gitignore .gitmodules LICENSE.md; do test -z \$(git ls-tree --name-only $gitTree \"\$i\") && echo \"\$i\"; done" \
|
||||
"Critical file(s) missing"
|
||||
|
||||
# TODO line ending checks
|
||||
# TODO byte order mark and non-ASCII
|
||||
|
||||
if [ $errorCount -ne 0 ]
|
||||
then
|
||||
echo "=============================================================================="
|
||||
echo FATAL: $errorCount error\(s\)
|
||||
exit 1
|
||||
fi
|
||||
exit 0
|
|
@ -3,48 +3,48 @@
|
|||
REM Command file for Sphinx documentation
|
||||
|
||||
if "%SPHINXBUILD%" == "" (
|
||||
set SPHINXBUILD=sphinx-build
|
||||
set SPHINXBUILD=sphinx-build
|
||||
)
|
||||
set BUILDDIR=_build
|
||||
set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
|
||||
set I18NSPHINXOPTS=%SPHINXOPTS% .
|
||||
if NOT "%PAPER%" == "" (
|
||||
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
|
||||
set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
|
||||
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
|
||||
set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
|
||||
)
|
||||
|
||||
if "%1" == "" goto help
|
||||
|
||||
if "%1" == "help" (
|
||||
:help
|
||||
echo.Please use `make ^<target^>` where ^<target^> is one of
|
||||
echo. html to make standalone HTML files
|
||||
echo. dirhtml to make HTML files named index.html in directories
|
||||
echo. singlehtml to make a single large HTML file
|
||||
echo. pickle to make pickle files
|
||||
echo. json to make JSON files
|
||||
echo. htmlhelp to make HTML files and a HTML help project
|
||||
echo. qthelp to make HTML files and a qthelp project
|
||||
echo. devhelp to make HTML files and a Devhelp project
|
||||
echo. epub to make an epub
|
||||
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
|
||||
echo. text to make text files
|
||||
echo. man to make manual pages
|
||||
echo. texinfo to make Texinfo files
|
||||
echo. gettext to make PO message catalogs
|
||||
echo. changes to make an overview over all changed/added/deprecated items
|
||||
echo. xml to make Docutils-native XML files
|
||||
echo. pseudoxml to make pseudoxml-XML files for display purposes
|
||||
echo. linkcheck to check all external links for integrity
|
||||
echo. doctest to run all doctests embedded in the documentation if enabled
|
||||
echo. coverage to run coverage check of the documentation if enabled
|
||||
goto end
|
||||
:help
|
||||
echo.Please use `make ^<target^>` where ^<target^> is one of
|
||||
echo. html to make standalone HTML files
|
||||
echo. dirhtml to make HTML files named index.html in directories
|
||||
echo. singlehtml to make a single large HTML file
|
||||
echo. pickle to make pickle files
|
||||
echo. json to make JSON files
|
||||
echo. htmlhelp to make HTML files and a HTML help project
|
||||
echo. qthelp to make HTML files and a qthelp project
|
||||
echo. devhelp to make HTML files and a Devhelp project
|
||||
echo. epub to make an epub
|
||||
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
|
||||
echo. text to make text files
|
||||
echo. man to make manual pages
|
||||
echo. texinfo to make Texinfo files
|
||||
echo. gettext to make PO message catalogs
|
||||
echo. changes to make an overview over all changed/added/deprecated items
|
||||
echo. xml to make Docutils-native XML files
|
||||
echo. pseudoxml to make pseudoxml-XML files for display purposes
|
||||
echo. linkcheck to check all external links for integrity
|
||||
echo. doctest to run all doctests embedded in the documentation if enabled
|
||||
echo. coverage to run coverage check of the documentation if enabled
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "clean" (
|
||||
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
|
||||
del /q /s %BUILDDIR%\*
|
||||
goto end
|
||||
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
|
||||
del /q /s %BUILDDIR%\*
|
||||
goto end
|
||||
)
|
||||
|
||||
|
||||
|
@ -58,206 +58,206 @@ goto sphinx_ok
|
|||
set SPHINXBUILD=python -m sphinx.__init__
|
||||
%SPHINXBUILD% 2> nul
|
||||
if errorlevel 9009 (
|
||||
echo.
|
||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||
echo.may add the Sphinx directory to PATH.
|
||||
echo.
|
||||
echo.If you don't have Sphinx installed, grab it from
|
||||
echo.http://sphinx-doc.org/
|
||||
exit /b 1
|
||||
echo.
|
||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||
echo.may add the Sphinx directory to PATH.
|
||||
echo.
|
||||
echo.If you don't have Sphinx installed, grab it from
|
||||
echo.http://sphinx-doc.org/
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
:sphinx_ok
|
||||
|
||||
|
||||
if "%1" == "html" (
|
||||
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
|
||||
goto end
|
||||
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "dirhtml" (
|
||||
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
|
||||
goto end
|
||||
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "singlehtml" (
|
||||
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
|
||||
goto end
|
||||
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "pickle" (
|
||||
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the pickle files.
|
||||
goto end
|
||||
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the pickle files.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "json" (
|
||||
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the JSON files.
|
||||
goto end
|
||||
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the JSON files.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "htmlhelp" (
|
||||
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run HTML Help Workshop with the ^
|
||||
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run HTML Help Workshop with the ^
|
||||
.hhp project file in %BUILDDIR%/htmlhelp.
|
||||
goto end
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "qthelp" (
|
||||
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run "qcollectiongenerator" with the ^
|
||||
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run "qcollectiongenerator" with the ^
|
||||
.qhcp project file in %BUILDDIR%/qthelp, like this:
|
||||
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\CNTK15.qhcp
|
||||
echo.To view the help file:
|
||||
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\CNTK15.ghc
|
||||
goto end
|
||||
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\CNTK15.qhcp
|
||||
echo.To view the help file:
|
||||
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\CNTK15.ghc
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "devhelp" (
|
||||
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished.
|
||||
goto end
|
||||
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "epub" (
|
||||
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The epub file is in %BUILDDIR%/epub.
|
||||
goto end
|
||||
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The epub file is in %BUILDDIR%/epub.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latex" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latexpdf" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
cd %BUILDDIR%/latex
|
||||
make all-pdf
|
||||
cd %~dp0
|
||||
echo.
|
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
cd %BUILDDIR%/latex
|
||||
make all-pdf
|
||||
cd %~dp0
|
||||
echo.
|
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latexpdfja" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
cd %BUILDDIR%/latex
|
||||
make all-pdf-ja
|
||||
cd %~dp0
|
||||
echo.
|
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
cd %BUILDDIR%/latex
|
||||
make all-pdf-ja
|
||||
cd %~dp0
|
||||
echo.
|
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "text" (
|
||||
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The text files are in %BUILDDIR%/text.
|
||||
goto end
|
||||
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The text files are in %BUILDDIR%/text.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "man" (
|
||||
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The manual pages are in %BUILDDIR%/man.
|
||||
goto end
|
||||
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The manual pages are in %BUILDDIR%/man.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "texinfo" (
|
||||
%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
|
||||
goto end
|
||||
%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "gettext" (
|
||||
%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
|
||||
goto end
|
||||
%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "changes" (
|
||||
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.The overview file is in %BUILDDIR%/changes.
|
||||
goto end
|
||||
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.The overview file is in %BUILDDIR%/changes.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "linkcheck" (
|
||||
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Link check complete; look for any errors in the above output ^
|
||||
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Link check complete; look for any errors in the above output ^
|
||||
or in %BUILDDIR%/linkcheck/output.txt.
|
||||
goto end
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "doctest" (
|
||||
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Testing of doctests in the sources finished, look at the ^
|
||||
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Testing of doctests in the sources finished, look at the ^
|
||||
results in %BUILDDIR%/doctest/output.txt.
|
||||
goto end
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "coverage" (
|
||||
%SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Testing of coverage in the sources finished, look at the ^
|
||||
%SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Testing of coverage in the sources finished, look at the ^
|
||||
results in %BUILDDIR%/coverage/python.txt.
|
||||
goto end
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "xml" (
|
||||
%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The XML files are in %BUILDDIR%/xml.
|
||||
goto end
|
||||
%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The XML files are in %BUILDDIR%/xml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "pseudoxml" (
|
||||
%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
|
||||
goto end
|
||||
%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
|
||||
goto end
|
||||
)
|
||||
|
||||
:end
|
||||
|
|
|
@ -3,48 +3,48 @@
|
|||
REM Command file for Sphinx documentation
|
||||
|
||||
if "%SPHINXBUILD%" == "" (
|
||||
set SPHINXBUILD=sphinx-build
|
||||
set SPHINXBUILD=sphinx-build
|
||||
)
|
||||
set BUILDDIR=_build
|
||||
set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
|
||||
set I18NSPHINXOPTS=%SPHINXOPTS% .
|
||||
if NOT "%PAPER%" == "" (
|
||||
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
|
||||
set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
|
||||
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
|
||||
set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
|
||||
)
|
||||
|
||||
if "%1" == "" goto help
|
||||
|
||||
if "%1" == "help" (
|
||||
:help
|
||||
echo.Please use `make ^<target^>` where ^<target^> is one of
|
||||
echo. html to make standalone HTML files
|
||||
echo. dirhtml to make HTML files named index.html in directories
|
||||
echo. singlehtml to make a single large HTML file
|
||||
echo. pickle to make pickle files
|
||||
echo. json to make JSON files
|
||||
echo. htmlhelp to make HTML files and a HTML help project
|
||||
echo. qthelp to make HTML files and a qthelp project
|
||||
echo. devhelp to make HTML files and a Devhelp project
|
||||
echo. epub to make an epub
|
||||
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
|
||||
echo. text to make text files
|
||||
echo. man to make manual pages
|
||||
echo. texinfo to make Texinfo files
|
||||
echo. gettext to make PO message catalogs
|
||||
echo. changes to make an overview over all changed/added/deprecated items
|
||||
echo. xml to make Docutils-native XML files
|
||||
echo. pseudoxml to make pseudoxml-XML files for display purposes
|
||||
echo. linkcheck to check all external links for integrity
|
||||
echo. doctest to run all doctests embedded in the documentation if enabled
|
||||
echo. coverage to run coverage check of the documentation if enabled
|
||||
goto end
|
||||
:help
|
||||
echo.Please use `make ^<target^>` where ^<target^> is one of
|
||||
echo. html to make standalone HTML files
|
||||
echo. dirhtml to make HTML files named index.html in directories
|
||||
echo. singlehtml to make a single large HTML file
|
||||
echo. pickle to make pickle files
|
||||
echo. json to make JSON files
|
||||
echo. htmlhelp to make HTML files and a HTML help project
|
||||
echo. qthelp to make HTML files and a qthelp project
|
||||
echo. devhelp to make HTML files and a Devhelp project
|
||||
echo. epub to make an epub
|
||||
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
|
||||
echo. text to make text files
|
||||
echo. man to make manual pages
|
||||
echo. texinfo to make Texinfo files
|
||||
echo. gettext to make PO message catalogs
|
||||
echo. changes to make an overview over all changed/added/deprecated items
|
||||
echo. xml to make Docutils-native XML files
|
||||
echo. pseudoxml to make pseudoxml-XML files for display purposes
|
||||
echo. linkcheck to check all external links for integrity
|
||||
echo. doctest to run all doctests embedded in the documentation if enabled
|
||||
echo. coverage to run coverage check of the documentation if enabled
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "clean" (
|
||||
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
|
||||
del /q /s %BUILDDIR%\*
|
||||
goto end
|
||||
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
|
||||
del /q /s %BUILDDIR%\*
|
||||
goto end
|
||||
)
|
||||
|
||||
|
||||
|
@ -58,206 +58,206 @@ goto sphinx_ok
|
|||
set SPHINXBUILD=python -m sphinx.__init__
|
||||
%SPHINXBUILD% 2> nul
|
||||
if errorlevel 9009 (
|
||||
echo.
|
||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||
echo.may add the Sphinx directory to PATH.
|
||||
echo.
|
||||
echo.If you don't have Sphinx installed, grab it from
|
||||
echo.http://sphinx-doc.org/
|
||||
exit /b 1
|
||||
echo.
|
||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||
echo.may add the Sphinx directory to PATH.
|
||||
echo.
|
||||
echo.If you don't have Sphinx installed, grab it from
|
||||
echo.http://sphinx-doc.org/
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
:sphinx_ok
|
||||
|
||||
|
||||
if "%1" == "html" (
|
||||
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
|
||||
goto end
|
||||
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "dirhtml" (
|
||||
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
|
||||
goto end
|
||||
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "singlehtml" (
|
||||
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
|
||||
goto end
|
||||
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "pickle" (
|
||||
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the pickle files.
|
||||
goto end
|
||||
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the pickle files.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "json" (
|
||||
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the JSON files.
|
||||
goto end
|
||||
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the JSON files.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "htmlhelp" (
|
||||
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run HTML Help Workshop with the ^
|
||||
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run HTML Help Workshop with the ^
|
||||
.hhp project file in %BUILDDIR%/htmlhelp.
|
||||
goto end
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "qthelp" (
|
||||
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run "qcollectiongenerator" with the ^
|
||||
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run "qcollectiongenerator" with the ^
|
||||
.qhcp project file in %BUILDDIR%/qthelp, like this:
|
||||
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\CNTK15.qhcp
|
||||
echo.To view the help file:
|
||||
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\CNTK15.ghc
|
||||
goto end
|
||||
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\CNTK15.qhcp
|
||||
echo.To view the help file:
|
||||
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\CNTK15.ghc
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "devhelp" (
|
||||
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished.
|
||||
goto end
|
||||
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "epub" (
|
||||
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The epub file is in %BUILDDIR%/epub.
|
||||
goto end
|
||||
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The epub file is in %BUILDDIR%/epub.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latex" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latexpdf" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
cd %BUILDDIR%/latex
|
||||
make all-pdf
|
||||
cd %~dp0
|
||||
echo.
|
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
cd %BUILDDIR%/latex
|
||||
make all-pdf
|
||||
cd %~dp0
|
||||
echo.
|
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latexpdfja" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
cd %BUILDDIR%/latex
|
||||
make all-pdf-ja
|
||||
cd %~dp0
|
||||
echo.
|
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
cd %BUILDDIR%/latex
|
||||
make all-pdf-ja
|
||||
cd %~dp0
|
||||
echo.
|
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "text" (
|
||||
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The text files are in %BUILDDIR%/text.
|
||||
goto end
|
||||
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The text files are in %BUILDDIR%/text.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "man" (
|
||||
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The manual pages are in %BUILDDIR%/man.
|
||||
goto end
|
||||
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The manual pages are in %BUILDDIR%/man.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "texinfo" (
|
||||
%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
|
||||
goto end
|
||||
%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "gettext" (
|
||||
%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
|
||||
goto end
|
||||
%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "changes" (
|
||||
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.The overview file is in %BUILDDIR%/changes.
|
||||
goto end
|
||||
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.The overview file is in %BUILDDIR%/changes.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "linkcheck" (
|
||||
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Link check complete; look for any errors in the above output ^
|
||||
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Link check complete; look for any errors in the above output ^
|
||||
or in %BUILDDIR%/linkcheck/output.txt.
|
||||
goto end
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "doctest" (
|
||||
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Testing of doctests in the sources finished, look at the ^
|
||||
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Testing of doctests in the sources finished, look at the ^
|
||||
results in %BUILDDIR%/doctest/output.txt.
|
||||
goto end
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "coverage" (
|
||||
%SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Testing of coverage in the sources finished, look at the ^
|
||||
%SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Testing of coverage in the sources finished, look at the ^
|
||||
results in %BUILDDIR%/coverage/python.txt.
|
||||
goto end
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "xml" (
|
||||
%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The XML files are in %BUILDDIR%/xml.
|
||||
goto end
|
||||
%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The XML files are in %BUILDDIR%/xml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "pseudoxml" (
|
||||
%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
|
||||
goto end
|
||||
%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
|
||||
goto end
|
||||
)
|
||||
|
||||
:end
|
||||
|
|
Загрузка…
Ссылка в новой задаче