Skip to content

Commit 61960bf

Browse files
committed
refactor: use std::vector and std::array instread of *ptr
Signed-off-by: ktro2828 <kotaro.uetake@tier4.jp>
1 parent fc9db66 commit 61960bf

File tree

3 files changed

+34
-29
lines changed

3 files changed

+34
-29
lines changed

perception/tensorrt_mtr/include/tensorrt_mtr/trajectory.hpp

+19-17
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#define TENSORRT_MTR__TRAJECTORY_HPP_
1717

1818
#include <algorithm>
19+
#include <array>
1920
#include <cstddef>
2021
#include <vector>
2122

@@ -29,14 +30,14 @@ constexpr size_t PredictedStateDim = 7;
2930
*/
3031
struct PredictedState
3132
{
32-
explicit PredictedState(const float * state)
33-
: x_(state[0]),
34-
y_(state[1]),
35-
dx_(state[2]),
36-
dy_(state[3]),
37-
yaw_(state[4]),
38-
vx_(state[5]),
39-
vy_(state[6])
33+
explicit PredictedState(const std::array<float, PredictedStateDim> & state)
34+
: x_(state.at(0)),
35+
y_(state.at(1)),
36+
dx_(state.at(2)),
37+
dy_(state.at(3)),
38+
yaw_(state.at(4)),
39+
vx_(state.at(5)),
40+
vy_(state.at(6))
4041
{
4142
}
4243

@@ -80,13 +81,14 @@ struct PredictedState
8081
*/
8182
struct PredictedMode
8283
{
83-
PredictedMode(const float score, const float * waypoints, const size_t num_future)
84+
PredictedMode(const float score, const std::vector<float> & waypoints, const size_t num_future)
8485
: score_(score), num_future_(num_future)
8586
{
8687
for (size_t t = 0; t < num_future_; ++t) {
87-
const auto start_ptr = waypoints + t * state_dim();
88-
std::vector<float> state(start_ptr, start_ptr + state_dim());
89-
waypoints_.emplace_back(state.data());
88+
const auto start_itr = waypoints.cbegin() + t * state_dim();
89+
std::array<float, PredictedStateDim> state;
90+
std::copy_n(start_itr, PredictedStateDim, state.begin());
91+
waypoints_.emplace_back(state);
9092
}
9193
}
9294

@@ -124,15 +126,15 @@ struct PredictedTrajectory
124126
* @param num_future The number of predicted timestamps.
125127
*/
126128
PredictedTrajectory(
127-
const float * scores, const float * trajectories, const size_t num_mode,
129+
const std::vector<float> & scores, const std::vector<float> & modes, const size_t num_mode,
128130
const size_t num_future)
129131
: num_mode_(num_mode), num_future_(num_future)
130132
{
131133
for (size_t m = 0; m < num_mode_; ++m) {
132-
const auto score = *(scores + m);
133-
const auto start_ptr = trajectories + m * num_future_ * state_dim();
134-
std::vector<float> waypoints(start_ptr, start_ptr + num_future_ * state_dim());
135-
modes_.emplace_back(score, waypoints.data(), num_future_);
134+
const auto score = scores.at(m);
135+
const auto wp_itr = modes.cbegin() + m * num_future_ * state_dim();
136+
std::vector<float> waypoints(wp_itr, wp_itr + num_future_ * state_dim());
137+
modes_.emplace_back(score, waypoints, num_future_);
136138
}
137139
// sort by score
138140
sort_by_score();

perception/tensorrt_mtr/include/tensorrt_mtr/trt_mtr.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,8 @@ class TrtMTR
187187
// outputs
188188
cuda::unique_ptr<float[]> d_out_score_{nullptr};
189189
cuda::unique_ptr<float[]> d_out_trajectory_{nullptr};
190-
std::unique_ptr<float[]> h_out_score_{nullptr};
191-
std::unique_ptr<float[]> h_out_trajectory_{nullptr};
190+
std::vector<float> h_out_score_;
191+
std::vector<float> h_out_trajectory_;
192192
}; // class TrtMTR
193193
} // namespace trt_mtr
194194
#endif // TENSORRT_MTR__TRT_MTR_HPP_

perception/tensorrt_mtr/src/trt_mtr.cpp

+13-10
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,6 @@ void TrtMTR::initCudaPtr(const AgentData & agent_data, const PolylineData & poly
113113
d_out_trajectory_ =
114114
cuda::make_unique<float[]>(num_target_ * num_mode_ * num_future_ * PredictedStateDim);
115115

116-
h_out_score_ = std::make_unique<float[]>(sizeof(float) * num_target_ * num_mode_);
117-
h_out_trajectory_ = std::make_unique<float[]>(
118-
sizeof(float) * num_target_ * num_mode_ * num_future_ * PredictedStateDim);
119-
120116
if (builder_->isDynamic()) {
121117
// trajectory: (B, N, T, Da)
122118
builder_->setBindingDimensions(
@@ -198,20 +194,27 @@ bool TrtMTR::postProcess(
198194
num_target_, num_mode_, num_future_, agent_data.state_dim(), d_target_state_.get(),
199195
PredictedStateDim, d_out_trajectory_.get(), stream_));
200196

197+
h_out_score_.clear();
198+
h_out_trajectory_.clear();
199+
h_out_score_.reserve(num_target_ * num_mode_);
200+
h_out_trajectory_.reserve(num_target_ * num_mode_ * num_future_ * PredictedStateDim);
201+
201202
CHECK_CUDA_ERROR(cudaMemcpyAsync(
202-
h_out_score_.get(), d_out_score_.get(), sizeof(float) * num_target_ * num_mode_,
203+
h_out_score_.data(), d_out_score_.get(), sizeof(float) * num_target_ * num_mode_,
203204
cudaMemcpyDeviceToHost, stream_));
204205
CHECK_CUDA_ERROR(cudaMemcpyAsync(
205-
h_out_trajectory_.get(), d_out_trajectory_.get(),
206+
h_out_trajectory_.data(), d_out_trajectory_.get(),
206207
sizeof(float) * num_target_ * num_mode_ * num_future_ * PredictedStateDim,
207208
cudaMemcpyDeviceToHost, stream_));
208209

209210
trajectories.reserve(num_target_);
210211
for (auto b = 0; b < num_target_; ++b) {
211-
const auto score_ptr = h_out_score_.get() + b * num_mode_;
212-
const auto trajectory_ptr =
213-
h_out_trajectory_.get() + b * num_mode_ * num_future_ * PredictedStateDim;
214-
trajectories.emplace_back(score_ptr, trajectory_ptr, num_mode_, num_future_);
212+
const auto score_itr = h_out_score_.cbegin() + b * num_mode_;
213+
std::vector<float> scores(score_itr, score_itr + num_mode_);
214+
const auto mode_itr =
215+
h_out_trajectory_.cbegin() + b * num_mode_ * num_future_ * PredictedStateDim;
216+
std::vector<float> modes(mode_itr, mode_itr + num_mode_ * num_future_ * PredictedStateDim);
217+
trajectories.emplace_back(scores, modes, num_mode_, num_future_);
215218
}
216219
return true;
217220
}

0 commit comments

Comments
 (0)