0

単純な arrayfire コンストラクターを呼び出すと、セグメンテーション違反が発生します。

#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;
}
4

1 に答える 1

2

af_randuArrayFire の 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 
)

したがって、2 番目の引数はndims(次元数) であり、この場合は 1 です。したがって、af_randu への呼び出しは次のようになります。

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

たとえば、10x10 の行列を実行している場合は、次のようにします。

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

完全な開示: 私は ArrayFire の開発者です。

于 2016-10-01T11:55:12.217 に答える