Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.22 KB | None | 0 0
  1. #include "cuda.h"
  2. #include "cuda_runtime.h"
  3. #include "device_launch_parameters.h"
  4. #include <iostream>
  5.  
  6. #define WIDTH 2
  7. #define HEIGHT 2
  8.  
  9. texture<float, 2> texRef;
  10. float* d_tex;
  11.  
  12. __global__ void kernel(float* d_tex)
  13. {
  14.     int x = threadIdx.x + blockIdx.x * blockDim.x;
  15.     int y = threadIdx.y + blockIdx.y * blockDim.y;
  16.     int offset = x + y * blockDim.x * gridDim.x;
  17.  
  18.     float val = tex2D(texRef,x,y);
  19.     if(val < 0)
  20.         d_tex[offset] = 1;
  21.  
  22. }
  23.  
  24. int main(void)
  25. {
  26.    
  27.     int imageSize = WIDTH*HEIGHT*sizeof(float);
  28.     cudaMalloc((void**)&d_tex, imageSize);
  29.     const cudaChannelFormatDesc desc = cudaCreateChannelDesc<float>();
  30.     cudaBindTexture2D(NULL, texRef, d_tex, desc, WIDTH, HEIGHT, sizeof(float)*WIDTH);
  31.  
  32.     float h_tex[4];
  33.    
  34.     float* tempTex = (float*)malloc(imageSize);
  35.  
  36.     /*
  37.     [ 1 1
  38.       1 1 ]
  39.     */
  40.  
  41.     tempTex[0] = -1; tempTex[1] = -1; tempTex[2] = -1;
  42.     tempTex[3] = -1;
  43.  
  44.     /* tempTex
  45.     [ 1 1
  46.       1 1 ]
  47.     */
  48.  
  49.     cudaMemcpy(d_tex, tempTex,imageSize,cudaMemcpyHostToDevice);
  50.     free(tempTex);
  51.  
  52.     dim3    blocks(1,1);
  53.     dim3    threads(2,2);
  54.     kernel<<<blocks,threads>>>(d_tex);
  55.    
  56.     cudaMemcpy( &h_tex, d_tex, imageSize, cudaMemcpyDeviceToHost );
  57.  
  58.     cudaUnbindTexture(texRef);
  59.     cudaFree(d_tex);
  60.     free(h_tex);
  61.  
  62.     return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement