Commit ccc805f
authored
Add helpers for compile-time operator properties (#1114)
* Add helpers for compile-time operator properties
For some operators, we would like to extend or alter the default
behavior of the operator without modifying the operator's base API,
such as by adding new arguments or template parameters. Further,
for modifications known at compile time, we would prefer to avoid
increasing the size of the operators by storing additional metadata.
This PR adds helpers to allow the addition of compile-time properties
to operators. As an initial use case, the channelize_poly operator
now supports the following two properties:
- PropAccum: Sets the accumulator type of the operator. This can be
used to perform fp64 accumulation with fp32 inputs.
- PropOutput: Directly set the output type (::value_type) of the
operator. We typically deduce output types from the inputs and the
context. For example, with a simple (a = b).run() usage, the type
of the output a is known in the operator's Exec function. However,
if we consider (a = b + c).run(), then if b is a transform, we will
need to write its intermediate results to a temporary object and the
type of that object will now depend on b's inputs. Using PropOutput,
we can explicitly set the type of b's output, even for intermediates.
Currently, only the channelize_poly operator has been extended to support
properties. An example usage is as follows, from the ChannelizePoly.cu unit
tests:
```
auto chan_poly = channelize_poly(ac32, f32, num_channels, decimation_factor)
.props<PropAccum<double>, PropOutput<cuda::std::complex<double>>>();
```
Alternatively, the properties can be chained:
```
auto chan_poly = channelize_poly(ac32, f32, num_channels, decimation_factor)
.props<PropAccum<double>>()
.props<PropOutput<cuda::std::complex<double>>>();
Above, we modify chan_poly to use fp64 accumulators and to have a double-precision
complex output type. With the single-precision inputs, the output type written
to temporary intermediates would have otherwise been single precision.
Signed-off-by: Thomas Benson <tbenson@nvidia.com>
* Move props support functions to matx::detail
Also fix other issues highlighted in PR feedback
* Address several PR comments
Signed-off-by: Thomas Benson <tbenson@nvidia.com>
* Add count property to prevent duplicate properties
Prevent duplicate properties like PropAccum<float> and
PropAccum<double>. That will now result in a static assertion
failure.
Signed-off-by: Thomas Benson <tbenson@nvidia.com>
* Fix channelize_poly copyright header
Signed-off-by: Thomas Benson <tbenson@nvidia.com>
---------
Signed-off-by: Thomas Benson <tbenson@nvidia.com>1 parent 7def4cc commit ccc805f
File tree
9 files changed
+691
-92
lines changed- docs_input
- api/signalimage/filtering
- include/matx
- core
- kernels
- operators
- transforms
- test
- 00_misc
- 00_transform
9 files changed
+691
-92
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2076 | 2076 | | |
2077 | 2077 | | |
2078 | 2078 | | |
2079 | | - | |
| 2079 | + | |
2080 | 2080 | | |
2081 | 2081 | | |
2082 | 2082 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
0 commit comments