-
Notifications
You must be signed in to change notification settings - Fork 440
Expand file tree
/
Copy pathCommandLineArgs.h
More file actions
178 lines (162 loc) · 8.43 KB
/
CommandLineArgs.h
File metadata and controls
178 lines (162 loc) · 8.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#pragma once
#include "Common.h"
class CommandLineArgs
{
public:
CommandLineArgs(){};
CommandLineArgs(const std::vector<std::wstring>& args);
void PrintUsage();
bool IsConcurrentLoad() const { return m_concurrentLoad; }
bool IsUsingGPUHighPerformance() const { return m_useGPUHighPerformance; }
bool IsUsingGPUMinPower() const { return m_useGPUMinPower; }
bool UseBGR() const { return m_useBGR; }
bool IsUsingGPUBoundInput() const { return m_useGPUBoundInput; }
bool IsPerformanceCapture() const { return m_perfCapture; }
bool IsPerformanceConsoleOutputVerbose() const { return m_perfConsoleOutputAll; }
bool IsEvaluationDebugOutputEnabled() const { return m_evaluation_debug_output; }
bool TerseOutput() const { return m_terseOutput; }
bool IsPerIterationCapture() const { return m_perIterCapture; }
bool IsCreateDeviceOnClient() const { return m_createDeviceOnClient; }
bool IsAutoScale() const { return m_autoScale; }
bool IsOutputPerf() const { return m_perfOutput; }
bool IsSaveTensor() const { return m_saveTensor; }
bool IsTimeLimitIterations() const { return m_timeLimitIterations; }
BitmapInterpolationMode AutoScaleInterpMode() const { return m_autoScaleInterpMode; }
const std::vector<std::wstring>& ImagePaths() const { return m_imagePaths; }
const std::wstring& CsvPath() const { return m_csvData; }
const std::wstring& OutputPath() const { return m_perfOutputPath; }
const std::wstring& FolderPath() const { return m_modelFolderPath; }
const std::wstring& ModelPath() const { return m_modelPath; }
const std::wstring& PerIterationDataPath() const { return m_perIterationDataPath; }
std::vector<std::pair<std::string, std::string>>& GetPerformanceFileMetadata() { return m_perfFileMetadata; }
const std::wstring& GetGPUAdapterName() const { return m_adapterName; }
bool UseRGB() const
{
// If an image is specified without flags, we load it as a BGR image by default
return m_useRGB || (!m_imagePaths.empty() && !m_useBGR && !m_useTensor);
}
bool UseTensor() const
{
// Tensor input is the default input if no flag is specified
return m_useTensor || (!m_useBGR && !UseRGB());
}
bool UseGPU() const { return m_useGPU || (!m_useCPU && !m_useGPUHighPerformance && !m_useGPUMinPower); }
bool UseCPU() const
{
// CPU is the default device if no flag is specified
return m_useCPU || (!m_useGPU && !m_useGPUHighPerformance && !m_useGPUMinPower);
}
bool UseCPUBoundInput() const
{
// CPU is the default input binding if no flag is specified
return m_useCPUBoundInput || !m_useGPUBoundInput;
}
bool CreateDeviceInWinML() const
{
// By Default we create the device in WinML if no flag is specified
return m_createDeviceInWinML || !m_createDeviceOnClient;
}
bool IsGarbageInput() const
{
// When there is no image or csv input provided, then garbage input binding is used.
return m_imagePaths.empty() && m_csvData.empty();
}
bool IsCSVInput() const { return m_imagePaths.empty() && !m_csvData.empty(); }
bool IsImageInput() const { return !m_imagePaths.empty() && m_csvData.empty(); }
uint32_t NumIterations() const { return m_numIterations; }
uint32_t NumLoadIterations() const { return m_numLoadIterations; }
uint32_t NumSessionCreationIterations() const { return m_numSessionIterations; }
double IterationTimeLimit() const { return m_iterationTimeLimitMilliseconds; }
uint32_t NumThreads() const { return m_numThreads; }
uint32_t ThreadInterval() const { return m_threadInterval; } // Thread interval in milliseconds
uint32_t TopK() const { return m_topK; }
void ToggleCPU(bool useCPU) { m_useCPU = useCPU; }
void ToggleGPU(bool useGPU) { m_useGPU = useGPU; }
void ToggleGPUHighPerformance(bool useGPUHighPerformance) { m_useGPUHighPerformance = useGPUHighPerformance; }
void ToggleUseGPUMinPower(bool useGPUMinPower) { m_useGPUMinPower = useGPUMinPower; }
void ToggleConcurrentLoad(bool concurrentLoad) { m_concurrentLoad = concurrentLoad; }
void ToggleCreateDeviceOnClient(bool createDeviceOnClient) { m_createDeviceOnClient = createDeviceOnClient; }
void ToggleCreateDeviceInWinML(bool createDeviceInWinML) { m_createDeviceInWinML = createDeviceInWinML; }
void ToggleCPUBoundInput(bool useCPUBoundInput) { m_useCPUBoundInput = useCPUBoundInput; }
void ToggleGPUBoundInput(bool useGPUBoundInput) { m_useGPUBoundInput = useGPUBoundInput; }
void ToggleUseRGB(bool useRGBImage) { m_useRGB = useRGBImage; }
void ToggleUseBGR(bool useBGRImage) { m_useBGR = useBGRImage; }
void ToggleUseTensor(bool useTensor) { m_useTensor = useTensor; }
void TogglePerformanceCapture(bool perfCapture) { m_perfCapture = perfCapture; }
void ToggleIgnoreFirstRun(bool ignoreFirstRun) { m_ignoreFirstRun = ignoreFirstRun; }
void TogglePerIterationPerformanceCapture(bool perIterCapture) { m_perIterCapture = perIterCapture; }
void ToggleEvaluationDebugOutput(bool debug) { m_evaluation_debug_output = debug; }
void ToggleTerseOutput(bool terseOutput) { m_terseOutput = terseOutput; }
void TogglePerfOutput(bool perfOutput) { m_perfOutput = perfOutput; }
void SetModelPath(const std::wstring& modelPath) { m_modelPath = modelPath; }
void SetPerIterationDataPath(const std::wstring& perIterationDataPath)
{
m_perIterationDataPath = perIterationDataPath;
}
void SetInputDataPath(const std::wstring& inputDataPath) { m_inputData = inputDataPath; }
void SetNumThreads(unsigned numThreads) { m_numThreads = numThreads; }
void SetThreadInterval(unsigned threadInterval) { m_threadInterval = threadInterval; }
void SetTopK(unsigned k) { m_topK = k; }
void SetPerformanceCSVPath(const std::wstring& performanceCSVPath) { m_perfOutputPath = performanceCSVPath; }
void SetRunIterations(const uint32_t iterations) { m_numIterations = iterations; }
void SetSessionCreationIterations(const uint32_t iterations) { m_numSessionIterations = iterations; }
void SetLoadIterations(const uint32_t iterations) { m_numLoadIterations = iterations; }
void AddPerformanceFileMetadata(const std::string& key, const std::string& value)
{
m_perfFileMetadata.push_back(std::make_pair(key, value));
}
// Stop iterating when total time of iterations after the first iteration exceeds time limit.
void SetIterationTimeLimit(const double milliseconds)
{
m_timeLimitIterations = true;
m_iterationTimeLimitMilliseconds = milliseconds;
}
std::wstring SaveTensorMode() const { return m_saveTensorMode; }
private:
bool m_perfCapture = false;
bool m_perfConsoleOutputAll = false;
bool m_useCPU = false;
bool m_useGPU = false;
bool m_useGPUHighPerformance = false;
bool m_useGPUMinPower = false;
bool m_concurrentLoad = false;
bool m_createDeviceOnClient = false;
bool m_createDeviceInWinML = false;
bool m_useRGB = false;
bool m_useBGR = false;
bool m_useTensor = false;
bool m_useCPUBoundInput = false;
bool m_useGPUBoundInput = false;
bool m_ignoreFirstRun = false;
bool m_evaluation_debug_output = false;
bool m_perIterCapture = false;
bool m_terseOutput = false;
bool m_autoScale = false;
bool m_perfOutput = false;
BitmapInterpolationMode m_autoScaleInterpMode = BitmapInterpolationMode::Cubic;
bool m_saveTensor = false;
bool m_timeLimitIterations = false;
std::wstring m_saveTensorMode = L"First";
std::wstring m_modelFolderPath;
std::wstring m_modelPath;
std::vector<std::wstring> m_imagePaths;
std::wstring m_inputImageFolderPath;
std::wstring m_csvData;
std::wstring m_inputData;
std::wstring m_adapterName;
std::wstring m_perfOutputPath;
std::wstring m_perIterationDataPath;
uint32_t m_numIterations = 1;
uint32_t m_numLoadIterations = 1;
uint32_t m_numSessionIterations = 1;
double m_iterationTimeLimitMilliseconds = 0;
uint32_t m_numThreads = 1;
uint32_t m_threadInterval = 0;
uint32_t m_topK = 1;
std::vector<std::pair<std::string, std::string>> m_perfFileMetadata;
void CheckNextArgument(const std::vector<std::wstring>& args, UINT i);
void CheckForInvalidArguments();
void SetupOutputDirectories(const std::wstring& sBaseOutputPath, const std::wstring& sPerfOutputPath,
const std::wstring& sPerIterationDataPath);
void PopulateInputImagePaths();
};