2012-12-19 5 views
0

는 내가 처음으로 다음과 같은 멀티 GPU CUDA 코드가 :왜 여러 GPU CUDA 코드가 실패 했습니까?

int main(void) { 
    int count; 
    cudaGetDeviceCount(&count); 
    float** gtt = new float*[count]; 
    for (int i=0; i< count; i++) { 
     cudaSetDevice(i); 
     int j; 
     cudaGetDevice(&j); 
     printf("get device %d\n",j); 
     cudaMalloc((void**)&gtt[i], 2*sizeof(float)); 
     cudaFree(gtt[i]); 
    } 
} 

나는 동일한 노드 3 개 장치를 찾았지만, 두 번째 GPU 실행에 세그먼트 오류가 발생했습니다. 저는 4010의 CUDA 버전과 2.0의 계산 기능을 가지고 있습니다.

+0

각 API 호출에 오류 검사를 추가해야합니다. 중요한 정보가 누락 될 수 있습니다. – talonmies

+0

@ talonmies 나는 했어.하지만 같은 일로 끝났어. –

+0

segfaults는 일반적으로 CPU 범위 밖의 메모리에 액세스하고 있음을 의미합니다. cudaMalloc을하기 전에 ptr gtt [i]를 출력하십시오. –

답변

1

결국 문제를 발견했습니다. 다음과 같이 큐어 프로파일 링 환경을 설정했습니다.

export COMPUTE_PROFILE=1 
export COMPUTE_PROFILE_LOG=cuda_profile.log 

두 번째 줄로 인해 문제가 발생합니다. 다른 GPU가 동일한 프로파일 링 로그 파일에 기록 할 때 충돌이있을 수 있습니다. 두 번째 줄을 다음으로 변경하십시오.

export COMPUTE_PROFILE_LOG=cuda_profile_%p_%d.log 

이 문제를 해결합니다.

관련 문제