私は、ブルートフォースディスクリプタ(例:SIFT)のマッチングにHalideを使用しようとしています。スケジュールでrfactorを試してみたいですが、私は、連想性証明者に義務を負うことはできません。これまでのところ私には、以下の持っている:私はこれを解決する可能性がどのようになどの任意のポインタのためのrfactorディスクリプタマッチングのスケジュール
|| Failed to call rfactor() on minVal.update(0) since it can't prove associativity of the operator
ありがとう:最後、コメントのない行は、悲しいことに失敗した
Var c("c"), i("i");
Func diff("diff"), diffSq("diffSq"), dotp("dotp"), out("out"),
inp1("inp1"), inp2("inp2"), minVal("minVal");
inp1(c,x) = input1(c,x);
inp2(c,y) = input2(c,y);
diff(x,y,c) = inp1(c, x) - inp2(c, y);
diffSq(x,y,c) = diff(x,y,c) * diff(x,y,c);
RDom rc(0,128);
dotp(x, y) = 0.f;
dotp(x, y) += diffSq(x, y, rc);
// Argmin, see https://github.com/halide/Halide/blob/master/test/correctness/rfactor.cpp#L804
RDom ry(0, input2.height(), "ry");
minVal(x) = {-1, std::numeric_limits<float>::max()};
minVal(x) = {
select(minVal(x)[1] < dotp(x, ry)
,minVal(x)[0]
,ry),
min(minVal(x)[1], dotp(x, ry))
};
out(x) = minVal(x)[0];
// Schedule
RVar ryo("ryo"), ryi("ryi");
Var yy("yy");
Func intermediate("inter");
dotp.compute_root();
minVal.update(0).split(ry, ryo, ryi, 16);
//intermediate = minVal.update(0).rfactor(ryo, yy);
!
これを[email protected]に投稿してもよろしいですか?回答に最も適格な人物は現在スタックオーバーフローに参加していません。私はあなたが好きなら質問を送ることもできますが、もしあなたが自分でそれをしたら、あなたが会話をする方が簡単かもしれないと考えました。これがあなたのために働かないなら、私は明日答えを得ようとします。 (質問へのリンクを投稿するのはもちろん大丈夫です。) –
あなたの迅速な返信ありがとうございますZalman!あなたが提案してメーリングリストに投稿したとき、私はやったことがあります。 –