Преобразование из std::vector в ublas::ressed_matrix в ViennaCL

Я собираюсь выполнить некоторые вычисления и передать полученную матрицу Якобиана NxN и правый вектор (n) для усиления убласа и, в конечном итоге, ViennaCL.

При использовании copy() вектор не представлял проблемы, однако матрица оказывается сложной. Любая помощь будет принята с благодарностью

// Global Variables
vector< vector<float> > Jacobian(0, vector<float>(0)); //Jacobian matrix
vector<float> delta_PQ; //rhs

//
// Set up some ublas objects
//
ublas::vector<ScalarType> rhs;
ublas::vector<ScalarType> result;
ublas::compressed_matrix<ScalarType> ublas_matrix;
using namespace boost::numeric;


typedef float ScalarType;

// Resize RHS from main program
resize_vector(rhs2, j_dimension);
ublas_matrix2.resize(j_dimension, j_dimension);

//copy content to GPU vector (recommended initialization)
copy(delta_PQ.begin(), delta_PQ.end(), rhs.begin()); //works
copy(Jacobian.begin(), Jacobian.end(), ublas_matrix); //won't compile

Я перепробовал множество вариантов и посмотрел документацию:

http://ublas.sourceforge.net/refdoc/classboost_1_1numeric_1_1ublas_1_1compressed__matrix.html

Кроме того, пример ViennaCL не работает для меня:

http://viennacl.sourceforge.net/viennacl-examples-sparse-matrix.html

После нескольких часов поиска в Google я решил опубликовать здесь в надежде, что кто-то еще может взломать его, и будет легче найти для следующего человека.

1 ответ

Решение

Чтобы замкнуть цикл, я хотел, чтобы все знали, что я сделал, чтобы решить мою проблему. Отдельное спасибо Карлу Руппу за проект ViennaCL.

В качестве альтернативы, заполните ублас-матрицу напрямую через operator(), т.е.

ublas_matrix(1,1) = value1;
ublas_matrix(7,8) = value2;

и т.д. В зависимости от порядка значений, прямое заполнение ublas_matrix может выполняться медленнее или быстрее, чем копирование. Как правило, vector быстрее всякий раз, когда записи пишутся "случайным образом", тогда как ublas_matrix быстрее, если вы заполняете записи строк и столбцов в последовательном порядке (и, в конце концов, предоставляете количество ненулевых записей в матрицу). конструктор авансом).

Другие вопросы по тегам