[問題] cuda記憶體問題
環境好不容易設定完之後 就開始在ptt學習
翻舊文章找到a5000ml(查詢不到網友)大大的教學文
以下是code
#include<stdio.h>
#include<cuda.h>
int main(){
const int num=10;
int* g;
cudaError_t r;
//主機陣列 & 初始化
int a[num], b[num];
for(int k=0; k<num; k++){
a[k]=0;
b[k]=k;
}
//配置裝置記憶體 & 顯示錯誤訊息
問題所在!!!
r=cudaMalloc((void**) &g, sizeof(int)*num);
//r=cudaMalloc((void**) &g, sizeof(int)*num);
printf("cudaMalloc : %s\n",cudaGetErrorString®);
//複製記憶體: 主機記憶體 a[] ------> 裝置記憶體 g[]
r=cudaMemcpy(g, a, sizeof(int)*num, cudaMemcpyHostToDevice);
printf("cudaMemcpy a => g : %s\n",cudaGetErrorString®);
//複製記憶體: 裝置記憶體 g[] ------> 主機記憶體 b[]
r=cudaMemcpy(b, g, sizeof(int)*num, cudaMemcpyDeviceToHost);
printf("cudaMemcpy g => b : %s\n",cudaGetErrorString®);
//結果比對
bool ooo=true;
for(int k=0; k<num; k++){
if(a[k]!=b[k]){
ooo=false;
break;
}
}
printf("check a==b? : %s\n",ooo?"pass":"wrong");
//釋放裝置記憶體
r=cudaFree(g);
printf("cudaFree : %s\n",cudaGetErrorString®);
return 0;
}
正確結果:
cudaMalloc : no error
cudaMemcpy a => g : no error
cudaMemcpy g => b : no error
check a==b? : pass
cudaFree : no error
我印出的結果是:
cudaMalloc : no CUDA-capable device is detected
cudaMemcpy a => g : no CUDA-capable device is detected
cudaMemcpy g => b : no CUDA-capable device is detected
check a==b? : wrong
cudaFree : no CUDA-capable device is detected
而我只要在cudaMalloc那裡多重復一次配置記憶體空間就對了 (註解裡紅色字)
我不懂為什麼同樣的指標需要要兩次cudaMalloc才能夠成功要到配置
我有在思考是不是我環境有細節沒設定好 小弟用的是 vs2008+cuda4.0
或是cuda本身版本問題???
請高手解答一下我的問題 @@"
另外小問一下有關於cuda程式設計討論區的地方嗎?
nvidia的討論區似乎沒什麼人。。。。。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.221.131
推
08/11 01:57, , 1F
08/11 01:57, 1F
→
08/11 01:57, , 2F
08/11 01:57, 2F
→
08/11 10:49, , 3F
08/11 10:49, 3F
→
08/11 10:49, , 4F
08/11 10:49, 4F
→
08/11 11:05, , 5F
08/11 11:05, 5F
→
08/11 19:16, , 6F
08/11 19:16, 6F
推
08/11 22:11, , 7F
08/11 22:11, 7F
→
08/11 22:12, , 8F
08/11 22:12, 8F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章