2010-06-01 3 views
5

나는 진짜 수정 프로그램입니다. 도와주세요. 그것은 급해.NVIDIA GPU에서 실행중인 불량 커널을 죽일 수 없습니다

나는 다중 호스트 (CPU) 스레드 (pthreads)를 생성하는 호스트 프로세스를 가지고있다. 이 쓰레드는 차례로 CUDA 커널을 호출합니다. 이 CUDA 커널은 외부 사용자가 작성합니다. 따라서 무한 루프로 들어가는 나쁜 커널 일 수 있습니다. 이를 극복하기 위해 해당 CPU 스레드를 죽일 2 분의 시간 제한을 설정했습니다.

CPU 스레드를 죽이면 GPU에서 실행중인 커널도 종료됩니까? 내가 뭘 테스트했는지는 알지 못한다.

현재 GPU에서 실행중인 모든 스레드를 어떻게 죽일 수 있습니까?

편집 : 커널을 호출하는 CPU 스레드를 사용하는 이유는 서버에 2 개의 Tesla GPU가 있기 때문입니다. 따라서 스레드는 GPU 장치에서 커널을 교대로 예약합니다.

감사합니다, 아빈

답변

0

또한 CPU의 스레드가 GPU에서 실행중인 커널을 죽이고 죽이는 것인가? 내가 뭘 테스트했는지는 알지 못한다.

아마도 그렇지 않습니다. 리눅스에서는 cuda-gdb를 사용하여이를 파악할 수 있습니다.

스레드를 사용하여 GPU에 여러 커널을 보내는 것이 보이지 않습니다. 여러 커널을 GPU에 보내면 어떻게 될지 궁금합니다. GPU의 스레드 스케줄러가 처리할까요?

+0

컨텍스트가 다양하기 때문에 별도의 커널을 GPU로 보내야합니다. 초기화 데이터가 다를 수 있습니다. 스레드 사용 정보 플랫폼은 CPU를 염두에두고 설계되었습니다. 그런 다음 GPU 용으로 재사용했습니다. 나는 그것이 중요해야한다고 생각하지 않는다. GPU 스케줄러가 커널 요청을 큐에 넣을 것입니다. (내가 생각하기에 틀린 것 같습니다.) – arvindkgs

+0

시도해 보았습니다. 그렇습니다. 문제가 무엇인지 알아낼 수 있었습니까? 당신은 어떤 플랫폼입니까? (Linux, Windows 또는 Mac?) – Nils

+0

아직 지원되지 않습니다. 리눅스 작업 중 (centos 5.4) – arvindkgs

1

보이지 않습니다. 깨진 커널을 실행하고 재부팅 할 때까지 내 장치 중 하나를 무기한으로 갇혀있었습니다. 실행중인 커널을 죽이는 방법을 잘 모르겠습니다. 드라이버를 통해 커널 실행 시간을 제한 할 수있는 방법이 있다고 생각합니다.

1

큰 부분이 없다면 멀티 장치 태스킹을 위해 CUDA Streams API를 사용하는 것이 나을 것입니다. 그러나 YMMV.

살해에 관해서는; 디스플레이 (및 x 서버)가 부착 된 상태에서 카드를 실행하면 5 초 (다시 YMMV) 후에 자동으로 시간 초과됩니다.

그렇지 않은 것으로 가정합니다. 체크 아웃 전화 cudaDeviceReset() API Reference; 자신의 처방 된 'kill'타임 아웃 후에 '부모'스레드에서.

본인의 코드에이 기능을 구현하지 않았지만 귀하의 상황에서는 효과가 있을지 모르지만 조사할만한 가치가 있는지는 알 수 없습니다.