好吧,所以我想學習CUDA爲我以15美元購買的'新'FX 570; D 現在在代碼中沒有錯誤,array1_host從它的值開始正確,但是當我從設備複製內存到主機時,值保持不變。 同樣的事情發生,如果我空出的第二個內核調用(在這個項目中嘗試多個內核)我搞糊塗了,所以,謝謝您的幫助,我可以實現:)CUDA內存不返回到主機
#include <cuda_runtime.h>
#include <iostream>
#pragma comment (lib, "cudart")
#define N 5000
__global__ void addArray(float* a, float* b)
{
a[threadIdx.x] += b[threadIdx.x];
}
__global__ void timesArray(float* a, float* b)
{
a[threadIdx.x] *= b[threadIdx.x];
}
int main(){
float array1_host[N];
float array2_host[N];
float *array1_device;
float *array2_device;
cudaError_t err;
for(int x = 0; x < N; x++){
array1_host[x] = (float) x * 2;
array2_host[x] = (float) x * 6;
}
err = cudaMalloc((void**)&array1_device, N*sizeof(float));
err = cudaMalloc((void**)&array2_device, N*sizeof(float));
err = cudaMemcpy(array1_device, array1_host, N*sizeof(float), cudaMemcpyHostToDevice);
err = cudaMemcpy(array2_device, array2_host, N*sizeof(float), cudaMemcpyHostToDevice);
dim3 dimBlock(N);
dim3 dimGrid (1);
addArray<<<dimGrid, dimBlock>>>(array1_device, array2_device);
timesArray<<<dimGrid, dimBlock>>>(array1_device, array2_device);
err = cudaMemcpy(array1_host, array1_device, N*sizeof(float), cudaMemcpyDeviceToHost);
cudaFree(array1_device);
cudaFree(array2_device);
std::cout << cudaGetErrorString(err) << "\n\n\n\n\n\n";
std::cout << array1_host;
cudaDeviceReset();
system("pause");
return 0;
}
一些提示:如果有人解決了你的問題,你應該接受他的答案(綠色勾號,標記)。這將爲你增加2點聲望點,併爲有幫助的人增加15點聲望點。 – 2013-03-13 10:47:57