दिलचस्प पोस्ट
डेक्स निष्पादित करने में असमर्थ: विधि आईडी में नहीं: 65536 जेएनआई / जावा अपवाद को कैसे पकड़ें क्या लूप के लिए विभिन्न प्रकार के दो चर को घोषित करना संभव है? मैं लांग से बाइट और जावा में वापस कैसे बदलूं? जेएक्स-आरएस और जर्सी के साथ तात्कालिक टोकन-आधारित प्रमाणीकरण के लिए सर्वश्रेष्ठ अभ्यास मैं टीएसक्यूएल चयन में प्रत्येक पंक्ति के लिए यादृच्छिक संख्या कैसे प्राप्त करूं? ओएस एक्स या आईओएस (जीस्टॉल्ट का उपयोग किए बिना) में रनटाइम पर मैं ओएस संस्करण कैसे निर्धारित करूं? जावा का उपयोग कर सेलेनियम वेबड्राइवर में iframe को कैसे प्रबंधित करें Iframe और मूल साइट के बीच कैसे संपर्क करें? JSON में स्ट्रिंग्स से बचने के लिए मुझे क्या करना चाहिए? हम कैसे जांच सकते हैं कि कोई फ़ाइल मौजूद है या Win32 प्रोग्राम का उपयोग नहीं कर रहा है? संदर्भ के आधार पर डेटा अद्यतन योग्य नाम (डीटी) क्यों करता है, भले ही मैं किसी अन्य चर पर असाइन करता हूं? एक्स-यूए-संगत IE = बढ़त पर सेट है, लेकिन यह संगतता मोड को अभी भी बंद नहीं करता है क्यों numpy.array इतना धीमा है? ओरेकल एसक्यूएल क्वेरी: समय के आधार पर प्रति समूह नवीनतम मान पुनर्प्राप्त करें

CUDA में 2 डी एरेज़ का उपयोग कैसे करें?

मैं CUDA के लिए नया हूँ कैसे आकार के 2 डी सरणी एमएक्सएन आवंटित करने के लिए? सीयूडीए में उस सरणी को कैसे पार करें? मुझे एक नमूना कोड दें ………………………………………….. ……………………………………

हाय .. उत्तर के लिए धन्यवाद मैं निम्नलिखित प्रोग्राम में अपना कोड इस्तेमाल किया लेकिन मुझे सही परिणाम नहीं मिल रहा है

__global__ void test(int A[BLOCK_SIZE][BLOCK_SIZE], int B[BLOCK_SIZE][BLOCK_SIZE],int C[BLOCK_SIZE][BLOCK_SIZE]) { int i = blockIdx.y * blockDim.y + threadIdx.y; int j = blockIdx.x * blockDim.x + threadIdx.x; if (i < BLOCK_SIZE && j < BLOCK_SIZE) C[i][j] = A[i][j] + B[i][j]; } int main() { int d_A[BLOCK_SIZE][BLOCK_SIZE]; int d_B[BLOCK_SIZE][BLOCK_SIZE]; int d_C[BLOCK_SIZE][BLOCK_SIZE]; int C[BLOCK_SIZE][BLOCK_SIZE]; for(int i=0;i<BLOCK_SIZE;i++) for(int j=0;j<BLOCK_SIZE;j++) { d_A[i][j]=i+j; d_B[i][j]=i+j; } dim3 dimBlock(BLOCK_SIZE, BLOCK_SIZE); dim3 dimGrid(GRID_SIZE, GRID_SIZE); test<<<dimGrid, dimBlock>>>(d_A,d_B,d_C); cudaMemcpy(C,d_C,BLOCK_SIZE*BLOCK_SIZE , cudaMemcpyDeviceToHost); for(int i=0;i<BLOCK_SIZE;i++) for(int j=0;j<BLOCK_SIZE;j++) { printf("%d\n",C[i][j]); } } 

क्रिप्या मेरि सहायता करे।

वेब के समाधान से एकत्रित समाधान "CUDA में 2 डी एरेज़ का उपयोग कैसे करें?"

2 डी सरणी कैसे आवंटित करें:

 int main(){ #define BLOCK_SIZE 16 #define GRID_SIZE 1 int d_A[BLOCK_SIZE][BLOCK_SIZE]; int d_B[BLOCK_SIZE][BLOCK_SIZE]; /* d_A initialization */ dim3 dimBlock(BLOCK_SIZE, BLOCK_SIZE); // so your threads are BLOCK_SIZE*BLOCK_SIZE, 256 in this case dim3 dimGrid(GRID_SIZE, GRID_SIZE); // 1*1 blocks in a grid YourKernel<<<dimGrid, dimBlock>>>(d_A,d_B); //Kernel invocation } 

उस सरणी को कैसे पार करें:

 __global__ void YourKernel(int d_A[BLOCK_SIZE][BLOCK_SIZE], int d_B[BLOCK_SIZE][BLOCK_SIZE]){ int row = blockIdx.y * blockDim.y + threadIdx.y; int col = blockIdx.x * blockDim.x + threadIdx.x; if (row >= h || col >= w)return; /* whatever you wanna do with d_A[][] and d_B[][] */ } 

मुझे आशा है कि यह मददगार है

और आप मैट्रिक्स गुणा के बारे में CUDA प्रोग्रामिंग गाइड पृष्ठ 22 का संदर्भ भी दे सकते हैं

सबसे अच्छा तरीका एक दो-आयामी सरणी A को उसके वेक्टर रूप में संग्रहीत किया जाएगा। उदाहरण के लिए आपके पास एक मैट्रिक्स A आकार nxm है, और यह सूचक (i, j) पॉइंटर में सूचक सूचक होगा

 A[i][j] (with i=0..n-1 and j=0..m-1). 

वेक्टर के रूप में आप लिख सकते हैं

 A[i*n+j] (with i=0..n-1 and j=0..m-1). 

इस मामले में एक-आयामी सरणी का उपयोग करने की प्रक्रिया को आसान बना देगा, जो सरल होगा:

 double *A,*dev_A; //A-hous pointer, dev_A - device pointer; A=(double*)malloc(n*m*sizeof(double)); cudaMalloc((void**)&dev_A,n*m*sizeof(double)); cudaMemcpy(&dev_A,&A,n*m*sizeof(double),cudaMemcpyHostToDevice); //In case if A is double