diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 8c622c5e..2341b51e 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -23,6 +23,7 @@ set(EXAMPLES vector_addition simple_moving_average matrix_transpose + print_kernel_id ) # boost library link dependencies diff --git a/example/print_kernel_id.cpp b/example/print_kernel_id.cpp new file mode 100644 index 00000000..a2e6bbda --- /dev/null +++ b/example/print_kernel_id.cpp @@ -0,0 +1,167 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2013-2014 Mageswaran.D +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +// See http://kylelutz.github.com/compute for more information. +//---------------------------------------------------------------------------// + +// This sample can be used to visualize the kernel internal global/local IDs. +// Global Local +//3.03 -> "00"th row "03"rd col."00"th row "03"rd col +//804.00 -> "08"th row "04"th col."00"th row "00"th col +//1111.33-> "11"th row "11"th col."03"rd row "03"rd col + +#include +#include + +#include +#include + +namespace compute = boost::compute; +namespace po = boost::program_options; + +const char kernel_with_local_threads[] = + BOOST_COMPUTE_STRINGIZE_SOURCE( + __kernel void print_id(__global float *host_ptr) + { + int gx = get_global_id(0); + int gy = get_global_id(1); + int bx = get_group_id (0); + int by = get_group_id (1); + int lx = get_local_id (0); + int ly = get_local_id (1); + int kernel_width = get_global_size(0); + + host_ptr[gy * kernel_width + gx] = gx * 100 + gy * 1 + + lx * 0.1 + ly * 0.01; + } + ); + +int main(int argc, char *argv[]) +{ + int g_x, g_y; + int l_x, l_y; + + /////////////////////////////////////////////////////////////////////////// + po::options_description desc("Allowed Options"); + desc.add_options() + ("help", "produce help message") + ("GlobalThreads_X", po::value()->default_value(8), "Eg: 8") + ("GlobalThreads_Y", po::value()->default_value(8), "Eg: 8") + ("LocalThreads_X", po::value()->default_value(4), "Eg: 4") + ("LocalThreads_Y", po::value()->default_value(4), "Eg: 4") + ("usage", "how to run the example"); + + po::variables_map vm; + po::store(po::parse_command_line(argc, argv, desc), vm); + po::notify(vm); + + if(vm.count("help")) + { + std::cout<(); + g_y = vm["GlobalThreads_Y"].as(); + l_x = vm["LocalThreads_X"].as(); + l_y = vm["LocalThreads_Y"].as(); + } + else + { + std::cout<<"To get help: "<