涉及到雷达等传感器,测试数据拷贝的速度,assign速度更快
#include <vector>
#include <sys/time.h>
struct timespec start;
struct timespec end;
#include "fmt/format.h"
unsigned long nano_second(timespec &s, timespec &e) {
unsigned long begin_tag = s.tv_sec * 1000000000 + s.tv_nsec;
unsigned long end_tag = e.tv_sec * 1000000000 + e.tv_nsec;
return end_tag - begin_tag;
}
#define B_LEN 50000
#define LOOP_NUM 10
int main() {
int a[2][11]{0};
for (int i = 0; i < sizeof(a[0]) / sizeof(int); ++i) {
a[1][i] = i;
}
int b[B_LEN] = {1, 2, 3};
memcpy(&a[1][5], b + 1, 2 * sizeof(int));
for (auto const &item: a[1]) {
fmt::print("{}\n", item);
}
long double assign_avg_time, memcpy_avg_time, for_avg_time;
for (int j = 0; j < LOOP_NUM; ++j) {
std::vector<int> c(B_LEN);
clock_gettime(CLOCK_REALTIME, &start);
c.assign(&b[0], &b[B_LEN]);
clock_gettime(CLOCK_REALTIME, &end);
auto tmp = nano_second(start, end);
assign_avg_time += tmp;
fmt::print("assign time: {} {} ns\n", j, tmp); // 98293
std::vector<int> d;
d.reserve(B_LEN); // 两行代码等效于:std::vector<int> c(B_LEN);
clock_gettime(CLOCK_REALTIME, &start);
memcpy(&d[0], b, B_LEN * sizeof(int));
clock_gettime(CLOCK_REALTIME, &end);
tmp = nano_second(start, end);
memcpy_avg_time += tmp;
fmt::print("memcpy time: {} {} ns\n", j, tmp); // 8024
std::vector<int> e{B_LEN};
clock_gettime(CLOCK_REALTIME, &start);
for (int &i: b) {
e.emplace_back(i);
}
clock_gettime(CLOCK_REALTIME, &end);
tmp = nano_second(start, end);
for_avg_time += tmp;
fmt::print("for time: {} {} ns\n\n", j, tmp); // 1915929
}
assign_avg_time /= LOOP_NUM;
memcpy_avg_time /= LOOP_NUM;
for_avg_time /= LOOP_NUM;
fmt::print("assign_avg_time: {} ns\n", assign_avg_time);
fmt::print("memcpy_avg_time: {} ns\n", memcpy_avg_time);
fmt::print("for_avg_time: {} ns\n", for_avg_time);
}
/data/workspace/workspace-clion/lidar/cmake-build-debug/tests/copy_data
0
1
2
3
4
2
3
7
8
9
10
assign time: 0 9356 ns
memcpy time: 0 97893 ns
for time: 0 2031911 ns
assign time: 1 7900 ns
memcpy time: 1 93468 ns
for time: 1 2029773 ns
assign time: 2 7781 ns
memcpy time: 2 92690 ns
for time: 2 2045980 ns
assign time: 3 8018 ns
memcpy time: 3 95904 ns
for time: 3 2151308 ns
assign time: 4 8082 ns
memcpy time: 4 125195 ns
for time: 4 2163068 ns
assign time: 5 9174 ns
memcpy time: 5 96702 ns
for time: 5 2108752 ns
assign time: 6 10269 ns
memcpy time: 6 97703 ns
for time: 6 2189939 ns
assign time: 7 12198 ns
memcpy time: 7 107263 ns
for time: 7 2211773 ns
assign time: 8 11036 ns
memcpy time: 8 101798 ns
for time: 8 2169116 ns
assign time: 9 10225 ns
memcpy time: 9 100704 ns
for time: 9 2181267 ns
assign_avg_time: 9403.9 ns
memcpy_avg_time: 100932 ns
for_avg_time: 2128288.7 ns
进程已结束,退出代码0