Я собираюсь провести некоторые вычисления и передать полученную матрицу Якобиана 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 я решил опубликовать здесь в надежде, что кто-то еще может взломать его, и будет легче найти для следующего человека.
Чтобы замкнуть цикл, я хотел, чтобы все знали, что я сделал, чтобы решить мою проблему. Отдельное спасибо Карлу Руппу за проект ViennaCL.
В качестве альтернативы, заполните ублас-матрицу напрямую через operator (), т.е.
ublas_matrix(1,1) = value1;
ublas_matrix(7,8) = value2;
и т.д. В зависимости от порядка значений, прямое заполнение ublas_matrix может выполняться медленнее или быстрее, чем копирование. Как правило, вектор< map> быстрее всякий раз, когда записи пишутся «случайным образом», тогда как ublas_matrix быстрее, если вы заполняете записи строк и столбцов в последовательном порядке (и, в конечном счете, предоставляете количество ненулевых записей в конструктор матрицы заранее).
Других решений пока нет …