1*1cd03ba3SJeremy Kemp #include <clpeak.h>
2*1cd03ba3SJeremy Kemp
3*1cd03ba3SJeremy Kemp #define DEFAULT_XML_FILE_NAME "clpeak_results.xml"
4*1cd03ba3SJeremy Kemp
5*1cd03ba3SJeremy Kemp static const char *helpStr =
6*1cd03ba3SJeremy Kemp "\n clpeak [OPTIONS]"
7*1cd03ba3SJeremy Kemp "\n"
8*1cd03ba3SJeremy Kemp "\n OPTIONS:"
9*1cd03ba3SJeremy Kemp "\n -p, --platform num choose platform (num starts with 0)"
10*1cd03ba3SJeremy Kemp "\n -d, --device num choose device (num starts with 0)"
11*1cd03ba3SJeremy Kemp "\n -pn, --platformName name choose platform name"
12*1cd03ba3SJeremy Kemp "\n -dn, --deviceName name choose device name"
13*1cd03ba3SJeremy Kemp "\n -tn, --testName name choose test name"
14*1cd03ba3SJeremy Kemp "\n --use-event-timer time using cl events instead of std chrono timer"
15*1cd03ba3SJeremy Kemp "\n hide driver latencies [default: No]"
16*1cd03ba3SJeremy Kemp "\n --global-bandwidth selectively run global bandwidth test"
17*1cd03ba3SJeremy Kemp "\n --compute-hp selectively run half precision compute test"
18*1cd03ba3SJeremy Kemp "\n --compute-sp selectively run single precision compute test"
19*1cd03ba3SJeremy Kemp "\n --compute-dp selectively run double precision compute test"
20*1cd03ba3SJeremy Kemp "\n --compute-integer selectively run integer compute test"
21*1cd03ba3SJeremy Kemp "\n --compute-intfast selectively run integer 24bit compute test"
22*1cd03ba3SJeremy Kemp "\n --compute-char selectively run char (integer 8bit) compute test"
23*1cd03ba3SJeremy Kemp "\n --compute-short selectively run short (integer 16bit) compute test"
24*1cd03ba3SJeremy Kemp "\n --transfer-bandwidth selectively run transfer bandwidth test"
25*1cd03ba3SJeremy Kemp "\n --kernel-latency selectively run kernel latency test"
26*1cd03ba3SJeremy Kemp "\n --all-tests run all above tests [default]"
27*1cd03ba3SJeremy Kemp "\n --enable-xml-dump Dump results to xml file"
28*1cd03ba3SJeremy Kemp "\n -f, --xml-file file_name specify file name for xml dump"
29*1cd03ba3SJeremy Kemp "\n -v, --version display version"
30*1cd03ba3SJeremy Kemp "\n -h, --help display help message"
31*1cd03ba3SJeremy Kemp "\n";
32*1cd03ba3SJeremy Kemp
parseArgs(int argc,char ** argv)33*1cd03ba3SJeremy Kemp int clPeak::parseArgs(int argc, char **argv)
34*1cd03ba3SJeremy Kemp {
35*1cd03ba3SJeremy Kemp bool forcedTests = false;
36*1cd03ba3SJeremy Kemp bool enableXml = false;
37*1cd03ba3SJeremy Kemp string xmlFileName;
38*1cd03ba3SJeremy Kemp
39*1cd03ba3SJeremy Kemp for (int i = 1; i < argc; i++)
40*1cd03ba3SJeremy Kemp {
41*1cd03ba3SJeremy Kemp if ((strcmp(argv[i], "-h") == 0) || (strcmp(argv[i], "--help") == 0))
42*1cd03ba3SJeremy Kemp {
43*1cd03ba3SJeremy Kemp log->print(helpStr);
44*1cd03ba3SJeremy Kemp log->print(NEWLINE);
45*1cd03ba3SJeremy Kemp exit(0);
46*1cd03ba3SJeremy Kemp }
47*1cd03ba3SJeremy Kemp else if ((strcmp(argv[i], "-v") == 0) || (strcmp(argv[i], "--version") == 0))
48*1cd03ba3SJeremy Kemp {
49*1cd03ba3SJeremy Kemp stringstream versionStr;
50*1cd03ba3SJeremy Kemp versionStr << "clpeak version: " << VERSION_STR;
51*1cd03ba3SJeremy Kemp
52*1cd03ba3SJeremy Kemp log->print(versionStr.str().c_str());
53*1cd03ba3SJeremy Kemp log->print(NEWLINE);
54*1cd03ba3SJeremy Kemp exit(0);
55*1cd03ba3SJeremy Kemp }
56*1cd03ba3SJeremy Kemp else if ((strcmp(argv[i], "-p") == 0) || (strcmp(argv[i], "--platform") == 0))
57*1cd03ba3SJeremy Kemp {
58*1cd03ba3SJeremy Kemp if ((i + 1) < argc)
59*1cd03ba3SJeremy Kemp {
60*1cd03ba3SJeremy Kemp forcePlatform = true;
61*1cd03ba3SJeremy Kemp specifiedPlatform = strtoul(argv[i + 1], NULL, 0);
62*1cd03ba3SJeremy Kemp i++;
63*1cd03ba3SJeremy Kemp }
64*1cd03ba3SJeremy Kemp }
65*1cd03ba3SJeremy Kemp else if ((strcmp(argv[i], "-d") == 0) || (strcmp(argv[i], "--device") == 0))
66*1cd03ba3SJeremy Kemp {
67*1cd03ba3SJeremy Kemp if ((i + 1) < argc)
68*1cd03ba3SJeremy Kemp {
69*1cd03ba3SJeremy Kemp forceDevice = true;
70*1cd03ba3SJeremy Kemp specifiedDevice = strtoul(argv[i + 1], NULL, 0);
71*1cd03ba3SJeremy Kemp i++;
72*1cd03ba3SJeremy Kemp }
73*1cd03ba3SJeremy Kemp }
74*1cd03ba3SJeremy Kemp else if ((strcmp(argv[i], "-pn") == 0) || (strcmp(argv[i], "--platformName") == 0))
75*1cd03ba3SJeremy Kemp {
76*1cd03ba3SJeremy Kemp if ((i + 1) < argc)
77*1cd03ba3SJeremy Kemp {
78*1cd03ba3SJeremy Kemp forcePlatformName = true;
79*1cd03ba3SJeremy Kemp specifiedPlatformName = argv[i + 1];
80*1cd03ba3SJeremy Kemp i++;
81*1cd03ba3SJeremy Kemp }
82*1cd03ba3SJeremy Kemp }
83*1cd03ba3SJeremy Kemp else if ((strcmp(argv[i], "-dn") == 0) || (strcmp(argv[i], "--deviceName") == 0))
84*1cd03ba3SJeremy Kemp {
85*1cd03ba3SJeremy Kemp if ((i + 1) < argc)
86*1cd03ba3SJeremy Kemp {
87*1cd03ba3SJeremy Kemp forceDeviceName = true;
88*1cd03ba3SJeremy Kemp specifiedDeviceName = argv[i + 1];
89*1cd03ba3SJeremy Kemp i++;
90*1cd03ba3SJeremy Kemp }
91*1cd03ba3SJeremy Kemp }
92*1cd03ba3SJeremy Kemp else if ((strcmp(argv[i], "-tn") == 0) || (strcmp(argv[i], "--testName") == 0))
93*1cd03ba3SJeremy Kemp {
94*1cd03ba3SJeremy Kemp if ((i + 1) < argc)
95*1cd03ba3SJeremy Kemp {
96*1cd03ba3SJeremy Kemp forceTest = true;
97*1cd03ba3SJeremy Kemp specifiedTestName = argv[i + 1];
98*1cd03ba3SJeremy Kemp i++;
99*1cd03ba3SJeremy Kemp }
100*1cd03ba3SJeremy Kemp }
101*1cd03ba3SJeremy Kemp else if (strcmp(argv[i], "--use-event-timer") == 0)
102*1cd03ba3SJeremy Kemp {
103*1cd03ba3SJeremy Kemp useEventTimer = true;
104*1cd03ba3SJeremy Kemp }
105*1cd03ba3SJeremy Kemp else if ((strcmp(argv[i], "--global-bandwidth") == 0) || (strcmp(argv[i], "--compute-hp") == 0) || (strcmp(argv[i], "--compute-sp") == 0) || (strcmp(argv[i], "--compute-dp") == 0) || (strcmp(argv[i], "--compute-integer") == 0) || (strcmp(argv[i], "--compute-intfast") == 0) || (strcmp(argv[i], "--transfer-bandwidth") == 0) || (strcmp(argv[i], "--kernel-latency") == 0) || (strcmp(argv[i], "--compute-char") == 0) || (strcmp(argv[i], "--compute-short") == 0))
106*1cd03ba3SJeremy Kemp {
107*1cd03ba3SJeremy Kemp // Disable all and enable only selected ones
108*1cd03ba3SJeremy Kemp if (!forcedTests)
109*1cd03ba3SJeremy Kemp {
110*1cd03ba3SJeremy Kemp isGlobalBW = isComputeHP = isComputeSP = isComputeDP = isComputeInt = isComputeIntFast = isComputeChar = isComputeShort = isTransferBW = isKernelLatency = false;
111*1cd03ba3SJeremy Kemp forcedTests = true;
112*1cd03ba3SJeremy Kemp }
113*1cd03ba3SJeremy Kemp
114*1cd03ba3SJeremy Kemp if (strcmp(argv[i], "--global-bandwidth") == 0)
115*1cd03ba3SJeremy Kemp {
116*1cd03ba3SJeremy Kemp isGlobalBW = true;
117*1cd03ba3SJeremy Kemp }
118*1cd03ba3SJeremy Kemp else if (strcmp(argv[i], "--compute-hp") == 0)
119*1cd03ba3SJeremy Kemp {
120*1cd03ba3SJeremy Kemp isComputeHP = true;
121*1cd03ba3SJeremy Kemp }
122*1cd03ba3SJeremy Kemp else if (strcmp(argv[i], "--compute-sp") == 0)
123*1cd03ba3SJeremy Kemp {
124*1cd03ba3SJeremy Kemp isComputeSP = true;
125*1cd03ba3SJeremy Kemp }
126*1cd03ba3SJeremy Kemp else if (strcmp(argv[i], "--compute-dp") == 0)
127*1cd03ba3SJeremy Kemp {
128*1cd03ba3SJeremy Kemp isComputeDP = true;
129*1cd03ba3SJeremy Kemp }
130*1cd03ba3SJeremy Kemp else if (strcmp(argv[i], "--compute-integer") == 0)
131*1cd03ba3SJeremy Kemp {
132*1cd03ba3SJeremy Kemp isComputeInt = true;
133*1cd03ba3SJeremy Kemp }
134*1cd03ba3SJeremy Kemp else if (strcmp(argv[i], "--compute-intfast") == 0)
135*1cd03ba3SJeremy Kemp {
136*1cd03ba3SJeremy Kemp isComputeIntFast = true;
137*1cd03ba3SJeremy Kemp }
138*1cd03ba3SJeremy Kemp else if (strcmp(argv[i], "--compute-char") == 0)
139*1cd03ba3SJeremy Kemp {
140*1cd03ba3SJeremy Kemp isComputeChar = true;
141*1cd03ba3SJeremy Kemp }
142*1cd03ba3SJeremy Kemp else if (strcmp(argv[i], "--compute-short") == 0)
143*1cd03ba3SJeremy Kemp {
144*1cd03ba3SJeremy Kemp isComputeShort = true;
145*1cd03ba3SJeremy Kemp }
146*1cd03ba3SJeremy Kemp else if (strcmp(argv[i], "--transfer-bandwidth") == 0)
147*1cd03ba3SJeremy Kemp {
148*1cd03ba3SJeremy Kemp isTransferBW = true;
149*1cd03ba3SJeremy Kemp }
150*1cd03ba3SJeremy Kemp else if (strcmp(argv[i], "--kernel-latency") == 0)
151*1cd03ba3SJeremy Kemp {
152*1cd03ba3SJeremy Kemp isKernelLatency = true;
153*1cd03ba3SJeremy Kemp }
154*1cd03ba3SJeremy Kemp }
155*1cd03ba3SJeremy Kemp else if (strcmp(argv[i], "--all-tests") == 0)
156*1cd03ba3SJeremy Kemp {
157*1cd03ba3SJeremy Kemp isGlobalBW = isComputeHP = isComputeSP = isComputeDP = isComputeInt = isComputeIntFast = isTransferBW = isKernelLatency = true;
158*1cd03ba3SJeremy Kemp }
159*1cd03ba3SJeremy Kemp else if (strcmp(argv[i], "--enable-xml-dump") == 0)
160*1cd03ba3SJeremy Kemp {
161*1cd03ba3SJeremy Kemp enableXml = true;
162*1cd03ba3SJeremy Kemp if (xmlFileName.length() < 1)
163*1cd03ba3SJeremy Kemp {
164*1cd03ba3SJeremy Kemp xmlFileName = DEFAULT_XML_FILE_NAME;
165*1cd03ba3SJeremy Kemp }
166*1cd03ba3SJeremy Kemp }
167*1cd03ba3SJeremy Kemp else if ((strcmp(argv[i], "-f") == 0) || (strcmp(argv[i], "--xml-file") == 0))
168*1cd03ba3SJeremy Kemp {
169*1cd03ba3SJeremy Kemp if ((i + 1) < argc)
170*1cd03ba3SJeremy Kemp {
171*1cd03ba3SJeremy Kemp enableXml = true;
172*1cd03ba3SJeremy Kemp xmlFileName = argv[i + 1];
173*1cd03ba3SJeremy Kemp i++;
174*1cd03ba3SJeremy Kemp }
175*1cd03ba3SJeremy Kemp }
176*1cd03ba3SJeremy Kemp else
177*1cd03ba3SJeremy Kemp {
178*1cd03ba3SJeremy Kemp log->print(helpStr);
179*1cd03ba3SJeremy Kemp log->print(NEWLINE);
180*1cd03ba3SJeremy Kemp exit(-1);
181*1cd03ba3SJeremy Kemp }
182*1cd03ba3SJeremy Kemp }
183*1cd03ba3SJeremy Kemp
184*1cd03ba3SJeremy Kemp // Allocate logger after parsing
185*1cd03ba3SJeremy Kemp log = new logger(enableXml, xmlFileName);
186*1cd03ba3SJeremy Kemp return 0;
187*1cd03ba3SJeremy Kemp }
188