2012-04-24 2 views
1

일부 GPU 프로그램 (CUDA 4.1 및 C 사용)을 사용하고 있으며 일부 경우 예외 처리를 위해 Ctrl + C를 사용하여 프로그램을 중간에 종료해야하는 경우가 있습니다. 이전에 나는 CudaDeviceReset() 함수를 사용해 보았지만 this reply by talonmies은 CudaDeviceReset()에 대한 신뢰를 옮겨 놓았고 그런 예외를 '컴퓨터 재시작'이라고하는 구식 방식으로 처리하기 시작했습니다. 프로젝트 규모가 커지면서이 방법은 두통이되고 있습니다. 누구든지 더 나은 솔루션을 제시한다면 감사하게 생각합니다.GPU에서 Ctrl + C 예외 처리

+1

내가 cudaDeviceReset()가'컨텍스트를 파괴하고 프로세스 자체를 할당 한 자원을 해제 완벽하게 괜찮', 이전 당신에게 나는 내 답변을 썼던 것처럼. 당신은 그것을 호출해야 호스트 코드 나 장치 코드가 호스트 드라이버 나 장치를 재부팅이 필요한 아주 나쁜 상태로 두지 않고 호스트 코드 나 장치 코드를 실행하거나 종료 할 수없는 경우 h 우선 심각한 문제를 수정하거나 코드 문제를 해결하십시오. CUDA 리눅스 드라이버는 과거에 Ctrl + C 문제를 가지고 있었지만 몇 년 전 AFAIK를 수정했습니다 ..... – talonmies

답변

2

이 질문이 더 근본적이라고 생각합니다. 실제로 앱 디자인 문제이며 CUDA 문제는 아닙니다. 응용 프로그램을 올바르게 설계하여 인터럽트를 정기적으로 확인하고 인터럽트가 발생하면 기본 루프를 종료하고 리소스를 정리하면 문제가 발생하지 않습니다.

답변은 다음과 같습니다. this question 도움이 될. 그리고 this one. 그리고 this one 수 있습니다.

+0

하지만 디자인 단계에서는 어떨까요? 디자인 단계에서 Ctrl + C를 사용하여 실행 중간 단계를 중단해야 할 수도 있습니다. 이러한 경우, 사용 된 GPU 메모리는 올바른 안전 장치 기술이 적용 되었음에도 불구하고 그대로 유지됩니다. 이러한 시나리오에서 프로그램을 다시 실행하기 전에 GPU 메모리 위치가 NULL로 재설정되었는지 어떻게 확인할 수 있습니까? – Abhinav

+1

@Abhinav : 나는 실제로 그런 일이 실제로 일어나지 않는다고 생각합니다. 코드의 비정상적인 종료로 인해 출시되지 않은 GPU 리소스/장치 "메모리 누수"가 발생한다는 증거를 포함하도록 질문을 편집 할 수 있습니까? – talonmies

+0

동의. 나는 CTRL + C를 사용하고 간단한 어플리케이션에서 보통이 대답으로부터 내 자신의 조언을 듣지 않고 인터럽트를 적절히 처리하지 않으며 컴퓨터를 멈추게하는 나쁜 CUDA 코드를 작성하지 않으면 내 컴퓨터를 재부팅 할 필요가 거의 없다. – harrism