나는 커다란 CUDA 커널에서 세분화 된 메모리 오류를 가지고 있다고 생각합니다. 장치 측 printf는 결정적이어야하는 변수에 대해 다양한 값을 보여줍니다. 내가 사용하고있는 CUDA 개발 툴의 "안정된"버전은 제거 된 디바이스 에뮬레이션 모드이며 cuda-gdb 버전은 템플릿 기능과 함께 작동하지 않습니다. Cuda-memcheck는 실행되지만 아무것도 잡을 수 없습니다.CUDA 용 미세 입자 메모리 검사기?
CPU에서 valgrind 또는 electric fence를 사용하여 이와 같은 메모리 오류를 잡을 수 있습니다. 사용 가능한 모든 것이 printf라면 메모리 오류를 디버깅하는 데있어 깔끔한 트릭이 있습니까?
예를 들어 전체 메모리 공간을 nans로 플러딩하고 printfs를 사용하여 계산에서 처음 팝업되는 위치를 찾는 방법이 있습니까?
할당량 사이에 일정한 간격을 두지 않으면 기본적으로 전기 울타리 라이브러리를 직접 구현합니다. 한 가지 단점은 사용 가능한 전체 메모리 공간을 실제로 할당하면 gpu 당 하나의 cuda 앱으로 제한된다는 것입니다. –
이제는 호스트에 대한 모든 할당 작업을 수행 중이라고 가정 할 때 libefence를 구현하는 것이 거의 가능합니다. LD_PRELOAD 해킹을 사용하여 cudaMalloc과 cudaFree를 트랩해야합니다. 누락 된 유일한 문제는 패딩 된 영역을 읽을 수 없거나 쓸 수없는 것으로 표시하여 범위를 벗어날 때마다 자동으로 세그 폴트 할 수있는 기능입니다. –
@Drew Wagner : 원하는 경우 전체 메모리를 덜 할당 할 수 있습니다. CUDA-memcheck 또는 런타임은 VRAM 또는 다른 응용 프로그램 공간을 차지할 수있는 것을 잡을 수 있습니다. 방금 얻은 모든 바이트가 필요한 큰 선형 대수학 문제에서 작업하는 경향이 있으므로 방금 할당했습니다. – talonmies