1 #ifndef CURFIL_RANDOM_TREE_IMAGE_GPU_H
2 #define CURFIL_RANDOM_TREE_IMAGE_GPU_H
4 #include <cuda_runtime_api.h>
8 #include <vector_types.h>
12 #include "random_tree_image.h"
16 static const int colorChannels = 3;
17 static const int depthChannels = 2;
19 static const int depthChannel = 0;
20 static const int depthValidChannel = 1;
22 static const unsigned int NODES_PER_TREE_LAYER = 2048;
23 static const unsigned int LAYERS_PER_TREE = 16;
87 static const size_t offsetLeftNode = 0;
88 static const size_t offsetTypes = 4;
89 static const size_t offsetFeatures = offsetTypes + 4;
90 static const size_t offsetChannels = offsetFeatures + 8;
91 static const size_t offsetThreshold = offsetChannels + 4;
92 static const size_t offsetHistograms = offsetThreshold + 4;
101 void setValue(
size_t node,
size_t offset,
const T& value);
103 void setLeftNodeOffset(
size_t node,
int offset);
104 void setThreshold(
size_t node,
float threshold);
105 void setHistogramValue(
size_t node,
size_t label,
float value);
106 void setType(
size_t node, int8_t value);
107 void setOffset1X(
size_t node, int8_t value);
108 void setOffset1Y(
size_t node, int8_t value);
109 void setRegion1X(
size_t node, int8_t value);
110 void setRegion1Y(
size_t node, int8_t value);
111 void setOffset2X(
size_t node, int8_t value);
112 void setOffset2Y(
size_t node, int8_t value);
113 void setRegion2X(
size_t node, int8_t value);
114 void setRegion2Y(
size_t node, int8_t value);
115 void setChannel1(
size_t node, uint16_t value);
116 void setChannel2(
size_t node, uint16_t value);
161 return totalTransferTimeMicroseconds;
171 cacheSize(0), elementIdMap(), elementTimes(), currentTime(0), bound(false), totalTransferTimeMicroseconds(0) {
191 virtual void bind() = 0;
192 virtual void unbind() = 0;
207 void copyElements(
size_t cacheSize,
const std::set<const void*>& elements);
212 virtual void transferElement(
size_t pos,
const void* element, cudaStream_t stream) = 0;
215 virtual std::string
getElementName(
const void* element)
const = 0;
221 std::map<const void*, size_t> elementIdMap;
222 std::map<size_t, size_t> elementTimes;
229 size_t totalTransferTimeMicroseconds;
248 void copyImages(
size_t imageCacheSize,
const std::set<const RGBDImage*>& images);
253 void copyImages(
size_t imageCacheSize,
const std::vector<const PixelInstance*>& samples);
267 virtual void transferElement(
size_t pos,
const void* element, cudaStream_t stream);
276 cudaArray* colorTextureData;
277 cudaArray* depthTextureData;
301 void copyTrees(
size_t cacheSize,
const std::set<const TreeNodes*>& trees);
309 virtual void transferElement(
size_t elementPos,
const void* element, cudaStream_t stream);
324 cudaArray* treeTextureData;
355 TreeNodeData getTreeNode(
const int nodeNr,
const boost::shared_ptr<const TreeNodes>& treeData);
361 boost::shared_ptr<const TreeNodes> convertTree(
const boost::shared_ptr<const RandomTreeImage>& randomTreeImage);
381 LabelType numLabels,
const boost::shared_ptr<const TreeNodes>& treeData,
bool useDepthImages =
true);
385 void clearImageCache();