मैंने एक साधारण बनावट 3 डी परीक्षण किया है और डिवाइस पर डेटा कॉपी करते समय एक अजीब व्यवहार पाया है। फ़ंक्शन cudaMemcpy3D एक 'अमान्य तर्क' लौटाता है।बाइट्स में चौड़ाई का उपयोग कर cudaMemcpy3D में अमान्य तर्क?
मुझे पता चला कि समस्या cudaExtent से संबंधित है। CUDA टूलकिट संदर्भ मैनुअल 4.0 के अनुसार, cudaExtent पैरामीटर निम्न हैं: - बाइट में चौड़ाई
- डब्ल्यू तत्वों में गहराई
इसलिए, मैंने बनावट को निम्नानुसार तैयार किया:
// prepare texture
cudaChannelFormatDesc t_desc = cudaCreateChannelDesc<baseType>();
// CUDA extent parameters w - Width in bytes, h - Height in elements, d - Depth in elements
cudaExtent t_extent = make_cudaExtent(NCOLS*sizeof(baseType), NROWS, DEPTH);
// CUDA arrays are opaque memory layouts optimized for texture fetching
cudaArray *i_ArrayPtr = NULL;
// allocate 3D
status = cudaMalloc3DArray(&i_ArrayPtr, &t_desc, t_extent);
और कॉन्फ़िगर किया गया इस प्रकार 3 डी पैरामीटर:
// prepare input data
cudaMemcpy3DParms i_3DParms = { 0 };
i_3DParms.srcPtr = make_cudaPitchedPtr((void*)h_idata, NCOLS*sizeof(baseType), NCOLS, NROWS);
i_3DParms.dstArray = i_ArrayPtr;
i_3DParms.extent = t_extent;
i_3DParms.kind = cudaMemcpyHostToDevice;
और अंत में डिवाइस स्मृति के लिए डेटा की प्रतिलिपि:
// copy input data from host to device
status = cudaMemcpy3D(&i_3DParms);
अगर मैं केवल एक्स आयाम में तत्व की संख्या निर्दिष्ट समस्या हल हो जाता है के रूप में:
cudaExtent t_extent = make_cudaExtent(NCOLS, NROWS, DEPTH);
जो किसी भी ई का उत्पादन नहीं करता और अपेक्षित परीक्षण कार्य।
मुझे आश्चर्य है कि अगर मुझे cudaExtent फ़ंक्शन या कुछ और चीज़ याद आती है। बाइट्स में व्यक्त करने के लिए चौड़ाई पैरामीटर की आवश्यकता क्यों नहीं है?
यह निष्कर्ष है कि मैं आ रहा हूं। संदर्भ मैनुअल में दस्तावेज है, या आपकी विशेषज्ञता के आधार पर? – pQB
इसे एपीआई संदर्भ में दस्तावेज किया गया है, लेकिन हो सकता है कि आपने देखा न हो। 'CudaMalloc3Darray' पृष्ठ पर "3 डी सरणी के लिए, वैध सीमा सीमाएं हैं {(1, maxTexture3D [0]), (1, maxTexture3D [1]), (1, maxTexture3D [2])}"। 'Make_cudaExtent' दस्तावेज थोड़ा अस्पष्ट है क्योंकि यह केवल 3 डी रैखिक मामले पर लागू होने पर तर्कों को दस्तावेज करता है, न कि 3 डी सरणी मामले में। – talonmies
स्पष्टीकरण के लिए धन्यवाद। – pQB