如果我運行這個程序,我得到「在第48行matrixMulti.cu出現非法內存訪問」錯誤。我搜索並嘗試了很多。所以我希望有人能幫助我。 (數組,devarray,N * N * sizeof(int),cudaMemcpyDeviceToHost));簡單的CUDA測試總是失敗,出現「非法內存訪問」錯誤
該程序只是爲了進入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;
}
}
謝謝:)我想我會嘗試矩陣的一維版本,它似乎更容易 – Henrik 2014-09-06 18:14:58