从调用一个简单的arrayfire构造函数,我得到了Segmentation Fault。从简单的arrayfire构造函数中获取seg fault
#include <arrayfire.h>
int main(){
af_array a;
int N = 10;
dim_t dims = 10;
af_randu(&a, N, &dims, f32);
af::array b(a);
return 0;
}
从调用一个简单的arrayfire构造函数,我得到了Segmentation Fault。从简单的arrayfire构造函数中获取seg fault
#include <arrayfire.h>
int main(){
af_array a;
int N = 10;
dim_t dims = 10;
af_randu(&a, N, &dims, f32);
af::array b(a);
return 0;
}
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的开发人员。
非常感谢回复。我对迟到的回应表示歉意。我不想生成一个随机数组。我们的团队正在使用Afnumpy进行项目。我们需要在C++中公开Afnumpy.d_array.arr对象,以便编写定制的CUDA内核。我能够处理af_array对象,但是当我尝试创建af :: array对象时,出现了分段错误。 –
即使在我提到的纠正了ndims参数后,你是否也遇到了分段错误? 您应该使用[array :: device
感谢。这工作。 –
哪一行会导致段错误? – HazemGomaa