mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +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;
|
|
}
|
|
}
|