summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhenyu Wang <zhenyuw@linux.intel.com>2014-10-16 14:41:49 +0800
committerZhenyu Wang <zhenyuw@linux.intel.com>2014-10-16 14:41:49 +0800
commit1953adf5e7978439fc9ec25caaf977e4d28d6355 (patch)
tree48068331d38d5255d42ea36fbcec66cc14af600e
parentc68c9a368d70233e06a3cd7eaa6d3deccef937c7 (diff)
Split CPU and GPU test
New parameter as '-cpu' or '-gpu' to set CPU or GPU test. Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
-rw-r--r--MPBenchmarks/appMain.cpp395
1 files changed, 216 insertions, 179 deletions
diff --git a/MPBenchmarks/appMain.cpp b/MPBenchmarks/appMain.cpp
index f6f82bf..2992859 100644
--- a/MPBenchmarks/appMain.cpp
+++ b/MPBenchmarks/appMain.cpp
@@ -12,6 +12,9 @@
#include <QtGui/QClipboard>
#endif
+#include <string.h>
+#include <iostream>
+
struct TestResult
{
std::string title;
@@ -43,6 +46,11 @@ void print(Logger * log,const TestResult & r,int minLogSize,int maxLogSize)
log->append(s);
}
+void help(void)
+{
+ std::cout<<"Usage: tocl [-cpu]/[-gpu]\n";
+}
+
int main(int argc,char ** argv)
{
#if CONFIG_USE_QT
@@ -61,207 +69,236 @@ int main(int argc,char ** argv)
Logger * log = new Logger();
#endif
-#if 1
- // Display device info
- cl::Context * c = cl::Context::create();
- if (c != 0)
- {
- std::string s;
- if (c->getAllDeviceInfo(0,s)) log->append(s.c_str());
- delete c;
- c = 0;
- }
-#endif
+ int do_cpu = 0;
+ int do_gpu = 0;
+
+ if (argc != 2) {
+ help();
+ return -1;
+ }
+
+ if (!strcmp(argv[1], "-cpu"))
+ do_cpu = 1;
+
+ if (!strcmp(argv[1], "-gpu"))
+ do_gpu = 1;
+
+ if ((do_cpu == 0 && do_gpu == 0) ||
+ (do_cpu == 1 && do_gpu == 1)) {
+ help();
+ return -1;
+ }
+
+ if (do_gpu) {
+ // Display device info
+ cl::Context * c = cl::Context::create();
+ if (c != 0)
+ {
+ std::string s;
+ if (c->getAllDeviceInfo(0,s)) log->append(s.c_str());
+ delete c;
+ c = 0;
+ }
+ }
int minLogSize = 10;
int maxLogSize = 29;
std::vector<TestResult> allTests;
// Run all CPU tests
- for (int task=0;task<100;task++)
- {
- // Select tests here
- // if (task != 30) continue;
- // continue;
-
- CPUTask * g = 0;
- // Default values
- std::string title;
- int minNThreads = 1;
- int maxNThreads = 32;
-
- switch (task)
- {
- case 0:
- title.assign("CPU copyN");
- g = new CopyCPUTask();
- break;
- case 1:
- title.assign("CPU zeroN");
- g = new ZeroCPUTask();
- break;
-
- case 10:
- title.assign("CPU addN v1 16-bit");
- g = new AddNCPUTask(ADDN_V1,16);
- break;
- case 11:
- title.assign("CPU addN v1 32-bit");
- g = new AddNCPUTask(ADDN_V1,32);
- break;
- case 12:
- title.assign("CPU addN v1 64-bit");
- g = new AddNCPUTask(ADDN_V1,64);
- break;
-
- case 20:
- title.assign("CPU addN v2 16-bit");
- g = new AddNCPUTask(ADDN_V2,16);
- break;
- case 21:
- title.assign("CPU addN v2 32-bit");
- g = new AddNCPUTask(ADDN_V2,32);
- break;
- case 22:
- title.assign("CPU addN v2 64-bit");
- g = new AddNCPUTask(ADDN_V2,64);
- break;
-#ifndef Linux
- case 30:
- title.assign("CPU addN v3 32-bit");
- g = new AddNCPUTask(ADDN_V3,32);
- break;
-#endif
- }
- if (g == 0) continue; // nothing to do
-
- TestResult tr;
- tr.title.assign(title);
- tr.mbps.resize(1+maxLogSize,0);
- log->appendTitle(title.c_str());
- for (int nt=minNThreads;nt<=maxNThreads;nt<<=1)
- for (int ls=minLogSize;ls<=maxLogSize;ls++)
+ if (do_cpu) {
+
+ for (int task=0;task<100;task++)
+ {
+ // Select tests here
+ // if (task != 30) continue;
+ // continue;
+
+ CPUTask * g = 0;
+ // Default values
+ std::string title;
+ int minNThreads = 1;
+ int maxNThreads = 32;
+
+ switch (task)
{
- size_t sz = 1<<ls;
- double mbps = g->run(nt,sz);
- char aux[200];
- std::string usz;
- getUserSize(ls,usz);
- _snprintf(aux,200,"NT=%3d SZ=%7s %6.0f MB/s",nt,usz.c_str(),mbps);
- log->append(aux);
- tr.update(ls,mbps);
- }
+ case 0:
+ title.assign("CPU copyN");
+ g = new CopyCPUTask();
+ break;
+ case 1:
+ title.assign("CPU zeroN");
+ g = new ZeroCPUTask();
+ break;
- print(stdout,tr,minLogSize,maxLogSize);
-#if CONFIG_USE_QT
- print(log,tr,minLogSize,maxLogSize);
+ case 10:
+ title.assign("CPU addN v1 16-bit");
+ g = new AddNCPUTask(ADDN_V1,16);
+ break;
+ case 11:
+ title.assign("CPU addN v1 32-bit");
+ g = new AddNCPUTask(ADDN_V1,32);
+ break;
+ case 12:
+ title.assign("CPU addN v1 64-bit");
+ g = new AddNCPUTask(ADDN_V1,64);
+ break;
+
+ case 20:
+ title.assign("CPU addN v2 16-bit");
+ g = new AddNCPUTask(ADDN_V2,16);
+ break;
+ case 21:
+ title.assign("CPU addN v2 32-bit");
+ g = new AddNCPUTask(ADDN_V2,32);
+ break;
+ case 22:
+ title.assign("CPU addN v2 64-bit");
+ g = new AddNCPUTask(ADDN_V2,64);
+ break;
+
+#ifndef Linux
+ case 30:
+ title.assign("CPU addN v3 32-bit");
+ g = new AddNCPUTask(ADDN_V3,32);
+ break;
#endif
- allTests.push_back(tr);
- delete g;
- }
+ }
+ if (g == 0) continue; // nothing to do
- // Run all GPU tests
- for (int task=0;task<100;task++)
- {
- // Select tests here
- //continue;
- //if (task != 30) continue;
-
- GPUTask * g = 0;
- // Default values
- std::string title;
- int minWorkgroupSize = 16;
- int maxWorkgroupSize = 512;
-
- switch (task)
- {
- case 0:
- title.assign("Host to device copy");
- g = new CopyGPUTask(CopyGPUTask::HOST_TO_DEVICE_COPY,log);
- minWorkgroupSize = maxWorkgroupSize;
- break;
- case 1:
- title.assign("Device to host copy");
- g = new CopyGPUTask(CopyGPUTask::DEVICE_TO_HOST_COPY,log);
- minWorkgroupSize = maxWorkgroupSize;
- break;
- case 2:
- title.assign("copyN");
- g = new CopyGPUTask(CopyGPUTask::DEVICE_TO_DEVICE_COPY,log);
- minWorkgroupSize = maxWorkgroupSize;
- break;
- case 3:
- title.assign("zeroN 32-bit");
- g = new ZeroGPUTask(32,log);
- break;
- case 4:
- title.assign("zeroN 64-bit");
- g = new ZeroGPUTask(64,log);
- break;
-
- case 10:
- title.assign("AddN v1 16-bit");
- g = new AddNGPUTask(ADDN_V1,16,log);
- break;
- case 11:
- title.assign("AddN v1 32-bit");
- g = new AddNGPUTask(ADDN_V1,32,log);
- break;
- case 12:
- title.assign("AddN v1 64-bit");
- g = new AddNGPUTask(ADDN_V1,64,log);
- break;
-
- case 20:
- title.assign("AddN v2 16-bit");
- g = new AddNGPUTask(ADDN_V2,16,log);
- break;
- case 21:
- title.assign("AddN v2 32-bit");
- g = new AddNGPUTask(ADDN_V2,32,log);
- break;
- case 22:
- title.assign("AddN v2 64-bit");
- g = new AddNGPUTask(ADDN_V2,64,log);
- break;
-
- case 40:
- title.assign("Mul1 v1 32-bit");
- g = new Mul1GPUTask(MUL1_V1,1,log);
- break;
-
- }
- if (g == 0) continue; // nothing to do
-
- TestResult tr;
- tr.title.assign(title);
- tr.mbps.resize(1+maxLogSize,0);
- log->appendTitle(title.c_str());
- for (int wg=minWorkgroupSize;wg<=maxWorkgroupSize;wg<<=1)
- {
- char aux[1000];
- _snprintf(aux,1000,"%s - workgroup_size=%d",title.c_str(),wg);
- log->append(aux);
+ TestResult tr;
+ tr.title.assign(title);
+ tr.mbps.resize(1+maxLogSize,0);
+ log->appendTitle(title.c_str());
+ for (int nt=minNThreads;nt<=maxNThreads;nt<<=1)
for (int ls=minLogSize;ls<=maxLogSize;ls++)
{
size_t sz = 1<<ls;
- double mbps = g->run(wg,sz);
+ double mbps = g->run(nt,sz);
+ char aux[200];
std::string usz;
getUserSize(ls,usz);
- _snprintf(aux,1000,"WG=%3d SZ=%7s %6.0f MB/s",wg,usz.c_str(),mbps);
+ _snprintf(aux,200,"NT=%3d SZ=%7s %6.0f MB/s",nt,usz.c_str(),mbps);
log->append(aux);
tr.update(ls,mbps);
}
- }
+
+ print(stdout,tr,minLogSize,maxLogSize);
+#if CONFIG_USE_QT
+ print(log,tr,minLogSize,maxLogSize);
+#endif
+ allTests.push_back(tr);
+ delete g;
+ }
+
+ }
+
+ if (do_gpu) {
+
+ // Run all GPU tests
+ for (int task=0;task<100;task++)
+ {
+ // Select tests here
+ //continue;
+ //if (task != 30) continue;
+
+ GPUTask * g = 0;
+ // Default values
+ std::string title;
+ int minWorkgroupSize = 16;
+ int maxWorkgroupSize = 512;
+
+ switch (task)
+ {
+ case 0:
+ title.assign("Host to device copy");
+ g = new CopyGPUTask(CopyGPUTask::HOST_TO_DEVICE_COPY,log);
+ minWorkgroupSize = maxWorkgroupSize;
+ break;
+ case 1:
+ title.assign("Device to host copy");
+ g = new CopyGPUTask(CopyGPUTask::DEVICE_TO_HOST_COPY,log);
+ minWorkgroupSize = maxWorkgroupSize;
+ break;
+ case 2:
+ title.assign("copyN");
+ g = new CopyGPUTask(CopyGPUTask::DEVICE_TO_DEVICE_COPY,log);
+ minWorkgroupSize = maxWorkgroupSize;
+ break;
+ case 3:
+ title.assign("zeroN 32-bit");
+ g = new ZeroGPUTask(32,log);
+ break;
+ case 4:
+ title.assign("zeroN 64-bit");
+ g = new ZeroGPUTask(64,log);
+ break;
+
+ case 10:
+ title.assign("AddN v1 16-bit");
+ g = new AddNGPUTask(ADDN_V1,16,log);
+ break;
+ case 11:
+ title.assign("AddN v1 32-bit");
+ g = new AddNGPUTask(ADDN_V1,32,log);
+ break;
+ case 12:
+ title.assign("AddN v1 64-bit");
+ g = new AddNGPUTask(ADDN_V1,64,log);
+ break;
+
+ case 20:
+ title.assign("AddN v2 16-bit");
+ g = new AddNGPUTask(ADDN_V2,16,log);
+ break;
+ case 21:
+ title.assign("AddN v2 32-bit");
+ g = new AddNGPUTask(ADDN_V2,32,log);
+ break;
+ case 22:
+ title.assign("AddN v2 64-bit");
+ g = new AddNGPUTask(ADDN_V2,64,log);
+ break;
+
+ case 40:
+ title.assign("Mul1 v1 32-bit");
+ g = new Mul1GPUTask(MUL1_V1,1,log);
+ break;
+
+ }
+ if (g == 0) continue; // nothing to do
+
+ TestResult tr;
+ tr.title.assign(title);
+ tr.mbps.resize(1+maxLogSize,0);
+ log->appendTitle(title.c_str());
+ for (int wg=minWorkgroupSize;wg<=maxWorkgroupSize;wg<<=1)
+ {
+ char aux[1000];
+ _snprintf(aux,1000,"%s - workgroup_size=%d",title.c_str(),wg);
+ log->append(aux);
+ for (int ls=minLogSize;ls<=maxLogSize;ls++)
+ {
+ size_t sz = 1<<ls;
+ double mbps = g->run(wg,sz);
+ std::string usz;
+ getUserSize(ls,usz);
+ _snprintf(aux,1000,"WG=%3d SZ=%7s %6.0f MB/s",wg,usz.c_str(),mbps);
+ log->append(aux);
+ tr.update(ls,mbps);
+ }
+ }
- print(stdout,tr,minLogSize,maxLogSize);
+ print(stdout,tr,minLogSize,maxLogSize);
#if CONFIG_USE_QT
- print(log,tr,minLogSize,maxLogSize);
+ print(log,tr,minLogSize,maxLogSize);
#endif
- allTests.push_back(tr);
- delete g;
- }
+ allTests.push_back(tr);
+ delete g;
+ }
+
+ }
// Dump all results
int nt = (int)allTests.size();