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

Я хочу сделать некоторые вычисления и передать результирующую матрицу Якобиана NxN и вектор правой стороны (n), чтобы увеличить ublas и, в конечном итоге, 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

// 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
1numeric
// 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
1ublas
// 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
1compressed__matrix.html

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

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

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


person matusi143    schedule 02.09.2013    source источник


Ответы (1)


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

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

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

и т. д. В зависимости от порядка значений непосредственное заполнение ublas_matrix может быть медленнее или быстрее, чем копирование. Как показывает практика, vector‹ map > выполняется быстрее, когда элементы записываются в «случайном» порядке, тогда как ublas_matrix выполняется быстрее, если вы заполняете элементы строк и столбцов в последовательном порядке (и в конечном итоге предоставляете количество ненулевых элементов в матрицу конструктор заранее).

person matusi143    schedule 02.09.2013