अगर मैं इस कार्यक्रम मैं त्रुटि "एक अवैध स्मृति पहुँच लाइन 48 पर matrixMulti.cu में सामना करना पड़ा था" चलाते हैं। मैंने खोज की और बहुत कोशिश की। तो मुझे उम्मीद है कि कोई मेरी मदद कर सकता है।सरल CUDA टेस्ट हमेशा साथ त्रुटि "एक अवैध स्मृति पहुँच का सामना करना पड़ा था," विफल रहता है
रेखा 48: हैंडल_एआरआरओआर (cudaMemcpy (सरणी, devarray, एन * एन * आकार (int), cudaMemcpyDeviceToHost));
कार्यक्रम सिर्फ CUDA में प्राप्त करने के लिए है। मैंने मैट्रिक्स गुणा को लागू करने की कोशिश की।
#include <iostream>
#include<cuda.h>
#include <stdio.h>
using namespace std;
#define HANDLE_ERROR(err) (HandleError(err, __FILE__, __LINE__))
void printVec(int** a, int n);
static void HandleError(cudaError_t err, const char *file, int line)
{
if (err != cudaSuccess)
{
printf("%s in %s at line %d\n", cudaGetErrorString(err),
file, line);
exit(EXIT_FAILURE);
}
}
void checkCUDAError(const char *msg)
{
cudaError_t err = cudaGetLastError();
if(cudaSuccess != err)
{
fprintf(stderr, "Cuda error: %s: %s.\n", msg,
cudaGetErrorString(err));
exit(EXIT_FAILURE);
}
}
__global__ void MatrixMulti(int** a, int** b) {
b[0][0]=4;
}
int main() {
int N =10;
int** array, **devarray;
array = new int*[N];
for(int i = 0; i < N; i++) {
array[i] = new int[N];
}
HANDLE_ERROR (cudaMalloc((void**)&devarray, N*N*sizeof(int)));
HANDLE_ERROR (cudaMemcpy(devarray, array, N*N*sizeof(int), cudaMemcpyHostToDevice));
MatrixMulti<<<1,1>>>(array,devarray);
HANDLE_ERROR (cudaMemcpy(array, devarray, N*N*sizeof(int), cudaMemcpyDeviceToHost));
HANDLE_ERROR (cudaFree(devarray));
printVec(array,N);
return 0;
}
void printVec(int** a , int n) {
for(int i =0 ; i < n; i++) {
for (int j = 0; j <n; j++) {
cout<< a[i][j] <<" ";
}
cout<<" "<<endl;
}
}
धन्यवाद :) मुझे लगता है कि मैं मैट्रिक्स के -1 डी संस्करण की कोशिश करेंगे, यह आसान हो रहा है – Henrik