本文整理汇总了C++中Func::define_extern方法的典型用法代码示例。如果您正苦于以下问题:C++ Func::define_extern方法的具体用法?C++ Func::define_extern怎么用?C++ Func::define_extern使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Func
的用法示例。
在下文中一共展示了Func::define_extern方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main(int argc, char **argv) {
Func source;
source.define_extern("make_data",
std::vector<ExternFuncArgument>(),
Float(32), 2);
Func sink;
Var x, y;
sink(x, y) = source(x, y) - sin(x + y);
Var xi, yi;
sink.tile(x, y, xi, yi, 32, 32);
// Compute the source per tile of sink
source.compute_at(sink, x);
Image<float> output = sink.realize(100, 100);
// Should be all zeroes.
RDom r(output);
float error = evaluate_may_gpu<float>(sum(abs(output(r.x, r.y))));
if (error != 0) {
printf("Something went wrong\n");
return -1;
}
Func multi;
std::vector<Type> types;
types.push_back(Float(32));
types.push_back(Float(32));
multi.define_extern("make_data_multi",
std::vector<ExternFuncArgument>(),
types, 2);
Func sink_multi;
sink_multi(x, y) = multi(x, y)[0] - sin(x + y) +
multi(x, y)[1] - cos(x + y);
sink_multi.tile(x, y, xi, yi, 32, 32);
// Compute the source per tile of sink
multi.compute_at(sink_multi, x);
Image<float> output_multi = sink_multi.realize(100, 100);
// Should be all zeroes.
float error_multi = evaluate<float>(sum(abs(output_multi(r.x, r.y))));
if (error_multi != 0) {
printf("Something went wrong in multi case\n");
return -1;
}
printf("Success!\n");
return 0;
}
示例2: main
int main(int argc, char **argv) {
Func source;
source.define_extern("make_data",
std::vector<ExternFuncArgument>(),
Float(32), 2);
Func sink;
Var x, y;
sink(x, y) = source(x, y) - sin(x + y);
Var xi, yi;
sink.tile(x, y, xi, yi, 32, 32);
// Compute the source per tile of sink
source.compute_at(sink, x);
Image<float> output = sink.realize(100, 100);
// Should be all zeroes.
RDom r(output);
float error = evaluate<float>(sum(abs(output(r.x, r.y))));
if (error != 0) {
printf("Something went wrong\n");
return -1;
}
printf("Success!\n");
return 0;
}
示例3: main
int main(int argc, char **argv) {
// Define a pipeline that dumps some squares to a file using an
// external consumer stage.
Func source;
Var x;
source(x) = x*x;
Param<int> min, extent;
Param<const char *> filename;
Func sink;
std::vector<ExternFuncArgument> args;
args.push_back(source);
args.push_back(filename);
args.push_back(min);
args.push_back(extent);
sink.define_extern("dump_to_file", args, Int(32), 0);
source.compute_root();
sink.compile_jit();
// Dump the first 10 squares to a file
filename.set("halide_test_extern_consumer.txt");
min.set(0);
extent.set(10);
sink.realize();
if (!check_result())
return -1;
// Test ImageParam ExternFuncArgument via passed in image.
Image<int32_t> buf = source.realize(10);
ImageParam passed_in(Int(32), 1);
passed_in.set(buf);
Func sink2;
std::vector<ExternFuncArgument> args2;
args2.push_back(passed_in);
args2.push_back(filename);
args2.push_back(min);
args2.push_back(extent);
sink2.define_extern("dump_to_file", args2, Int(32), 0);
sink2.realize();
if (!check_result())
return -1;
printf("Success!\n");
return 0;
}
示例4: main
int main(int argc, char **argv) {
std::vector<ExternFuncArgument> args;
args.push_back(user_context_value());
Func f;
f.define_extern("extern_error", args, Float(32), 1);
f.set_error_handler(&my_halide_error);
f.realize(100);
if (!error_occurred || !extern_error_called) {
printf("There was supposed to be an error\n");
return -1;
}
printf("Success!\n");
return 0;
}