2017-05-03 5 views
-1

호스트의 고정 메모리에서 CUDA 장치로 어레이의 일부를 복사하고 싶습니다. 예를 들어 크기가 500 인 고정 메모리를 할당 했으므로 요소 100-399를 장치의 크기 300 배열에 복사하고 싶습니다. cudamallocHost를 사용하여 할당 된 메모리 부분을 복사하십시오.

Error copying to device: invalid argument 

만 호스트 - 투 - 디바이스 복사 실패, 내가 이것을 실행하면

int main() 
{ 
    const unsigned int N = 500; 
    const unsigned int bytes = N * sizeof(int); 
    cudaError_t status = cudaSuccess; 

    int *h_a; 
    int *d_a; 

    status = cudaMallocHost((void**) &h_a, bytes); 
    if (status != cudaSuccess) 
     cout << "Error allocating pinned host memory\n"; 

    status = cudaMalloc((void**) &d_a, bytes); 
    if (status != cudaSuccess) 
     cout << "Error allocating pinned device memory\n"; 

    for (int i = 0; i < N; i++) { 
     h_a[i] = i; 
    } 

    status = cudaMemcpy(d_a, h_a + 100, bytes - (200 * sizeof(int)), cudaMemcpyHostToDevice); 
    if (status != cudaSuccess) 
     cout << "Error copying to device: " << cudaGetErrorString(status) << "\n"; 
    cudaMemcpy(h_a + 100, d_a, bytes - (200 * sizeof(int)), cudaMemcpyDeviceToHost); 
    if (status != cudaSuccess) 
     cout << "Error copying to host: " << cudaGetErrorString(status) << "\n";  


    cudaFree(d_a); 
    cudaFreeHost(h_a); 

    return 0; 
} 

, 내가 호스트 - 장치에 복사 할이 오류가 내 코드입니다 . 장치 대 호스트 복사가 정상적으로 작동합니다. 또한 고정되지 않은 호스트 메모리를 사용하면 동일한 코드가 올바르게 작동합니다. 고정 된 메모리를 사용하여이를 수행 할 수있는 방법이 있습니까?

+0

게시 한 코드에 아무런 문제가 없으며 런타임 오류없이 나를 위해 실행됩니다. – talonmies

+0

네, 맞습니다. 시간을 낭비해서 죄송합니다. 아마도 이전 코드를 사용하는 다른 실행 파일을 실행하고있었습니다. –

답변

0

위의 코드는 실제로 컴파일되어 제대로 실행됩니다. 아마 내가 테스트하는 동안 이전 실행 파일을 사용하고 있었을 것입니다.

+1

며칠 후에 다시 돌아와이 질문에 답하지 않은 답안을 수락하십시오. – talonmies

+0

끝났어, 고마워! –