पढ़ता है मैं एक बनावट से मूल्यों को पढ़ने की कोशिश करता हूं और उन्हें वापस वैश्विक स्मृति में लिखता हूं। मुझे यकीन है कि लेखन हिस्सा है, काम करता है beause मैं कर्नेल में स्थिर मान डाल सकते हैं और मैं उन्हें उत्पादन में देख सकते हैं हूँ:बाउंड CUDA बनावट शून्य
__global__ void
bartureKernel(float* g_odata, int width, int height)
{
unsigned int x = blockIdx.x*blockDim.x + threadIdx.x;
unsigned int y = blockIdx.y*blockDim.y + threadIdx.y;
if(x < width && y < height) {
unsigned int idx = (y*width + x);
g_odata[idx] = tex2D(texGrad, (float)x, (float)y).x;
}
}
बनावट मैं उपयोग करना चाहते हैं दो चैनलों के साथ एक 2 डी नाव बनावट है, इसलिए
texture<float2, 2, cudaReadModeElementType> texGrad;
और कोड जो कर्नेल कॉल कुछ निरंतर ग़ैर शून्य मान के साथ बनावट initializes:: मैं के रूप में परिभाषित
float* d_data_grad = NULL;
cudaMalloc((void**) &d_data_grad, gradientSize * sizeof(float));
CHECK_CUDA_ERROR;
texGrad.addressMode[0] = cudaAddressModeClamp;
texGrad.addressMode[1] = cudaAddressModeClamp;
texGrad.filterMode = cudaFilterModeLinear;
texGrad.normalized = false;
cudaMemset(d_data_grad, 50, gradientSize * sizeof(float));
CHECK_CUDA_ERROR;
cudaBindTexture(NULL, texGrad, d_data_grad, cudaCreateChannelDesc<float2>(), gradientSize * sizeof(float));
float* d_data_barture = NULL;
cudaMalloc((void**) &d_data_barture, outputSize * sizeof(float));
CHECK_CUDA_ERROR;
dim3 dimBlock(8, 8, 1);
dim3 dimGrid(((width-1)/dimBlock.x)+1, ((height-1)/dimBlock.y)+1, 1);
bartureKernel<<< dimGrid, dimBlock, 0 >>>(d_data_barture, width, height);
मुझे पता है, टी की स्थापना सभी "50" के लिए बाइट बाइट फ्लोट के संदर्भ में ज्यादा समझ नहीं लेता है, लेकिन कम से कम मुझे कुछ गैर-शून्य मान पढ़ने के लिए देना चाहिए।
मैं केवल शून्य हालांकि पढ़ सकते हैं ...
शून्य और जेरो के रूप में बाहर आने वाले मूल्यों को आप कैसे और कैसे प्रदर्शित कर रहे हैं? – talonmies