Advertisement
Guest User

Untitled

a guest
Jul 27th, 2014
976
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.90 KB | None | 0 0
  1. #include <helper_cuda.h>
  2. #include <helper_functions.h>
  3. #include <curand.h>
  4.  
  5. //static texture<float, cudaTextureType3D, cudaReadModeElementType> NoiseTextures[4];//texture Array
  6. static texture<float, cudaTextureType3D, cudaReadModeElementType> NoiseTexture;
  7. float *d_NoiseTest;//Device Array with random floats
  8. int SizeNoiseTest = 32;
  9. int sqrSizeNoiseTest = 32768;
  10.  
  11. void CreateTexture();
  12.  
  13. __global__ void AccesTexture()
  14. {
  15. float test = tex3D(NoiseTexture,threadIdx.x,threadIdx.y,threadIdx.z);//by using this the error occurs
  16. printf("thread: %d,%d,%d, value: %f\n", threadIdx.x, threadIdx.y, threadIdx.z, test);
  17. }
  18.  
  19. int
  20. main(int argc, char **argv)
  21. {
  22. CreateTexture();
  23. }
  24. void CreateTexture()
  25. {
  26. //curand Random Generator (needs compiler link -lcurand)
  27. curandGenerator_t gen;
  28. cudaMalloc((void **)&d_NoiseTest, sqrSizeNoiseTest*sizeof(float));//Allocation of device Array
  29. curandCreateGenerator(&gen,CURAND_RNG_PSEUDO_DEFAULT);
  30. curandSetPseudoRandomGeneratorSeed(gen,1235ULL);
  31. curandGenerateUniform(gen, d_NoiseTest, sqrSizeNoiseTest);//writing data to d_NoiseTest
  32. curandDestroyGenerator(gen);
  33.  
  34. //cudaArray Descriptor
  35. cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc<float>();
  36. //cuda Array
  37. cudaArray *d_cuArr;
  38. checkCudaErrors(cudaMalloc3DArray(&d_cuArr, &channelDesc, make_cudaExtent(SizeNoiseTest*sizeof(float),SizeNoiseTest,SizeNoiseTest), 0));
  39. cudaMemcpy3DParms copyParams = {0};
  40.  
  41.  
  42. //Array creation
  43. copyParams.srcPtr = make_cudaPitchedPtr(d_NoiseTest, SizeNoiseTest*sizeof(float), SizeNoiseTest, SizeNoiseTest);
  44. copyParams.dstArray = d_cuArr;
  45. copyParams.extent = make_cudaExtent(SizeNoiseTest,SizeNoiseTest,SizeNoiseTest);
  46. copyParams.kind = cudaMemcpyDeviceToDevice;
  47. checkCudaErrors(cudaMemcpy3D(&copyParams));
  48. //Array creation End
  49.  
  50. //new Bind
  51. // set texture parameters
  52. NoiseTexture.normalized = false; // use non-normalized texture coordinates
  53. NoiseTexture.filterMode = cudaFilterModeLinear; // linear interpolation
  54. NoiseTexture.addressMode[0] = cudaAddressModeWrap; // wrap texture coordinates
  55. NoiseTexture.addressMode[1] = cudaAddressModeWrap;
  56. NoiseTexture.addressMode[2] = cudaAddressModeWrap;
  57.  
  58. // bind array to 3D texture
  59. checkCudaErrors(cudaBindTextureToArray(NoiseTexture, d_cuArr, channelDesc));
  60. //end Bind
  61. // cudaFreeArray(d_cuArr);
  62. checkCudaErrors(cudaPeekAtLastError());
  63. AccesTexture<<<1,dim3(4,4,4)>>>();
  64. checkCudaErrors(cudaPeekAtLastError());
  65. cudaDeviceSynchronize();
  66. checkCudaErrors(cudaPeekAtLastError());
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement