Advertisement
Guest User

Untitled

a guest
Sep 20th, 2013
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.41 KB | None | 0 0
  1.  
  2. $ cat t243.cu
  3. #include <stdio.h>
  4.  
  5. #define AND 1
  6. #define OR 2
  7. #define XOR 3
  8. #define SHL 4
  9. #define SHR 5
  10.  
  11. template<typename T, int opcode>
  12. __device__ inline T operation_lb(T a, T b)
  13. {
  14. switch(opcode)
  15. {
  16. case AND:
  17. return a & b;
  18. case OR:
  19. return a | b;
  20. case XOR:
  21. return a ^ b;
  22. case SHL:
  23. return a << b;
  24. case SHR:
  25. return a >> b;
  26. default:
  27. return 0;
  28. }
  29. }
  30.  
  31. //Logical Operation With A Constant
  32. template<typename T, int channels, int opcode>
  33. __global__ void kernel_logical_constant(T* src, const T val, T* dst, int width, int height, int pitch)
  34. {
  35. const int xIndex = blockIdx.x * blockDim.x + threadIdx.x;
  36. const int yIndex = blockIdx.y * blockDim.y + threadIdx.y;
  37.  
  38. if(xIndex >= width || yIndex >= height) return;
  39.  
  40. unsigned int tid = yIndex * pitch + (channels * xIndex);
  41.  
  42. #pragma unroll
  43. for(int i=0; i<channels; i++)
  44. dst[tid + i] = operation_lb<T,opcode>(src[tid + i],val);
  45. }
  46.  
  47. template __global__ void kernel_logical_constant<unsigned char,1,SHL>(unsigned char*,unsigned char,unsigned char*,int,int,int);
  48. template __global__ void kernel_logical_constant<unsigned char,1,SHR>(unsigned char*,unsigned char,unsigned char*,int,int,int);
  49. template __global__ void kernel_logical_constant<unsigned char,1,AND>(unsigned char*,unsigned char,unsigned char*,int,int,int);
  50. template __global__ void kernel_logical_constant<unsigned char,1,OR>(unsigned char*,unsigned char,unsigned char*,int,int,int);
  51. template __global__ void kernel_logical_constant<unsigned char,1,XOR>(unsigned char*,unsigned char,unsigned char*,int,int,int);
  52. template __global__ void kernel_logical_constant<unsigned char,3,SHL>(unsigned char*,unsigned char,unsigned char*,int,int,int);
  53. template __global__ void kernel_logical_constant<unsigned char,3,SHR>(unsigned char*,unsigned char,unsigned char*,int,int,int);
  54. template __global__ void kernel_logical_constant<unsigned char,3,AND>(unsigned char*,unsigned char,unsigned char*,int,int,int);
  55. template __global__ void kernel_logical_constant<unsigned char,3,OR>(unsigned char*,unsigned char,unsigned char*,int,int,int);
  56. template __global__ void kernel_logical_constant<unsigned char,3,XOR>(unsigned char*,unsigned char,unsigned char*,int,int,int);
  57. template __global__ void kernel_logical_constant<unsigned short,1,SHL>(unsigned short*,unsigned short,unsigned short*,int,int,int);
  58. template __global__ void kernel_logical_constant<unsigned short,1,SHR>(unsigned short*,unsigned short,unsigned short*,int,int,int);
  59. template __global__ void kernel_logical_constant<unsigned short,1,AND>(unsigned short*,unsigned short,unsigned short*,int,int,int);
  60. template __global__ void kernel_logical_constant<unsigned short,1,OR>(unsigned short*,unsigned short,unsigned short*,int,int,int);
  61. template __global__ void kernel_logical_constant<unsigned short,1,XOR>(unsigned short*,unsigned short,unsigned short*,int,int,int);
  62. template __global__ void kernel_logical_constant<unsigned short,3,SHL>(unsigned short*,unsigned short,unsigned short*,int,int,int);
  63. template __global__ void kernel_logical_constant<unsigned short,3,SHR>(unsigned short*,unsigned short,unsigned short*,int,int,int);
  64. template __global__ void kernel_logical_constant<unsigned short,3,AND>(unsigned short*,unsigned short,unsigned short*,int,int,int);
  65. template __global__ void kernel_logical_constant<unsigned short,3,OR>(unsigned short*,unsigned short,unsigned short*,int,int,int);
  66. template __global__ void kernel_logical_constant<unsigned short,3,XOR>(unsigned short*,unsigned short,unsigned short*,int,int,int);
  67.  
  68. int main(){
  69.  
  70. int *int_src, int_val, *int_dst, h_width, h_height, h_pitch;
  71. unsigned char *uc_src, uc_val, *uc_dst;
  72. cudaMalloc((void **)&int_src, sizeof(int));
  73. cudaMalloc((void **)&int_dst, sizeof(int));
  74. cudaMalloc((void **)&uc_src, sizeof(unsigned char));
  75. cudaMalloc((void **)&uc_dst, sizeof(unsigned char));
  76. h_width = 0;
  77. h_height = 0;
  78. h_pitch = 0;
  79. int_val = 0;
  80. uc_val = 0;
  81.  
  82. kernel_logical_constant<int, 3, SHL><<<1,1>>>(int_src, int_val, int_dst, h_width, h_height, h_pitch);
  83.  
  84. kernel_logical_constant<unsigned char, 1, SHL><<<1,1>>>(uc_src, uc_val, uc_dst, h_width, h_height, h_pitch);
  85.  
  86. return 0;
  87. }
  88. $ nvcc -arch=sm_20 -o t243 t243.cu
  89. $ nvcc --version
  90. nvcc: NVIDIA (R) Cuda compiler driver
  91. Copyright (c) 2005-2013 NVIDIA Corporation
  92. Built on Wed_Jul_17_18:36:13_PDT_2013
  93. Cuda compilation tools, release 5.5, V5.5.0
  94. $
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement