2016-09-14 50 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

相關問題