Generator
の中から行列 - 行列乗算を実行しようとしています。以前は他の関数と同じようにdefine_extern
を使用していたはずですが、何らかの理由でGEMM(つまりBLASのmat-mat multiply)を使用した場合、segfaultが発生します。ハライド:ジェネレータ内からBLAS演算を実行
はここに私のコードです:いくつかのapps/linear_algebra
スクリプトで
class TestBLAS : public Halide::Generator<TestBLAS> {
public:
Input<Buffer<float>> A{"A", 2};
Input<Buffer<float>> B{"B", 2};
Output<Buffer<float>> C{"C", 2};
Var x,y;
void generate() {
Func g;
g.define_extern("hblas_sgemm", {false, false, 1.f, A, B, 0.f}, type_of<float>(), 2);
C(x,y) = g(x,y);
}
};
HALIDE_REGISTER_GENERATOR(TestBLAS, testblas)
、私はHalide::Runtime::Buffer::raw_buffer()
が渡されました。 Halide::GeneratorInput<Halide::Buffer<float> >
またはHalide::Func
からこのポインタにアクセスするにはどうすればよいですか?
Func
の未知の境界がわかりにくいと理解していますが、その情報を別途提供する方法はありますか?
はファビアンの応答@の後、私は発電機の中からcontext
を初期化するために管理しますが、最も近いされていない:docs私は方法を見つけるしていないようです...
Updateから
私は、コードの作業はこれをした作りになった:
...
GEMMGenerator<float> gemm;
void generate() {
gemm.set_inputs(1., A, B, 0., B);
C = gemm.result_;
}
これはコンパイルが、私はそれを実行したときに、私が取得:
Condition failed: funcs_.size() == array_size() && exprs_.empty()
Aborted (core dumped)
これを回避する方法はありますか?
私は 'context'をどのように初期化するつもりですか?また、入力またはFuncsを渡した場合にのみ、この機能が動作しますか? –
zanbri
少し精巧に質問を更新しました。ありがとう。 – zanbri