2012-10-23 54 views
11

Nvidia GTX480 GPU的驅動程序版本爲275.50和280.19的圖像重新採樣灰度值的變化很小。也許這是一個插值問題。除了OpenCL 1.1版的實現外,我無法確定新版本中發生了什麼變化。僅使用OpenCL 1.0,灰度值的變化很小。nvidia驅動程序差異275.50和280.19 GTX480 GPU在opencl重新採樣

在下面有這給betwenn驅動版本275.50和280.19不同的結果代碼:

success oclInitImgData(struct _Image2d *image) 
{ 
cl_image_format volume_format; 
volume_format.image_channel_order  = CL_R; 
volume_format.image_channel_data_type = CL_UNORM_INT16; 

size = len[0] * sizeof(unsigned short); 
img_h = clCreateImage2D(Ocl._GPUContext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, 
    &volume_format, len[0], len[1], size, data, &error); 

resampledImg_h = clCreateBuffer(Ocl._GPUContext, CL_MEM_READ_WRITE, size, NULL, &error); 
oclResampleImg(Ocl._GPUCommandQueue[posSet], Ocl._pGPUKernels[posSet][K_IMG_RESAMPLE], img_h, resampledImg_h , Size, PixelSize, mm_per_p, vm_h); 
} 

__kernel void resampleImage(__read_only image2d_t IN image, __global uint OUT *resampledImage) 
    { 
//get resampled position 
int2 posResampledImg = (int2)(get_global_id(0), get_global_id(1)); 

//get dimension of the image 
int2 imageSize = get_image_dim(image); 

//calulate image size in mm 
float2 imageSizemm = convert_float2(imageSize)*imagePixelSize; 
float2 posImg = (posResampledImgmm + (imageSizemm*0.5f)); 
float2 posImgnorm = posImg/imageSizemm; 
int2 posImgpix = convert_int2(posImg/imagePixelSize); 

uint sample = 0; 
if(read_imageui(image, CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP | CLK_FILTER_NEAREST, posImgpix).x == 1) 
{ 
    //get grey value and store it in the resampled image 
    sample = read_imagef(image, CLK_NORMALIZED_COORDS_TRUE | CLK_ADDRESS_CLAMP | CLK_FILTER_LINEAR, posImgnorm).x * 65535.0f; 
} 
resampledImg[posResampledImg.y*convert_int(imageSizeResampled.x)+posResampledImg.x] = sample; 
} 
+2

問題是什麼? – tripleee

回答

1

爲了得到你應該有用的結果:

如果行爲的差異是:(1)瞭解由OpenCL規範覆蓋。

(2)如果是,創建演示它的測試用例

(3)文件與Nvidia的bug報告

(4)???

(5)利潤

我不知道這裏的人如何能幫助您超越步驟1-5。

相關問題