/* * Copyright 1993-2015 NVIDIA Corporation. All rights reserved. * * Please refer to the NVIDIA end user license agreement (EULA) associated * with this source code for terms and conditions that govern your use of * this software. Any use, reproduction, disclosure, or distribution of * this software and related documentation outside the terms of the EULA * is strictly prohibited. * */ #ifndef HISTOGRAM_COMMON_H #define HISTOGRAM_COMMON_H //////////////////////////////////////////////////////////////////////////////// // Common definitions //////////////////////////////////////////////////////////////////////////////// #define HISTOGRAM64_BIN_COUNT 64 #define HISTOGRAM256_BIN_COUNT 256 #define UINT_BITS 32 typedef unsigned int uint; typedef unsigned char uchar; //////////////////////////////////////////////////////////////////////////////// // GPU-specific common definitions //////////////////////////////////////////////////////////////////////////////// #define LOG2_WARP_SIZE 5U #define WARP_SIZE (1U << LOG2_WARP_SIZE) //May change on future hardware, so better parametrize the code #define SHARED_MEMORY_BANKS 16 //Threadblock size: must be a multiple of (4 * SHARED_MEMORY_BANKS) //because of the bit permutation of threadIdx.x #define HISTOGRAM64_THREADBLOCK_SIZE (4 * SHARED_MEMORY_BANKS) //Warps ==subhistograms per threadblock #define WARP_COUNT 6 //Threadblock size #define HISTOGRAM256_THREADBLOCK_SIZE (WARP_COUNT * WARP_SIZE) //Shared memory per threadblock #define HISTOGRAM256_THREADBLOCK_MEMORY (WARP_COUNT * HISTOGRAM256_BIN_COUNT) #define UMUL(a, b) ( (a) * (b) ) #define UMAD(a, b, c) ( UMUL((a), (b)) + (c) ) //////////////////////////////////////////////////////////////////////////////// // Reference CPU histogram //////////////////////////////////////////////////////////////////////////////// extern "C" void histogram64CPU( uint *h_Histogram, void *h_Data, uint byteCount ); extern "C" void histogram256CPU( uint *h_Histogram, void *h_Data, uint byteCount ); //////////////////////////////////////////////////////////////////////////////// // GPU histogram //////////////////////////////////////////////////////////////////////////////// extern "C" void initHistogram64(void); extern "C" void initHistogram256(void); extern "C" void closeHistogram64(void); extern "C" void closeHistogram256(void); extern "C" void histogram64( uint *d_Histogram, void *d_Data, uint byteCount ); extern "C" void histogram256( uint *d_Histogram, void *d_Data, uint byteCount ); #endif