【发布时间】:2018-07-07 09:55:59
【问题描述】:
我想通过 GPU 计算点云中每个点的最近邻。 我的数据集如下所示:
<number of points in column>
<number of columns>
x y z
x y z
z y z
... ... ...
有将近 20^6 个点。
我正在使用vector<PointXYZ> Input; 来存储数据
class PointXYZ
{
public:
PointXYZ();
~PointXYZ();
PointXYZ(float X, float Y, float Z) : x(X), y(Y), z(Z) {};
float x;
float y;
float z;
};
在 for 循环中读取数据,它会忽略没有信息的点 (x == 0 && y == 0 && z == 0)。
PointXYZ* NewPoint = new PointXYZ(x, y, z);
Input.push_back(*NewPoint);
这是我的问题:
在将数据发送到 GPU 之前读取数据的最佳输入结构是什么? (当前读数大约需要 120 秒)。
我在 2d 图像中没有正确的点索引(因为我忽略了没有信息的点)。每个点都包含 x,y,z 值。找到 3/6/9 最近邻的最准确但不那么先进的算法是什么?通过 GPU 对这些点进行线性比较(蛮力)是否效率不高?
我正在查看八叉树,但我不确定在没有适当索引的情况下如何划分点云。
【问题讨论】:
-
你可以
reserve(...)你的向量来获取它将包含的元素的最终数量,只分配一次。这将加快速度。此外,如果您想进一步加快速度,请为您的数据集使用二进制数据格式,它会更小 -
你确定20^6分吗?这大约是 6400 万,对吗?
标签: c++ multidimensional-array gpu gpgpu nearest-neighbor