2016-10-01 75 views

回答

3

af_randu是ArrayFire中的C-API函数。理想情况下,用户不需要直接调用这些功能。

你需要调用的是af::randu()。所以,你要RANDU电话是:

af:array b = af::randu(N, f32); 

以下就是回答提出的问题,为af_randu的C-API是

AFAPI af_err af_randu(af_array *out, 
         const unsigned ndims, 
         const dim_t *const dims, 
         const af_dtype type 
) 

所以第二个参数是ndims(维数) ,而你的情况是1。因此您的来电af_randu是:

af_randu(&a, 1, &dims, f32); 

如果你正在做的一个矩阵让说10×10,那么你会怎么做

dim_t dims[] = {10, 10} 
af_randu(&a, 2, dims, f32); 

完全披露:我是ArrayFire的开发人员。

+0

非常感谢回复。我对迟到的回应表示歉意。我不想生成一个随机数组。我们的团队正在使用Afnumpy进行项目。我们需要在C++中公开Afnumpy.d_array.arr对象,以便编写定制的CUDA内核。我能够处理af_array对象,但是当我尝试创建af :: array对象时,出现了分段错误。 –

+0

即使在我提到的纠正了ndims参数后,你是否也遇到了分段错误? 您应该使用[array :: device ()] [1]函数获取CUDA设备指针。这个C-API是[af_get_device_ptr()] [2]。 [1]:http://arrayfire.org/docs/group__device__func__device.htm [2]:http://arrayfire.org/docs/group__device__func__mem.htm#ga58fda2d491cd27f31108e699b5aef506 – shehzan

+0

感谢。这工作。 –