2015-11-02 75 views
0

有谁知道cuda.jit修饰符的正确语法是如果你想写一个返回多个数组的设备函数吗?NumaPro Cuda设备功能 - 返回多个数组和本地内存

如果我的设备函数返回一个浮子,有两个整型参数我的装饰是:

@cuda.jit('float64(int64,int64)', device=True, inline=True) 

现在,我想我的功能需要两个整数paramters和两个浮标和返回2列彩车和2所有长度相同(3到5之间)的整数数组,取决于输入参数。我怎么做? 这是正确:

@cuda.jit(restype=[float64[:], int64[:], float64[:], int64[:]], argtypes=[int64, int64, float64, float64], device=True, inline = True) 

而且在我的功能我会创造我想要通过使用返回数组:cuda.local.array() 由于我使用内嵌=真我怀疑,这将工作和阵列将是唯一由相应的线程访问,对吧?

回答

1

现在,我想我的功能需要两个整型参数和两个浮标 并返回花车2个阵列和2个阵列整数

你真正说有你想让你的JIT内核返回一个元组(两个数组)。不幸的是,在nopython前端,我不认为这是合法的。 nopython中没有对象支持,所以你不能实例化并返回一个元组对象。

而且在我的功能我会创造我想要通过使用返回数组:cuda.local.array()

不幸的是也不支持。返回一个作为参数传递给函数的数组只是合法的。

+0

谢谢你的回答!所以我唯一的选择是事先传递数组作为参数,但有几个设备函数来计算这些数组的条目,并为每个设备函数返回一个数组? – Escapado

+0

@Escapado:从效率的角度来看,我不认为这是非常明智的。为什么不将结果返回到同一个数组的不同切片中? – talonmies

+0

这可能会更有意义。但我想出了一个完全不同的方案来解决我的问题,所以这在我的代码中并不适用。但你可能是对的! – Escapado