42 template <
unsigned int DISP_VALS>
43 __device__
inline void MsgStereoHalf(
unsigned int x_val,
unsigned int y_val,
44 const BpLevel<T>& current_bp_level, half messages_neighbor_1[DISP_VALS],
45 half messages_neighbor_2[DISP_VALS], half messages_neighbor_3[DISP_VALS],
46 half data_costs[DISP_VALS], half* dst_message_array, half disc_k_bp,
bool data_aligned)
49 half minimum = beliefprop::kHighValBp<half>;
52 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
53 dst[current_disparity] = messages_neighbor_1[current_disparity] +
54 messages_neighbor_2[current_disparity] +
55 messages_neighbor_3[current_disparity] +
56 data_costs[current_disparity];
57 if (dst[current_disparity] < minimum) {
58 minimum = dst[current_disparity];
63 DtStereo<half, DISP_VALS>(dst);
69 half val_to_normalize = 0;
71 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++)
73 if (minimum < dst[current_disparity]) {
74 dst[current_disparity] = minimum;
76 val_to_normalize += dst[current_disparity];
82 if (__hisnan(val_to_normalize) || ((__hisinf(val_to_normalize)) != 0)) {
88 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
89 dst_message_array[dest_message_array_index] = (half) 0.0;
94 dest_message_array_index++;
100 val_to_normalize /= DISP_VALS;
107 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++)
109 dst[current_disparity] -= val_to_normalize;
110 dst_message_array[dest_message_array_index] = dst[current_disparity];
115 dest_message_array_index++;
123 template <beliefprop::MessageComp M>
124 __device__
inline void MsgStereoHalf(
unsigned int x_val,
unsigned int y_val,
126 half* prev_u_messageArray, half* prev_d_messageArray,
127 half* prev_l_messageArray, half* prev_r_messageArray,
128 half* data_message_array, half* dst_message_array,
129 half disc_k_bp,
bool data_aligned,
unsigned int bp_settings_disp_vals,
130 half* dst_processing,
unsigned int checkerboard_adjustment,
131 unsigned int offset_data)
134 half minimum{beliefprop::kHighValBp<half>};
138 bp_settings_disp_vals);
139 unsigned int proc_array_idx{proc_array_idx_disp_0};
141 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++)
144 beliefprop::SetInitDstProcessing<half, half, M>(x_val, y_val, current_bp_level, prev_u_messageArray, prev_d_messageArray,
145 prev_l_messageArray, prev_r_messageArray, data_message_array, dst_message_array,
146 disc_k_bp, data_aligned, bp_settings_disp_vals, dst_processing, checkerboard_adjustment,
147 offset_data, current_disparity, proc_array_idx);
149 if (dst_processing[proc_array_idx] < minimum)
150 minimum = dst_processing[proc_array_idx];
162 DtStereo<half>(dst_processing, bp_settings_disp_vals, x_val, y_val, current_bp_level);
165 minimum += disc_k_bp;
168 half val_to_normalize{(half)0.0};
170 proc_array_idx = proc_array_idx_disp_0;
171 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
172 if (minimum < dst_processing[proc_array_idx]) {
173 dst_processing[proc_array_idx] = minimum;
176 val_to_normalize += dst_processing[proc_array_idx];
189 if (__hisnan(val_to_normalize) || ((__hisinf(val_to_normalize)) != 0)) {
191 proc_array_idx = proc_array_idx_disp_0;
193 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
194 dst_message_array[proc_array_idx] = (half)0.0;
205 val_to_normalize /= ((half)bp_settings_disp_vals);
208 proc_array_idx = proc_array_idx_disp_0;
210 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
211 dst_processing[proc_array_idx] -= val_to_normalize;
212 dst_message_array[proc_array_idx] = ConvertValToDifferentDataTypeIfNeeded<half, half>(dst_processing[proc_array_idx]);
224 __device__
inline void MsgStereo<half, half, beliefprop::MessageComp::kUMessage>(
225 unsigned int x_val,
unsigned int y_val,
227 half* prev_u_messageArray, half* prev_d_messageArray,
228 half* prev_l_messageArray, half* prev_r_messageArray,
229 half* data_message_array, half* dst_message_array,
230 half disc_k_bp,
bool data_aligned,
unsigned int bp_settings_disp_vals,
231 half* dst_processing,
unsigned int checkerboard_adjustment,
232 unsigned int offset_data)
234 MsgStereoHalf<beliefprop::MessageComp::kUMessage>(x_val, y_val, current_bp_level, prev_u_messageArray, prev_d_messageArray,
235 prev_l_messageArray, prev_r_messageArray, data_message_array, dst_message_array, disc_k_bp, data_aligned, bp_settings_disp_vals,
236 dst_processing, checkerboard_adjustment, offset_data);
240 __device__
inline void MsgStereo<half, half, beliefprop::MessageComp::kDMessage>(
241 unsigned int x_val,
unsigned int y_val,
243 half* prev_u_messageArray, half* prev_d_messageArray,
244 half* prev_l_messageArray, half* prev_r_messageArray,
245 half* data_message_array, half* dst_message_array,
246 half disc_k_bp,
bool data_aligned,
unsigned int bp_settings_disp_vals,
247 half* dst_processing,
unsigned int checkerboard_adjustment,
248 unsigned int offset_data)
250 MsgStereoHalf<beliefprop::MessageComp::kDMessage>(x_val, y_val, current_bp_level, prev_u_messageArray, prev_d_messageArray,
251 prev_l_messageArray, prev_r_messageArray, data_message_array, dst_message_array, disc_k_bp, data_aligned, bp_settings_disp_vals,
252 dst_processing, checkerboard_adjustment, offset_data);
256 __device__
inline void MsgStereo<half, half, beliefprop::MessageComp::kLMessage>(
257 unsigned int x_val,
unsigned int y_val,
259 half* prev_u_messageArray, half* prev_d_messageArray,
260 half* prev_l_messageArray, half* prev_r_messageArray,
261 half* data_message_array, half* dst_message_array,
262 half disc_k_bp,
bool data_aligned,
unsigned int bp_settings_disp_vals,
263 half* dst_processing,
unsigned int checkerboard_adjustment,
264 unsigned int offset_data)
266 MsgStereoHalf<beliefprop::MessageComp::kLMessage>(x_val, y_val, current_bp_level, prev_u_messageArray, prev_d_messageArray,
267 prev_l_messageArray, prev_r_messageArray, data_message_array, dst_message_array, disc_k_bp, data_aligned, bp_settings_disp_vals,
268 dst_processing, checkerboard_adjustment, offset_data);
272 __device__
inline void MsgStereo<half, half, beliefprop::MessageComp::kRMessage>(
273 unsigned int x_val,
unsigned int y_val,
275 half* prev_u_messageArray, half* prev_d_messageArray,
276 half* prev_l_messageArray, half* prev_r_messageArray,
277 half* data_message_array, half* dst_message_array,
278 half disc_k_bp,
bool data_aligned,
unsigned int bp_settings_disp_vals,
279 half* dst_processing,
unsigned int checkerboard_adjustment,
280 unsigned int offset_data)
282 MsgStereoHalf<beliefprop::MessageComp::kRMessage>(x_val, y_val, current_bp_level, prev_u_messageArray, prev_d_messageArray,
283 prev_l_messageArray, prev_r_messageArray, data_message_array, dst_message_array, disc_k_bp, data_aligned, bp_settings_disp_vals,
284 dst_processing, checkerboard_adjustment, offset_data);
289 unsigned int x_val,
unsigned int y_val,
292 half data_costs[
kDispVals0], half* dst_message_array, half disc_k_bp,
bool data_aligned)
294 MsgStereoHalf<kDispVals0>(x_val, y_val, current_bp_level, messages_neighbor_1, messages_neighbor_2, messages_neighbor_3,
295 data_costs, dst_message_array, disc_k_bp, data_aligned);
300 unsigned int x_val,
unsigned int y_val,
303 half data_costs[
kDispVals1], half* dst_message_array, half disc_k_bp,
bool data_aligned)
305 MsgStereoHalf<kDispVals1>(x_val, y_val, current_bp_level, messages_neighbor_1, messages_neighbor_2, messages_neighbor_3,
306 data_costs, dst_message_array, disc_k_bp, data_aligned);
311 unsigned int x_val,
unsigned int y_val,
314 half data_costs[
kDispVals2], half* dst_message_array, half disc_k_bp,
bool data_aligned)
316 MsgStereoHalf<kDispVals2>(x_val, y_val, current_bp_level, messages_neighbor_1, messages_neighbor_2, messages_neighbor_3,
317 data_costs, dst_message_array, disc_k_bp, data_aligned);
322 unsigned int x_val,
unsigned int y_val,
325 half data_costs[
kDispVals3], half* dst_message_array, half disc_k_bp,
bool data_aligned)
327 MsgStereoHalf<kDispVals3>(x_val, y_val, current_bp_level, messages_neighbor_1, messages_neighbor_2, messages_neighbor_3,
328 data_costs, dst_message_array, disc_k_bp, data_aligned);
333 unsigned int x_val,
unsigned int y_val,
336 half data_costs[
kDispVals4], half* dst_message_array, half disc_k_bp,
bool data_aligned)
338 MsgStereoHalf<kDispVals4>(x_val, y_val, current_bp_level, messages_neighbor_1, messages_neighbor_2, messages_neighbor_3,
339 data_costs, dst_message_array, disc_k_bp, data_aligned);
344 unsigned int x_val,
unsigned int y_val,
347 half data_costs[
kDispVals5], half* dst_message_array, half disc_k_bp,
bool data_aligned)
349 MsgStereoHalf<kDispVals5>(x_val, y_val, current_bp_level, messages_neighbor_1, messages_neighbor_2, messages_neighbor_3,
350 data_costs, dst_message_array, disc_k_bp, data_aligned);
355 unsigned int x_val,
unsigned int y_val,
358 half data_costs[
kDispVals6], half* dst_message_array, half disc_k_bp,
bool data_aligned)
360 MsgStereoHalf<kDispVals6>(x_val, y_val, current_bp_level, messages_neighbor_1, messages_neighbor_2, messages_neighbor_3,
361 data_costs, dst_message_array, disc_k_bp, data_aligned);
constexpr unsigned int kDispVals6
__device__ void MsgStereo< half, half, kDispVals2 >(unsigned int x_val, unsigned int y_val, const BpLevel< T > ¤t_bp_level, half messages_neighbor_1[kDispVals2], half messages_neighbor_2[kDispVals2], half messages_neighbor_3[kDispVals2], half data_costs[kDispVals2], half *dst_message_array, half disc_k_bp, bool data_aligned)
__device__ void MsgStereoHalf(unsigned int x_val, unsigned int y_val, const BpLevel< T > ¤t_bp_level, half messages_neighbor_1[DISP_VALS], half messages_neighbor_2[DISP_VALS], half messages_neighbor_3[DISP_VALS], half data_costs[DISP_VALS], half *dst_message_array, half disc_k_bp, bool data_aligned)
__device__ void MsgStereo< half, half, kDispVals4 >(unsigned int x_val, unsigned int y_val, const BpLevel< T > ¤t_bp_level, half messages_neighbor_1[kDispVals4], half messages_neighbor_2[kDispVals4], half messages_neighbor_3[kDispVals4], half data_costs[kDispVals4], half *dst_message_array, half disc_k_bp, bool data_aligned)
__device__ void MsgStereo< half, half, kDispVals6 >(unsigned int x_val, unsigned int y_val, const BpLevel< T > ¤t_bp_level, half messages_neighbor_1[kDispVals6], half messages_neighbor_2[kDispVals6], half messages_neighbor_3[kDispVals6], half data_costs[kDispVals6], half *dst_message_array, half disc_k_bp, bool data_aligned)
constexpr unsigned int kDispVals2
constexpr unsigned int kDispVals0
constexpr unsigned int kDispVals1
__device__ void MsgStereo< half, half, kDispVals5 >(unsigned int x_val, unsigned int y_val, const BpLevel< T > ¤t_bp_level, half messages_neighbor_1[kDispVals5], half messages_neighbor_2[kDispVals5], half messages_neighbor_3[kDispVals5], half data_costs[kDispVals5], half *dst_message_array, half disc_k_bp, bool data_aligned)
constexpr unsigned int kDispVals4
__device__ void MsgStereo< half, half, kDispVals3 >(unsigned int x_val, unsigned int y_val, const BpLevel< T > ¤t_bp_level, half messages_neighbor_1[kDispVals3], half messages_neighbor_2[kDispVals3], half messages_neighbor_3[kDispVals3], half data_costs[kDispVals3], half *dst_message_array, half disc_k_bp, bool data_aligned)
constexpr unsigned int kDispVals3
__device__ void MsgStereo< half, half, kDispVals0 >(unsigned int x_val, unsigned int y_val, const BpLevel< T > ¤t_bp_level, half messages_neighbor_1[kDispVals0], half messages_neighbor_2[kDispVals0], half messages_neighbor_3[kDispVals0], half data_costs[kDispVals0], half *dst_message_array, half disc_k_bp, bool data_aligned)
__device__ void MsgStereo< half, half, kDispVals1 >(unsigned int x_val, unsigned int y_val, const BpLevel< T > ¤t_bp_level, half messages_neighbor_1[kDispVals1], half messages_neighbor_2[kDispVals1], half messages_neighbor_3[kDispVals1], half data_costs[kDispVals1], half *dst_message_array, half disc_k_bp, bool data_aligned)
constexpr unsigned int kDispVals5
Class to store and retrieve properties of a bp processing level including a data type specified as a ...
const beliefprop::BpLevelProperties & LevelProperties() const
Return level properties as const reference to avoid copying and not allow it to be modified.
constexpr bool kOptimizedIndexingSetting
ARCHITECTURE_ADDITION unsigned int RetrieveIndexInDataAndMessage(unsigned int x_val, unsigned int y_val, unsigned int width, unsigned int height, unsigned int current_disparity, unsigned int total_num_disp_vals, unsigned int offset_data=0u)
Retrieve the current 1-D index value of the given point at the given disparity in the data cost and m...
constexpr std::array< BpStereoSet, 8 > kStereoSetsToProcess
Declare stereo sets to process with name, num disparity values, and scale factor currently conesFullS...
unsigned int height_level_
unsigned int padded_width_checkerboard_level_