From 5c894d1731b988a568117a5c8cd7a3260a194763 Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nwpope@utu.fi> Date: Thu, 19 Mar 2020 18:30:15 +0200 Subject: [PATCH] Limit SGM memory usage --- components/operators/include/ftl/operators/disparity.hpp | 2 ++ components/operators/include/ftl/operators/operator.hpp | 2 ++ components/operators/src/operator.cpp | 5 +++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/components/operators/include/ftl/operators/disparity.hpp b/components/operators/include/ftl/operators/disparity.hpp index 54cfa1c88..2f9a807cd 100644 --- a/components/operators/include/ftl/operators/disparity.hpp +++ b/components/operators/include/ftl/operators/disparity.hpp @@ -29,6 +29,8 @@ class FixstarsSGM : public ftl::operators::Operator { ~FixstarsSGM(); inline Operator::Type type() const override { return Operator::Type::OneToOne; } bool apply(ftl::rgbd::Frame &in, ftl::rgbd::Frame &out, cudaStream_t stream) override; + + bool isMemoryHeavy() const override { return true; } private: bool init(); diff --git a/components/operators/include/ftl/operators/operator.hpp b/components/operators/include/ftl/operators/operator.hpp index 8dee5f7b9..399adddd4 100644 --- a/components/operators/include/ftl/operators/operator.hpp +++ b/components/operators/include/ftl/operators/operator.hpp @@ -54,6 +54,8 @@ class Operator { */ virtual void wait(cudaStream_t) {} + virtual bool isMemoryHeavy() const { return false; } + inline ftl::Configurable *config() const { return config_; } private: diff --git a/components/operators/src/operator.cpp b/components/operators/src/operator.cpp index 1f000e9a7..617514afd 100644 --- a/components/operators/src/operator.cpp +++ b/components/operators/src/operator.cpp @@ -59,14 +59,15 @@ bool Graph::apply(FrameSet &in, FrameSet &out, cudaStream_t stream) { //while (i.instances.size() < in.frames.size()) { //i.instances.push_back(i.maker->make()); //} - if (in.frames.size() > 1 && i.instances.size() < 2) { + if (in.frames.size() > 1 && i.instances.size() < 2 && !i.instances[0]->isMemoryHeavy()) { i.instances.push_back(i.maker->make()); } for (size_t j=0; j<in.frames.size(); ++j) { if (!in.hasFrame(j)) continue; - auto *instance = i.instances[j&0x1]; + int iix = (i.instances[0]->isMemoryHeavy()) ? 0 : j&0x1; + auto *instance = i.instances[iix]; if (instance->enabled()) { try { -- GitLab