lardon3d/tests/benchmark_track_builder.cpp

43 lines
1.6 KiB
C++

#include <chrono>
#include <cstdio>
#include <sys/resource.h>
#include <vector>
extern "C" {
#include <lardon3d/track_builder.h>
}
static Lardon3DTrackBuilderObservation make_observation(uint64_t id) {
Lardon3DTrackBuilderObservation value{};
value.feature_set_id = id + 1;
value.image_id = id + 1;
value.extractor_version = 1;
value.descriptor_type = 1;
value.descriptor_dimension = 32;
std::snprintf(value.extractor_kind, sizeof(value.extractor_kind), "orb");
return value;
}
int main() {
for (size_t edge_count : {10000U, 100000U, 1000000U}) {
std::vector<Lardon3DTrackBuilderObservation> observations;
std::vector<Lardon3DTrackBuilderEdge> edges;
observations.reserve(edge_count + 1);
edges.reserve(edge_count);
for (size_t i = 0; i <= edge_count; ++i)
observations.push_back(make_observation(i));
for (size_t i = 1; i <= edge_count; ++i)
edges.push_back({&observations[i - 1], &observations[i]});
Lardon3DTrackBuilderResultSet result{};
auto start = std::chrono::steady_clock::now();
auto status = lardon3d_track_builder_build(
observations.data(), observations.size(), edges.data(), edges.size(), &result);
auto elapsed = std::chrono::duration<double>(std::chrono::steady_clock::now() - start);
struct rusage usage{};
(void)getrusage(RUSAGE_SELF, &usage);
std::printf("edges=%zu status=%d seconds=%.3f rss_kib=%ld observations=%zu tracks=%zu\n",
edge_count, status, elapsed.count(), usage.ru_maxrss,
observations.size(), result.track_count);
lardon3d_track_builder_result_free(&result);
}
}