Skip to content
Snippets Groups Projects
Commit 713b7a94 authored by Nicolas Pope's avatar Nicolas Pope
Browse files

Detect and choose cuda device

parent f170f3d0
No related branches found
No related tags found
1 merge request!58Implements #68 gpu selection
...@@ -81,6 +81,7 @@ class SceneRep : public ftl::Configurable { ...@@ -81,6 +81,7 @@ class SceneRep : public ftl::Configurable {
private: private:
bool _initCUDA();
HashParams _parametersFromConfig(); HashParams _parametersFromConfig();
void _create(const HashParams& params); void _create(const HashParams& params);
void _destroy(); void _destroy();
...@@ -102,6 +103,7 @@ class SceneRep : public ftl::Configurable { ...@@ -102,6 +103,7 @@ class SceneRep : public ftl::Configurable {
std::vector<Cameras> cameras_; std::vector<Cameras> cameras_;
cudaStream_t integ_stream_; cudaStream_t integ_stream_;
bool reg_mode_; bool reg_mode_;
int cuda_device_;
}; };
}; // namespace voxhash }; // namespace voxhash
......
...@@ -5,10 +5,13 @@ ...@@ -5,10 +5,13 @@
#include <opencv2/core/cuda_stream_accessor.hpp> #include <opencv2/core/cuda_stream_accessor.hpp>
#include <vector>
using namespace ftl::voxhash; using namespace ftl::voxhash;
using ftl::rgbd::Source; using ftl::rgbd::Source;
using ftl::Configurable; using ftl::Configurable;
using cv::Mat; using cv::Mat;
using std::vector;
#define SAFE_DELETE_ARRAY(a) { delete [] (a); (a) = NULL; } #define SAFE_DELETE_ARRAY(a) { delete [] (a); (a) = NULL; }
...@@ -23,6 +26,8 @@ extern "C" void integrateDepthMapCUDA(ftl::voxhash::HashData& hashData, const ft ...@@ -23,6 +26,8 @@ extern "C" void integrateDepthMapCUDA(ftl::voxhash::HashData& hashData, const ft
SceneRep::SceneRep(nlohmann::json &config) : Configurable(config), do_reset_(false), m_frameCount(0) { SceneRep::SceneRep(nlohmann::json &config) : Configurable(config), do_reset_(false), m_frameCount(0) {
_initCUDA();
// Allocates voxel structure on GPU // Allocates voxel structure on GPU
_create(_parametersFromConfig()); _create(_parametersFromConfig());
...@@ -62,6 +67,30 @@ SceneRep::~SceneRep() { ...@@ -62,6 +67,30 @@ SceneRep::~SceneRep() {
cudaStreamDestroy(integ_stream_); cudaStreamDestroy(integ_stream_);
} }
bool SceneRep::_initCUDA() {
// Do an initial CUDA check
int cuda_device_count = 0;
cudaSafeCall(cudaGetDeviceCount(&cuda_device_count));
CHECK_GE(cuda_device_count, 1) << "No CUDA devices found";
LOG(INFO) << "CUDA Devices (" << cuda_device_count << "):";
vector<cudaDeviceProp> properties(cuda_device_count);
for (int i=0; i<cuda_device_count; i++) {
cudaSafeCall(cudaGetDeviceProperties(&properties[i], i));
LOG(INFO) << " - " << properties[i].name;
}
int desired_device = value("cudaDevice", 0);
cuda_device_ = (desired_device < cuda_device_count) ? desired_device : cuda_device_count-1;
cudaSafeCall(cudaSetDevice(cuda_device_));
// TODO(Nick) Check memory is sufficient
// TODO(Nick) Find out what our compute capability should be.
return true;
}
void SceneRep::addSource(ftl::rgbd::Source *src) { void SceneRep::addSource(ftl::rgbd::Source *src) {
auto &cam = cameras_.emplace_back(); auto &cam = cameras_.emplace_back();
cam.source = src; cam.source = src;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment