mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| void foo()
 | |
| {
 | |
|   cudaArray* cu_array;
 | |
|   texture<float, 2, cudaReadModeElementType> tex;
 | |
| 
 | |
|   // Allocate array
 | |
|   cudaChannelFormatDesc description = cudaCreateChannelDesc<float>();
 | |
|   cudaMallocArray(&cu_array, &description, width, height);
 | |
| 
 | |
|   // Copy image data to array
 | |
|   cudaMemcpyToArray(cu_array, image, width*height*sizeof(float), cudaMemcpyHostToDevice);
 | |
| 
 | |
|   // Set texture parameters (default)
 | |
|   tex.addressMode[0] = cudaAddressModeClamp;
 | |
|   tex.addressMode[1] = cudaAddressModeClamp;
 | |
|   tex.filterMode = cudaFilterModePoint;
 | |
|   tex.normalized = false; // do not normalize coordinates
 | |
| 
 | |
|   // Bind the array to the texture
 | |
|   cudaBindTextureToArray(tex, cu_array);
 | |
| 
 | |
|   // Run kernel
 | |
|   dim3 blockDim(16, 16, 1);
 | |
|   dim3 gridDim((width + blockDim.x - 1)/ blockDim.x, (height + blockDim.y - 1) / blockDim.y, 1);
 | |
|   kernel<<< gridDim, blockDim, 0 >>>(d_data, height, width);
 | |
| 
 | |
|   // Unbind the array from the texture
 | |
|   cudaUnbindTexture(tex);
 | |
| } //end foo()
 | |
| 
 | |
| __global__ void kernel(float* odata, int height, int width)
 | |
| {
 | |
|    unsigned int x = blockIdx.x*blockDim.x + threadIdx.x;
 | |
|    unsigned int y = blockIdx.y*blockDim.y + threadIdx.y;
 | |
|    if (x < width && y < height) {
 | |
|       float c = tex2D(tex, x, y);
 | |
|       odata[y*width+x] = c;
 | |
|    }
 | |
| }
 |