annotate WordCount/oclUtils.cc @ 1:403e35dd9b6d

word count ...
author Yutaka_Kinjyo
date Tue, 12 Jul 2011 17:17:11 +0900
parents 0e6e76dbdb0f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
1 #include "oclUtils.h"
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
2 #include <fstream>
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
3 #include <vector>
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
4 #include <iostream>
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
5 #include <algorithm>
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
6 #include <stdarg.h>
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
7
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
8 // Helper function to get OpenCL error string from constant
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
9 // *********************************************************************
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
10 const char* oclErrorString(cl_int error)
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
11 {
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
12 static const char* errorString[] = {
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
13 "CL_SUCCESS",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
14 "CL_DEVICE_NOT_FOUND",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
15 "CL_DEVICE_NOT_AVAILABLE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
16 "CL_COMPILER_NOT_AVAILABLE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
17 "CL_MEM_OBJECT_ALLOCATION_FAILURE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
18 "CL_OUT_OF_RESOURCES",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
19 "CL_OUT_OF_HOST_MEMORY",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
20 "CL_PROFILING_INFO_NOT_AVAILABLE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
21 "CL_MEM_COPY_OVERLAP",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
22 "CL_IMAGE_FORMAT_MISMATCH",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
23 "CL_IMAGE_FORMAT_NOT_SUPPORTED",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
24 "CL_BUILD_PROGRAM_FAILURE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
25 "CL_MAP_FAILURE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
26 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
27 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
28 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
29 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
30 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
31 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
32 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
33 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
34 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
35 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
36 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
37 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
38 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
39 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
40 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
41 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
42 "",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
43 "CL_INVALID_VALUE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
44 "CL_INVALID_DEVICE_TYPE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
45 "CL_INVALID_PLATFORM",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
46 "CL_INVALID_DEVICE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
47 "CL_INVALID_CONTEXT",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
48 "CL_INVALID_QUEUE_PROPERTIES",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
49 "CL_INVALID_COMMAND_QUEUE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
50 "CL_INVALID_HOST_PTR",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
51 "CL_INVALID_MEM_OBJECT",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
52 "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
53 "CL_INVALID_IMAGE_SIZE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
54 "CL_INVALID_SAMPLER",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
55 "CL_INVALID_BINARY",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
56 "CL_INVALID_BUILD_OPTIONS",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
57 "CL_INVALID_PROGRAM",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
58 "CL_INVALID_PROGRAM_EXECUTABLE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
59 "CL_INVALID_KERNEL_NAME",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
60 "CL_INVALID_KERNEL_DEFINITION",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
61 "CL_INVALID_KERNEL",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
62 "CL_INVALID_ARG_INDEX",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
63 "CL_INVALID_ARG_VALUE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
64 "CL_INVALID_ARG_SIZE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
65 "CL_INVALID_KERNEL_ARGS",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
66 "CL_INVALID_WORK_DIMENSION",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
67 "CL_INVALID_WORK_GROUP_SIZE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
68 "CL_INVALID_WORK_ITEM_SIZE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
69 "CL_INVALID_GLOBAL_OFFSET",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
70 "CL_INVALID_EVENT_WAIT_LIST",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
71 "CL_INVALID_EVENT",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
72 "CL_INVALID_OPERATION",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
73 "CL_INVALID_GL_OBJECT",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
74 "CL_INVALID_BUFFER_SIZE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
75 "CL_INVALID_MIP_LEVEL",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
76 "CL_INVALID_GLOBAL_WORK_SIZE",
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
77 };
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
78
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
79 const int errorCount = sizeof(errorString) / sizeof(errorString[0]);
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
80
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
81 const int index = -error;
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
82
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
83 return (index >= 0 && index < errorCount) ? errorString[index] : "Unspecified Error";
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
84 }
0e6e76dbdb0f add file
Yutaka_Kinjyo
parents:
diff changeset
85
1
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
86 //////////////////////////////////////////////////////////////////////////////
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
87 //! Get and log the binary (PTX) from the OpenCL compiler for the requested program & device
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
88 //!
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
89 //! @param cpProgram OpenCL program
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
90 //! @param cdDevice device of interest
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
91 //////////////////////////////////////////////////////////////////////////////
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
92 void oclLogBuildInfo(cl_program cpProgram, cl_device_id cdDevice)
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
93 {
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
94 // write out the build log and ptx, then exit
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
95 char cBuildLog[10240];
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
96 clGetProgramBuildInfo(cpProgram, cdDevice, CL_PROGRAM_BUILD_LOG,
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
97 sizeof(cBuildLog), cBuildLog, NULL );
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
98 //shrLog("\n%s\nBuild Log:\n%s\n%s\n", HDASHLINE, cBuildLog, HDASHLINE);
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
99 printf("Build Log:\n%s\n", cBuildLog);
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
100 }
403e35dd9b6d word count ...
Yutaka_Kinjyo
parents: 0
diff changeset
101