2014-02-23 3 views
2

은 내가 MATLAB R2013b에서 실행하고 여기이 작은 말도 안되는 스크립트가 "응답하지"드라이버 오류로 연결 "표시 운전사가 작동을 멈추고 회복했습니다. "". 나는 가정계산이

enter image description here

윈도우 내 그래픽 카드 드라이버 또는 뭔가로부터 응답을받지 못했음을 의미합니다. 오류없이 반환 스크립트 :

>> test 
CPU:: 
::Go 
GPU:: 
::Go 
On CPU: 11.01 sec 
On GPU: 2.97 sec 

그러나 GPU 메모리의 여부가 떨어지면 상관없이, MATLAB 내가 그것을 다시 시작하기 전에 GPU 장치를 사용할 수 없습니다. 내가 MATLAB을 다시 시작하지 않으면 내가 CUDA에서 단지 메시지가 나타납니다

>> test 
Warning: An unexpected error occurred during CUDA 
execution. The CUDA error was: 
CUDA_ERROR_LAUNCH_TIMEOUT 
> In test at 1 
Warning: An unexpected error occurred during CUDA 
execution. The CUDA error was: 
CUDA_ERROR_LAUNCH_TIMEOUT 
> In test at 1 
Warning: An unexpected error occurred during CUDA 
execution. The CUDA error was: 
CUDA_ERROR_LAUNCH_TIMEOUT 
> In test at 1 
Warning: An unexpected error occurred during CUDA 
execution. The CUDA error was: 
CUDA_ERROR_LAUNCH_TIMEOUT 
> In test at 1 
CPU:: 
::Go 
GPU:: 
Error using gpuArray 
An unexpected error occurred during CUDA execution. 
The CUDA error was: 
the launch timed out and was terminated 

Error in test (line 21) 
A = gpuArray(A); 

사람이이 문제를 방지하기 위해 또는 내가 잘못 여기서 뭐하는거야 알고 있나요? 필요한 경우

내 GPU 장치 : 정보의 핵심 부분은 gpuDevice 출력의 일부인

>> gpuDevice 

ans = 

    CUDADevice with properties: 

         Name: 'GeForce GTX 660M' 
        Index: 1 
     ComputeCapability: '3.0' 
      SupportsDouble: 1 
      DriverVersion: 6 
      ToolkitVersion: 5 
     MaxThreadsPerBlock: 1024 
      MaxShmemPerBlock: 49152 
     MaxThreadBlockSize: [1024 1024 64] 
       MaxGridSize: [2.1475e+09 65535 65535] 
       SIMDWidth: 32 
       TotalMemory: 2.1475e+09 
       FreeMemory: 1.9037e+09 
     MultiprocessorCount: 2 
       ClockRateKHz: 950000 
       ComputeMode: 'Default' 
     GPUOverlapsTransfers: 1 
    KernelExecutionTimeout: 1 
      CanMapHostMemory: 1 
      DeviceSupported: 1 
      DeviceSelected: 1 
+0

아마도 데스크탑 UI 렌더링에 동일한 GPU가 사용됩니다. Windows 레지스트리에서 시간 초과 값을 비활성화해야합니다. –

답변

5

는 :

KernelExecutionTimeout: 1 

이 호스트 디스플레이 드라이버가 GPU에서 활성임을 의미 당신은 계산 작업을 실행하고 있습니다. NVIDIA 디스플레이 드라이버에는 화면 새로 고침을 위해 드라이버를 제어하지 않고 사전 정의 된 시간 이상을 소요하는 모든 작업을 종료시키는 워치 독 타이머가 포함되어 있습니다. 이것은 장시간 실행되거나 멈춘 컴퓨터 작업으로 인해 디스플레이가 정지되어 컴퓨터가 응답하지 않는 상황을 방지하기위한 것입니다. Matlab 스크립트의 런타임이 디스플레이 드라이버 워치 독 타이머 제한을 분명히 초과하고 있습니다. 그런 일이 발생하면 디바이스에 저장된 컴퓨팅 컨텍스트가 파괴되고 Matlab은 더 이상 디바이스에서 작동 할 수 없습니다. 커버 아래에 cudaDeviceReset()이 실행될 것 같아 reset을 호출하여 컨텍스트를 다시 초기화 할 수 있습니다.

interweb의 워치 독 타이머에 대한 많은 정보가 있습니다 (예 : this Stack Overflow question). 이 시간 제한을 수정하는 방법에 대한 솔루션은 OS 및 하드웨어에 따라 다릅니다. 이를 방지하는 가장 간단한 방법은 디스플레이 GPU에서 CUDA 코드를 실행하지 않거나 계산 작업의 세분성을 높이면 시간 제한 한도를 초과하는 런타임이 하나도 없도록하는 것입니다. 또는 더 빠른 코드를 작성하십시오.

+0

감사합니다. 그것이 문제였습니다. 아직 시간 제한 값을 변경하는 방법을 알지 못했지만'reset (gpuDevice (x))'가 잘 작동합니다! – displayname