2016-09-14 102 views
4

我正在学习如何在GPU加速计算蟒从this notebook,其中一条线让我困惑:Python的括号函数名和参数之间:FUNC [...](...)

mandel_kernel[griddim, blockdim](-2.0, 1.0, -1.0, 1.0, d_image, 20) 

这里,mandel_kernel是一个装饰(由cuda.jit)函数,griddimblockdim是长度为2的元组:griddim=(32,16),blockdim=(32,8)

这是方括号中的函数名和Python语法的参数列表部分,或具体到cuda.jit装饰的东西之间?

回答

5

这是有效的Python语法,我会尽力把它分解为您:

mandel_kernel是一个字典,它的键是2元组(griddim,blockdim)和值的方法(这是有效的,因为方法在Python对象)

mandel_kernel[griddim, blockdim]因此“返回”(或计算结果为)一个方法

mandel_kernel[griddim, blockdim](-2.0, 1.0, -1.0, 1.0, d_image, 20)因此调用这个方法与任何参数是在括号内。

key = tuple(griddim, blockdim) 
method = mandel_kernel[key] 
method(-2.0, 1.0, -1.0, 1.0, d_image, 20) 
+0

感谢您的答复:

这一条线能够在三条线像这样被改写。所以它是将'mandel_kernel'函数变成字典的装饰器,不是吗? – Jason

+0

不,这只是一个普通的带'功能'值的''dict' –

+0

是和不是,[@ cuda.jit]的文档(http://numba.pydata.org/numba-doc/dev/cuda-参考/ kernel.html?突出= cuda.jit#numba.cuda.jit)的状态,它返回其具有'AutoJitCUDAKernel'对象[__getitem__](https://github.com/numba/numba/blob/a3421beba7b3abc23357f78a5c416cb4ab3a49d4/ numba/cuda/compiler.py#L292)的方法,因此作为一个'dict' – iCart

相关问题