2014-02-23 53 views
2

我這裏有這個小胡說腳本,我在MATLAB R2013b正在執行:計算的GPU會導致驅動程序錯誤「停止響應」

clear all; 

n = 2000; 
times = 50; 
i = 0; 

tCPU = tic; 

disp 'CPU::' 
A = rand(n, n); 
B = rand(n, n); 
disp '::Go' 
for i = 0:times 
    CPU = A * B; 
end 

tCPU = toc(tCPU); 
tGPU = tic; 

disp 'GPU::' 
A = gpuArray(A); 
B = gpuArray(B); 
disp '::Go' 
for i = 0:times 
    GPU = A * B ; 
end 
tGPU = toc(tGPU); 

fprintf('On CPU: %.2f sec\nOn GPU: %.2f sec\n', tCPU, tGPU); 

不幸的是執行後,我收到一條消息,從Windows說:「顯示司機停止工作,並已恢復。「」。

enter image description here

我假設意味着Windows並沒有得到我的顯卡驅動程序什麼的響應。沒有錯誤返回的腳本:

>> 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 

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

可能使用相同的gpu進行桌面UI渲染。您需要從Windows註冊表中禁用超時值。 –

回答

5

的關鍵信息是gpuDevice輸出的這一部分:

KernelExecutionTimeout: 1 

這意味着主機顯示驅動器是有源在GPU上您正在運行計算作業。 NVIDIA顯示驅動程序包含一個看門狗定時器,可以消除超過預定義時間的任何任務,而不會將控制權交給驅動程序進行屏幕刷新。這是爲了防止長時間運行或卡住的計算作業通過凍結顯示來使機器不響應的情況。 Matlab腳本的運行時間顯然超出了顯示驅動器的看門狗定時器限制。一旦發生這種情況,設備上保存的計算上下文將被破壞,而且Matlab不能再使用該設備。您可以通過調用reset重新初始化上下文,我想這將在封面下運行cudaDeviceReset()

在interweb上有很多關於此看門狗定時器的信息 - 例如this Stack Overflow question。如何修改此超時的解決方案取決於您的操作系統和硬件。避免這種情況的最簡單方法是不要在顯示GPU上運行CUDA代碼,或增加計算作業的粒度,以便沒有任何操作的運行時間超出超時限制。或者只是寫更快的代碼...

+0

謝謝。這是問題所在。還沒有想出如何改變超時值,但重置(gpuDevice(x))'工作正常! – displayname

相關問題