Wenn ich dieses Programm ausführen bekomme ich "ein illegaler Speicherzugriff wurde in MatrixMulti.cu bei Zeile 48 aufgetreten" Fehler. Ich habe viel gesucht und versucht. Ich hoffe also, dass mir jemand helfen kann.Einfache CUDA-Test schlägt immer mit "ein unzulässiger Speicherzugriff wurde aufgetreten" Fehler
Zeile 48: HANDLE_ERROR (cudaMemcpy (Array, devarray, N * N * sizeof (int), cudaMemcpyDeviceToHost));
Das Programm ist nur in CUDA zu bekommen. Ich habe versucht, eine Matrixmultiplikation zu implementieren.
#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;
}
}
Danke :) Ich denke, ich werde die 1D-Version der Matrix versuchen, so scheint es leichter zu sein, – Henrik