10.07.2015 Views

ATI Stream Computing OpenCL Programming Guide - CiteSeerX

ATI Stream Computing OpenCL Programming Guide - CiteSeerX

ATI Stream Computing OpenCL Programming Guide - CiteSeerX

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>ATI</strong> STREAM COMPUTINGExample Code 3 –//// Copyright (c) 2010 Advanced Micro Devices, Inc. All rights reserved.//#include #include #include #include #include "Timer.h"#define NDEVS 2// A parallel min() kernel that works well on CPU and GPUconst char *kernel_source =" \n""#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable \n""#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable \n"" \n"" // 9. The source buffer is accessed as 4-vectors. \n"" \n""__kernel void minp( __global uint4 *src,\n"" __global uint *gmin, \n"" __local uint *lmin, \n"" __global uint *dbg, \n"" size_t nitems, \n"" uint dev ) \n""{ \n"" // 10. Set up __global memory access pattern. \n"" \n"" uint count = ( nitems / 4 ) / get_global_size(0); \n"" uint idx = (dev == 0) ? get_global_id(0) * count \n"" : get_global_id(0); \n"" uint stride = (dev == 0) ? 1 : get_global_size(0); \n"" uint pmin = (uint) -1; \n"" \n"" // 11. First, compute private min, for this work-item. \n"" \n"" for( int n=0; n < count; n++, idx += stride ) \n"" { \n"" pmin = min( pmin, src[idx].x ); \n"" pmin = min( pmin, src[idx].y ); \n"" pmin = min( pmin, src[idx].z ); \n"" pmin = min( pmin, src[idx].w ); \n"" } \n"" \n"" // 12. Reduce min values inside work-group. \n"" \n"" if( get_local_id(0) == 0 ) \n"" lmin[0] = (uint) -1; \n"" \n"" barrier( CLK_LOCAL_MEM_FENCE ); \n"" \n"" (void) atom_min( lmin, pmin ); \n"" \n"" barrier( CLK_LOCAL_MEM_FENCE ); \n"" \n"" // Write out to __global. \n"" \n"" if( get_local_id(0) == 0 ) \n"" gmin[ get_group_id(0) ] = lmin[0]; \n"1.9 Example Programs 1-29Copyright © 2010 Advanced Micro Devices, Inc. All rights reserved.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!