如何在GPU中计算对数(python3.5+numba+CUDA8.0)

2024-06-16 10:15:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我用GPU计算对数数学日志,它是Supported Python features in CUDA Python之一。但是失败了。在

我的代码:

import os,sys,time,math
import pandas as pd
import numpy as np

from numba import cuda, float32

import os

bpg = (3,1) 
tpb = (2,3) 

@cuda.jit
def calcu_T(D,T):


    bx = cuda.blockIdx.x

    tx = cuda.threadIdx.x
    ty = cuda.threadIdx.y

    c_num = D.shape[1]

    ml = math.log(D[tx,ty],2)

D = np.array([[ 0.42487645,0.41607881,0.42027071,0.43751907,0.43512794,0.43656972,0.43940639,0.43864551,0.43447691,0.43120232],
              [2.989578,2.834707,2.942902,3.294948,2.868170,2.975180,3.066900,2.712719,2.835360,2.607334]], dtype=np.float32)
T = np.empty([1,1])

dD = cuda.to_device(D)
dT = cuda.device_array_like(T)
calcu_T[bpg, tpb](dD,dT)

错误报告:

^{pr2}$

是打字员吗?我怎样才能改正呢?在

我用CUDA模拟器运行这些代码(here在细节中显示),它并没有错误。为什么?在


Tags: 代码importosasnpmathcudatx
1条回答
网友
1楼 · 发布于 2024-06-16 10:15:19

numba运行时会告诉您问题所在

Invalid usage of Function(<built-in function log>) with parameters (float32, int64)
Known signatures:
 * (int64,) -> float64
 * (uint64,) -> float64
 * (float32,) -> float32
 * (float64,) -> float64

也就是说,唯一可用的签名只有一个参数。未实现基参数。如果你看一下source,你可以看到math.log似乎直接绑定到CUDA log函数,它只计算自然对数。在

我猜这是Numba中的a documentation error。如果你觉得不舒服,我建议你报告一下。在

相关问题 更多 >