boost :: numeric :: ublas :: vector внутренний указатель хранения данных - PullRequest
1 голос
/ 30 января 2012

Я использую boost::numeric::ublas::vector<double> (http://www.boost.org/doc/libs/1_41_0/libs/numeric/ublas/doc/vector.htm).

Как я могу получить внутренний указатель данных на double? Мне нужен внутренний указатель, потому что я хочу скопировать вектор в CUDA (i.e. using cudaMemcpy). ИлиЕсть какой-нибудь элегантный способ скопировать мои векторы / матрицы усиления?

Я знаю, что могу сделать что-то вроде:

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

но есть ли более элегантный способ?

1 Ответ

1 голос
/ 30 января 2012

Я думаю, что если вы создадите экземпляр своего вектора, используя unbounded_array в качестве модели хранения:

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

тогда вы можете сделать что-то вроде этого:

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

Это работает, потому что итератор unbounded_array является стандартным C ++ указателем на тип хранимого.

...