diff options
author | Gil Pitney <gil.pitney@linaro.org> | 2014-10-28 18:00:42 -0700 |
---|---|---|
committer | Gil Pitney <gil.pitney@linaro.org> | 2014-10-28 18:00:42 -0700 |
commit | 61b2c94d9e64758e55730be6a3fc9006c171db85 (patch) | |
tree | f564f09ebf93ba293dfa225bd374df6f1f37aa01 /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.txt | 16 | ||||
-rw-r--r-- | util/decode_error.cpp | 84 | ||||
-rw-r--r-- | util/ocl_util.h | 40 | ||||
-rw-r--r-- | util/read_binary.cpp | 46 | ||||
-rw-r--r-- | util/report_timing.cpp | 90 |
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; +} |