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

Function CopyMakeBorder

bench/BenchCopyMakeBorder.cpp:25–86  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 2

GetBorderTypeFunction · 0.85
whatMethod · 0.80

Tested by

no test coverage detected