c++ - boost::numeric::ublas::vector 内部数据存储指针

标签 c++ boost cuda c++11 ublas

我正在使用 boost::numeric::ublas::vector<double> (http://www.boost.org/doc/libs/1_41_0/libs/numeric/ublas/doc/vector.htm)。

如何获得指向 double 的内部数据指针? 我需要内部指针,因为我想将 vector 复制到 CUDA (i.e. using cudaMemcpy) .或者是否有任何优雅的方式来复制我的 boost vector/矩阵?

我知道我可以做类似的事情:

boost::numeric::ublas::vector<double> vector;
double* ptr = &vector[0];

但是有没有更优雅的方式呢?

最佳答案

我认为如果您使用 unbounded_array 作为存储模型来实例化您的 vector:

vector<double, unbounded_array<double,n_elements>> vector;

然后你可以这样做:

cudaMemcpy(device_dest, 
           vector.data().begin(), 
           vector.data().size(), 
           cudaMemcpyHostToDevice);

这是有效的,因为 unbounded_array 迭代器是一个标准的 C++ 指针,指向被存储的类型。

关于c++ - boost::numeric::ublas::vector 内部数据存储指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9059774/

相关文章:

c++ - Microsoft C/C++ 优化编译器编译成什么

c++ - 将boost_chrono_FOUND设置为FALSE,因此 “boost_chrono”软件包被视为未找到

c++ - 如何封装一个线程?

c++ - Cuda 推力字符串或字符排序

sorting - 使用 CUDA Thrust 同时对多个数组进行排序

c++ - 检测整数类型变量的空白输入?

c++ - 如何在类中声明结构?

c++ - *** 没有规则使目标 'class.cpp' 需要 `build/....x86/class.o` 停止。 Ubuntu 中的错误

c++ - boost + 自制软件 + macOS Sierra

c++ - cuda 内核未针对所有 blockIdx 执行