MCPcopy Create free account
hub / github.com/CVCUDA/CV-CUDA / BilateralFilter

Function BilateralFilter

bench/BenchBilateralFilter.cpp:25–84  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

23
24template<typename T>
25inline void BilateralFilter(nvbench::state &state, nvbench::type_list<T>)
26try
27{
28 long3 shape = benchutils::GetShape<3>(state.get_string("shape"));
29 long varShape = state.get_int64("varShape");
30 int diameter = static_cast<int>(state.get_int64("diameter"));
31 float sigmaSpace = static_cast<float>(state.get_float64("sigmaSpace"));
32 float sigmaColor = -1.f;
33
34 NVCVBorderType borderType = benchutils::GetBorderType(state.get_string("border"));
35
36 state.add_global_memory_reads(shape.x * shape.y * shape.z * sizeof(T));
37 state.add_global_memory_writes(shape.x * shape.y * shape.z * sizeof(T));
38
39 cvcuda::BilateralFilter op;
40
41 // clang-format off
42
43 if (varShape < 0) // negative var shape means use Tensor
44 {
45 nvcv::Tensor src({{shape.x, shape.y, shape.z, 1}, "NHWC"}, benchutils::GetDataType<T>());
46 nvcv::Tensor dst({{shape.x, shape.y, shape.z, 1}, "NHWC"}, benchutils::GetDataType<T>());
47
48 benchutils::FillTensor<T>(src, benchutils::RandomValues<T>());
49
50 state.exec(nvbench::exec_tag::sync,
51 [&op, &src, &dst, &diameter, &sigmaColor, &sigmaSpace, &borderType](nvbench::launch &launch)
52 {
53 op(launch.get_stream(), src, dst, diameter, sigmaColor, sigmaSpace, borderType);
54 });
55 }
56 else // zero and positive var shape means use ImageBatchVarShape
57 {
58 nvcv::ImageBatchVarShape src(shape.x);
59 nvcv::ImageBatchVarShape dst(shape.x);
60
61 benchutils::FillImageBatch<T>(src, long2{shape.z, shape.y}, long2{varShape, varShape},
62 benchutils::RandomValues<T>());
63 dst.pushBack(src.begin(), src.end());
64
65 nvcv::Tensor diameterTensor({{shape.x}, "N"}, nvcv::TYPE_S32);
66 nvcv::Tensor sigmaSpaceTensor({{shape.x}, "N"}, nvcv::TYPE_F32);
67 nvcv::Tensor sigmaColorTensor({{shape.x}, "N"}, nvcv::TYPE_F32);
68
69 benchutils::FillTensor<int>(diameterTensor, [&diameter](auto &){ return diameter; });
70 benchutils::FillTensor<float>(sigmaSpaceTensor, [&sigmaSpace](auto &){ return sigmaSpace; });
71 benchutils::FillTensor<float>(sigmaColorTensor, [&sigmaColor](auto &){ return sigmaColor; });
72
73 state.exec(nvbench::exec_tag::sync,
74 [&op, &src, &dst, &diameterTensor, &sigmaColorTensor, &sigmaSpaceTensor, &borderType]
75 (nvbench::launch &launch)
76 {
77 op(launch.get_stream(), src, dst, diameterTensor, sigmaColorTensor, sigmaSpaceTensor, borderType);
78 });
79 }
80}
81catch (const std::exception &err)
82{

Callers

nothing calls this directly

Calls 5

GetBorderTypeFunction · 0.85
whatMethod · 0.80
pushBackMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected