gpt4 book ai didi

python - Cuda组合算法错误: CUDA_ERROR_LAUNCH_FAILED

转载 作者:行者123 更新时间:2023-12-01 07:07:42 38 4
gpt4 key购买 nike

我正在尝试实现本文中描述的组合算法 https://www.developertyrone.com/blog/generating-the-mth-lexicographical-element-of-a-mathematical-combination/关于 CUDA。

它适用于 C(100,4)

     n=100
k=4

但是当我尝试 C(200,4) 时,我收到错误消息CUDA_ERROR_LAUNCH_FAILED

    n=200
k=4

我几乎可以肯定计算 n=200 的组合不会溢出,但我无法找出原因。

我调试了代码,没有溢出。有趣的一点是,代码有时会在 C(150,4) 上运行,有时会失败。

我强制所有整数为 int64。我试图逐一注释每一行,以找到导致错误的确切位置。当问题似乎出在函数largestV 中的这两行时

    while choose(v, b) > x:
v -= 1

当我评论这两行时,它不会崩溃。

完整代码如下:

import numba
from numba import cuda
import math
import numpy as np
from pdb import set_trace


@cuda.jit(device=True)
def choose(n, k):
if n < k:
return 0
if n == k:
return 1

delta = imax = 0
if k < n-k:
delta = n-k
imax = k
else:
delta = k
imax = n-k

ans = numba.int64(delta + 1)

for i in range(2, imax+1):
ans = numba.int64((ans * (delta + i)) / i)

return ans


@cuda.jit(device=True)
def largestV(a, b, x):

v = numba.int64(a-1)
while choose(v, b) > x:
v -= 1

return v


@cuda.jit
def cuda_calculateMth(n, k, d_result):
pos = cuda.grid(1) # pylint: disable=not-callable
if pos >= len(d_result):
return

m = numba.int64(pos)
a = numba.int64(n)
b = numba.int64(k)
x = numba.int64((choose(a, b) - 1) - m)

for i in range(k):
d_result[pos][i] = largestV(a, b, x)

x = x - choose(d_result[pos][i], b)
a = d_result[pos][i]
b -= 1

for i in range(k):
d_result[m][i] = (n-1) - d_result[m][i]




if __name__ == "__main__":

n = 200
k = 4
totalcount = int((n*(n-1)*(n-2)*(n-3)) / (4 * 3 * 2))
result = np.zeros((totalcount, 4), dtype="uint")
temp = np.zeros(10, dtype="uint")

d_result = cuda.to_device(result)
d_temp = cuda.to_device(temp)

threadsperblock = 128
blockspergrid = (totalcount +
(threadsperblock - 1)) // threadsperblock

cuda_calculateMth[blockspergrid, threadsperblock](
n, k, d_result)
result = d_result.copy_to_host()
print(result[-30:])

最佳答案

感谢talonmies,这是超时问题。我将 TDR 超时设置为 30,现在它可以工作了。

关于python - Cuda组合算法错误: CUDA_ERROR_LAUNCH_FAILED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58368124/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com