C++ 作为特征向量的浮点数组::Vector3f

C++ 作为特征向量的浮点数组::Vector3f,c++,cuda,eigen,C++,Cuda,Eigen,我正在GPU上写一个Eigen,我想使用Eigen。我有一个浮点数*表示已知大小n的数据三元组,例如xyz、rgb等。我想将它们用作特征向量,但仅限于不进行内存复制,因为我在设备上,例如: const float* input=... Eigen::Vector3f* inputAsFloat = ???? 您可以使用在数据阵列上创建视图: float* raw_data = ....; Eigen::Map<Vector3f> vector_map(raw_data, raw_d

我正在GPU上写一个Eigen,我想使用Eigen。我有一个浮点数*表示已知大小n的数据三元组,例如xyz、rgb等。我想将它们用作特征向量,但仅限于不进行内存复制,因为我在设备上,例如:

const float* input=...
Eigen::Vector3f* inputAsFloat = ????
您可以使用在数据阵列上创建视图:

float* raw_data = ....;
Eigen::Map<Vector3f> vector_map(raw_data, raw_data_size);
您可以使用多种选项:

第一个模板参数是您正在模拟的特征数据类型 第二个模板参数是行/列主参数 第三个模板参数是跨距选项,即元素和行/列在内存中的间距,例如每行的额外填充
不完全确定它与GPU和/或CUDA的交互效果如何。

我的偏好,尽管前面的答案可能也正确:

创建到原始数组的映射,然后迭代固定大小的段。“n”大概是3的倍数

float* input;
int n;

Eigen::Map<VectorXf> vector_map(input,n);
   for(int i = 0; i < n/3; i++)
   {
   const Vector3f& eigen_3f = vector_map.segment<3>(3*i);
   //do things with eigen_3f
   }

您不必创建对“vector_map.segment3*i”的引用,但我认为它说明了该点。

将点输入到3个浮点数组中?还是n浮动?请提供一段时间,我对Eigen了解不多,我知道的足够多,认为您可能不应该有指向Vector3f的指针。相反,您应该使用数组来初始化Vector3f对象。Eigen::Map在CUDA内核中是完全合法的。