2016-09-14 22 views
4

私は1本​​のラインが私を混乱させるところ、this notebookからGPU上でのpythonの計算を加速する方法を学んでいた:Pythonの角括弧:FUNC [...](...)

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

mandel_kernelは装飾された(cuda.jitによって)、griddimおよびblockdimは長さ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

ありがとう:

この一行は、そのような3列に書き換えることができます。 'mandel_kernel'関数をdictに変換するのはデコレータですね。 – Jason

+0

いいえ、それは単に 'function'' values 'を持つ普通の' dict'です –

+0

はい、いいえ、[@ cuda.jit]の文書(http://numba.pydata.org/numba-doc/dev/cuda- reference/kernel.html?highlight = cuda.jit#numba.cuda.jit)は、[__getitem__](https://github.com/numba/numba/blob/a3421beba7b3abc23357f78a5c416cb4ab3a49d4/)を持つ 'AutoJitCUDAKernel'オブジェクトを返しますnumba/cuda/compiler.py#L292)メソッドを呼び出すため、dict – iCart