多数组计算中的cupy执行错误

时间:2018-12-03 13:27:53

标签: python cuda cupy

numpy循环没问题。
杯状循环1次,可以3次。但是十次出错。
我该如何解决这个问题?
这是GPU内存问题吗?

(源代码)

import cupy as cp  
import numpy as np  

mc = 5000  
def fcal(ff, nloop, skey):  
    maa = ff.zeros((mc,mc)) + 0.0  
    mbb = ff.zeros((mc,mc)) + 0.0  
    for jj in range(nloop): maa = ff.dot(maa, mbb)  
    asum = ff.sum(maa)  
    print("[fcal] (%s) nloop=[%2d] asum=[%s]" % (skey, nloop, asum))  

fcal(np,  1, "np")  
fcal(np,  3, "np")  
fcal(np, 10, "np")  
fcal(cp,  1, "cp")  
fcal(cp,  3, "cp")  
fcal(cp, 10, "cp")  

(执行结果)

[fcal] (np) nloop=[ 1] asum=[0.0]  
[fcal] (np) nloop=[ 3] asum=[0.0]  
[fcal] (np) nloop=[10] asum=[0.0]  
[fcal] (cp) nloop=[ 1] asum=[0.0]  
[fcal] (cp) nloop=[ 3] asum=[0.0]  
Traceback (most recent call last):  
  File "C:\testdir\2cupy_test.py", line 30, in <module>  
    fcal(cp, 10, "cp")  
  File "C:\testdir\2cupy_test.py", line 22, in fcal  
    print("[fcal] (%s) nloop=[%2d] asum=[%s]" % (skey, nloop, asum))  
  File "cupy\core\core.pyx", line 1596, in cupy.core.core.ndarray.__str__  
  File "cupy\core\core.pyx", line 1643, in cupy.core.core.ndarray.get  
  File "cupy\cuda\memory.pyx", line 372, in cupy.cuda.memory.MemoryPointer.copy_to_host  
  File "cupy\cuda\runtime.pyx", line 255, in cupy.cuda.runtime.memcpy  
  File "cupy\cuda\runtime.pyx", line 135, in cupy.cuda.runtime.check_status  
cupy.cuda.runtime.CUDARuntimeError: cudaErrorLaunchFailure: unspecified launch failure  

1 个答案:

答案 0 :(得分:2)

您的代码没有问题:每次迭代都独立于另一个,因为您在顺序模式下求和为零。如果您可以使用一次迭代就可以正确运行它,那么问题就不在代码实现中了。

您可能正陷入罗伯特·克罗维拉(Robert Crovella)评论中指出的TDR错误,因为更多的迭代可能会延迟GPU对查询操作系统的响应时间。

我想检查您是否真的遇到了TDR问题,假设一次迭代运行没有问题,请尝试在每个ff.dot操作之间添加几秒钟的简单睡眠,以使OS收到响应从GPU。

我强调这不是解决TDR问题的方法,而是一种简单的方法来检测您是否陷入困境。

import time
...
for jj in range(nloop): 
   maa = ff.dot(maa, mbb)
   time.sleep(10)