2013-03-13 2 views
0

좋아, 이제 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

팁 : 누군가가 문제를 해결하면 그 답을 수락해야합니다 (녹색 눈금, 마크). 이것은 당신에게 도움이되는 사람에게 2 명성 점수와 15 명을 추가합니다. –

답변

3

를 그래서 오히려 혼란 스러워요 어떤 도움을 주셔서 감사 일 N은 5000이지만 블록에서 threds에 대한 제한이 있습니다 - 계산 기능 link to features on wiki에 달려 있습니다.
이 코드를보십시오 :

#define K 200 

.... 

dim3 dimBlock(K); 
dim3 dimGrid (N/K); 

코드를 디버깅하려면 당신이 버그가 exaple about CUDA errors을 배치 위치를 알고 커널이나 다른 기능의 각 호출 후 cudaGetLastError()를 사용할 수 있습니다.

+0

고맙습니다. 정확히 그게 문제였습니다. –

관련 문제