aboutsummaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorGil Pitney <gil.pitney@linaro.org>2014-10-28 18:00:42 -0700
committerGil Pitney <gil.pitney@linaro.org>2014-10-28 18:00:42 -0700
commit61b2c94d9e64758e55730be6a3fc9006c171db85 (patch)
treef564f09ebf93ba293dfa225bd374df6f1f37aa01 /util
Initial Commit: Based on TI OpenCL v0.8, originally based on clover.shamrock_v0.8
This is a continuation of the clover OpenCL project: http://people.freedesktop.org/~steckdenis/clover based on the contributions from Texas Instruments for Keystone II DSP device: git.ti.com/opencl and adding contributions from Linaro for ARM CPU-only support. See README.txt for more info, and build instructions. Signed-off-by: Gil Pitney <gil.pitney@linaro.org>
Diffstat (limited to 'util')
-rw-r--r--util/CMakeLists.txt16
-rw-r--r--util/decode_error.cpp84
-rw-r--r--util/ocl_util.h40
-rw-r--r--util/read_binary.cpp46
-rw-r--r--util/report_timing.cpp90
5 files changed, 276 insertions, 0 deletions
diff --git a/util/CMakeLists.txt b/util/CMakeLists.txt
new file mode 100644
index 0000000..a93eba7
--- /dev/null
+++ b/util/CMakeLists.txt
@@ -0,0 +1,16 @@
+include_directories( ${CMAKE_SOURCE_DIR}/include )
+
+if (HAWKING_CROSS_COMPILE)
+ include_directories( ${CMAKE_FIND_ROOT_PATH} ${HOST_USR_INCLUDE_PATH} )
+endif()
+
+set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -O3 -fPIC")
+
+set(util_src report_timing.cpp decode_error.cpp read_binary.cpp)
+
+add_library(ocl_util STATIC ${util_src})
+
+SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
+
+install(TARGETS ocl_util DESTINATION lib ${OCL_FPERMS})
+install(FILES ocl_util.h DESTINATION include ${OCL_FPERMS})
diff --git a/util/decode_error.cpp b/util/decode_error.cpp
new file mode 100644
index 0000000..39a87eb
--- /dev/null
+++ b/util/decode_error.cpp
@@ -0,0 +1,84 @@
+/******************************************************************************
+ * Copyright (c) 2013-2014, Texas Instruments Incorporated - http://www.ti.com/
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Texas Instruments Incorporated nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ *****************************************************************************/
+const char* ocl_decode_error(int code)
+{
+ switch(code)
+ {
+ case 0: return "Success";
+ case -1: return "Device not found";
+ case -2: return "Device not available";
+ case -3: return "Compiler not available";
+ case -4: return "Mem object allocation failure";
+ case -5: return "Out of resources";
+ case -6: return "Out of host memory";
+ case -7: return "Profiling info not available";
+ case -8: return "Mem copy overlap";
+ case -9: return "Image format mismatch";
+ case -10: return "Image format not supported";
+ case -11: return "Build program failure";
+ case -12: return "Map failure";
+ case -13: return "Misaligned sub buffer offset";
+ case -14: return "Exec status error for events in wait list";
+ case -30: return "Invalid value";
+ case -31: return "Invalid device type";
+ case -32: return "Invalid platform";
+ case -33: return "Invalid device";
+ case -34: return "Invalid context";
+ case -35: return "Invalid queue properties";
+ case -36: return "Invalid command queue";
+ case -37: return "Invalid host ptr";
+ case -38: return "Invalid mem object";
+ case -39: return "Invalid image format descriptor";
+ case -40: return "Invalid image size";
+ case -41: return "Invalid sampler";
+ case -42: return "Invalid binary";
+ case -43: return "Invalid build options";
+ case -44: return "Invalid program";
+ case -45: return "Invalid program executable";
+ case -46: return "Invalid kernel name";
+ case -47: return "Invalid kernel definition";
+ case -48: return "Invalid kernel";
+ case -49: return "Invalid arg index";
+ case -50: return "Invalid arg value";
+ case -51: return "Invalid arg size";
+ case -52: return "Invalid kernel args";
+ case -53: return "Invalid work dimension";
+ case -54: return "Invalid work group size";
+ case -55: return "Invalid work item size";
+ case -56: return "Invalid global offset";
+ case -57: return "Invalid event wait list";
+ case -58: return "Invalid event";
+ case -59: return "Invalid operation";
+ case -60: return "Invalid gl object";
+ case -61: return "Invalid buffer size";
+ case -62: return "Invalid mip level";
+ case -63: return "Invalid global work size";
+ case -64: return "Invalid property";
+ default: return "Unknown";
+ }
+}
diff --git a/util/ocl_util.h b/util/ocl_util.h
new file mode 100644
index 0000000..08e70be
--- /dev/null
+++ b/util/ocl_util.h
@@ -0,0 +1,40 @@
+/******************************************************************************
+ * Copyright (c) 2013-2014, Texas Instruments Incorporated - http://www.ti.com/
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Texas Instruments Incorporated nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ *****************************************************************************/
+#ifndef _OCL_UTIL_H_
+#define _OCL_UTIL_H_
+
+#define __CL_ENABLE_EXCEPTIONS
+#include <CL/cl.hpp>
+using namespace cl;
+
+char *ocl_decode_error (int code);
+int ocl_read_binary (const char *filename, char* &buffer);
+void ocl_event_times (const Event &ev, const char* name);
+void ocl_relative_times(const Event &ev, const char* name, cl_ulong reference);
+
+#endif // _OCL_UTIL_H_
diff --git a/util/read_binary.cpp b/util/read_binary.cpp
new file mode 100644
index 0000000..3756b3c
--- /dev/null
+++ b/util/read_binary.cpp
@@ -0,0 +1,46 @@
+/******************************************************************************
+ * Copyright (c) 2013-2014, Texas Instruments Incorporated - http://www.ti.com/
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Texas Instruments Incorporated nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ *****************************************************************************/
+#include <iostream>
+#include <fstream>
+
+int ocl_read_binary(const char *filename, char* &buffer)
+{
+ try
+ {
+ std::ifstream is;
+ is.open (filename, std::ios::binary );
+ is.seekg (0, std::ios::end);
+ int length = is.tellg();
+ is.seekg (0, std::ios::beg);
+ buffer = new char [length];
+ is.read (buffer, length);
+ is.close();
+ return length;
+ }
+ catch(...) { std::cout << "Binary read function failure" << std::endl; }
+}
diff --git a/util/report_timing.cpp b/util/report_timing.cpp
new file mode 100644
index 0000000..1f3e54a
--- /dev/null
+++ b/util/report_timing.cpp
@@ -0,0 +1,90 @@
+/******************************************************************************
+ * Copyright (c) 2013-2014, Texas Instruments Incorporated - http://www.ti.com/
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Texas Instruments Incorporated nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ *****************************************************************************/
+#define __CL_ENABLE_EXCEPTIONS
+#include <CL/cl.hpp>
+#include <iostream>
+#include <fstream>
+#include <cassert>
+
+using namespace cl;
+using namespace std;
+
+/******************************************************************************
+* REPORT_EVENT_TIMING - Given an OpenCL Event, report to stdout the profiling
+* info associated with the event
+******************************************************************************/
+void ocl_event_times(const Event &ev, const char* name)
+{
+ cl_ulong t_que, t_sub, t_strt, t_end;
+
+ ev.getProfilingInfo(CL_PROFILING_COMMAND_QUEUED, &t_que);
+ ev.getProfilingInfo(CL_PROFILING_COMMAND_SUBMIT, &t_sub);
+ ev.getProfilingInfo(CL_PROFILING_COMMAND_START, &t_strt);
+ ev.getProfilingInfo(CL_PROFILING_COMMAND_END, &t_end);
+
+ /*----------------------------------------------------------------------
+ * Normalize the time to microseconds
+ *--------------------------------------------------------------------*/
+ t_que /= 1000; t_sub /= 1000; t_strt /= 1000; t_end /= 1000;
+
+ if (!name) name = "";
+
+ cout<< name << " : Queue to Submit: " << t_sub-t_que << " us" << endl;
+ cout<< name << " : Submit to Start : " << t_strt-t_sub << " us" << endl;
+ cout<< name << " : Start to End : " << t_end-t_strt << " us" << endl;
+ cout<< endl;
+}
+
+void ocl_relative_times(const Event &ev, const char* name, cl_ulong reference)
+{
+ cl_ulong t_que, t_sub, t_strt, t_end;
+
+ ev.getProfilingInfo(CL_PROFILING_COMMAND_QUEUED, &t_que);
+ ev.getProfilingInfo(CL_PROFILING_COMMAND_SUBMIT, &t_sub);
+ ev.getProfilingInfo(CL_PROFILING_COMMAND_START, &t_strt);
+ ev.getProfilingInfo(CL_PROFILING_COMMAND_END, &t_end);
+
+ /*----------------------------------------------------------------------
+ * Normalize the time to microseconds
+ *--------------------------------------------------------------------*/
+ reference /= 1000;
+ t_que /= 1000; t_sub /= 1000; t_strt /= 1000; t_end /= 1000;
+
+ t_que -= reference;
+ t_sub -= reference;
+ t_strt -= reference;
+ t_end -= reference;
+
+ if (!name) name = "";
+
+ cout << name << " "
+ << t_que << " "
+ << t_sub << " "
+ << t_strt << " "
+ << t_end << endl;
+}