static void applyParallel(const FileNode& directive, Halide::Func& func)
{
std::string varName;
- for (int i = 0, n = directive.size(); i < n; ++i)
+ if (directive.isSeq())
{
- directive[i] >> varName;
+ for (int i = 0, n = directive.size(); i < n; ++i)
+ {
+ directive[i] >> varName;
+ func.parallel(Halide::Var(varName));
+ }
+ }
+ else
+ {
+ directive >> varName;
func.parallel(Halide::Var(varName));
}
}
static void applyUnroll(const FileNode& directive, Halide::Func& func)
{
std::string varName;
- for (int i = 0, n = directive.size(); i < n; ++i)
+ if (directive.isSeq())
{
- directive[i] >> varName;
+ for (int i = 0, n = directive.size(); i < n; ++i)
+ {
+ directive[i] >> varName;
+ func.unroll(Halide::Var(varName));
+ }
+ }
+ else
+ {
+ directive >> varName;
func.unroll(Halide::Var(varName));
}
}
// Halide::argmax returns tuple (r.x, r.y, max).
Halide::Tuple res = argmax(inputBuffer(kx, ky, c, n));
+ if (!computeMaxIdx)
+ {
+ top(x, y, c, n) = res[2];
+ return Ptr<BackendNode>(new HalideBackendNode(top));
+ }
+
// Compute offset from argmax in range [0, kernel_size).
Halide::Expr max_index;
if(paddingLeft || paddingTop)
TEST_P(DNNTestNetwork, AlexNet)
{
applyTestTag(CV_TEST_TAG_MEMORY_1GB);
- if (backend == DNN_BACKEND_HALIDE) // Realization contains wrong number of Images (1) for realizing pipeline with 2 outputs
- applyTestTag(CV_TEST_TAG_DNN_SKIP_HALIDE);
-
processNet("dnn/bvlc_alexnet.caffemodel", "dnn/bvlc_alexnet.prototxt",
Size(227, 227), "prob",
target == DNN_TARGET_OPENCL ? "dnn/halide_scheduler_opencl_alexnet.yml" :
(target == DNN_TARGET_CPU ? CV_TEST_TAG_MEMORY_512MB : CV_TEST_TAG_MEMORY_1GB),
CV_TEST_TAG_DEBUG_LONG
);
- if (backend == DNN_BACKEND_HALIDE) // Realization contains wrong number of Images (1) for realizing pipeline with 2 outputs
- applyTestTag(CV_TEST_TAG_DNN_SKIP_HALIDE);
processNet("dnn/ResNet-50-model.caffemodel", "dnn/ResNet-50-deploy.prototxt",
Size(224, 224), "prob",
TEST_P(DNNTestNetwork, SqueezeNet_v1_1)
{
- if (backend == DNN_BACKEND_HALIDE) // Realization contains wrong number of Images (1) for realizing pipeline with 2 outputs
- applyTestTag(CV_TEST_TAG_DNN_SKIP_HALIDE);
-
processNet("dnn/squeezenet_v1.1.caffemodel", "dnn/squeezenet_v1.1.prototxt",
Size(227, 227), "prob",
target == DNN_TARGET_OPENCL ? "dnn/halide_scheduler_opencl_squeezenet_v1_1.yml" :
TEST_P(DNNTestNetwork, GoogLeNet)
{
applyTestTag(target == DNN_TARGET_CPU ? "" : CV_TEST_TAG_MEMORY_512MB);
- if (backend == DNN_BACKEND_HALIDE) // Realization contains wrong number of Images (1) for realizing pipeline with 2 outputs
- applyTestTag(CV_TEST_TAG_DNN_SKIP_HALIDE);
processNet("dnn/bvlc_googlenet.caffemodel", "dnn/bvlc_googlenet.prototxt",
Size(224, 224), "prob");
TEST_P(DNNTestNetwork, Inception_5h)
{
applyTestTag(CV_TEST_TAG_MEMORY_512MB);
- if (backend == DNN_BACKEND_HALIDE) // Realization contains wrong number of Images (1) for realizing pipeline with 2 outputs
- applyTestTag(CV_TEST_TAG_DNN_SKIP_HALIDE);
double l1 = default_l1, lInf = default_lInf;
if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && (target == DNN_TARGET_CPU || target == DNN_TARGET_OPENCL))
TEST_P(DNNTestNetwork, ENet)
{
applyTestTag(target == DNN_TARGET_CPU ? "" : CV_TEST_TAG_MEMORY_512MB);
- if (backend == DNN_BACKEND_HALIDE) // Realization contains wrong number of Images (1) for realizing pipeline with 2 outputs
- applyTestTag(CV_TEST_TAG_DNN_SKIP_HALIDE);
if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);