좋아, 이제 15 달러에 구입 한 'new'FX 570에 대해 CUDA를 배우려고하는데 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 명을 추가합니다. –