Как использовать Eigen, библиотеку шаблонов C ++ для линейной алгебры?

У меня есть алгоритм обработки изображений, состоящий из матриц, у меня есть собственные коды операций с матрицами (умножение, обратное ...). Но я использую процессор ARM Cortex-A8 с сопроцессором NEON для векторизации, поскольку матричные операции - идеальные случаи для операций SIMD, я попросил компилятор (-mfpu = neon -mfloat-abi = softfp) сгенерировать NEON. инструкции для моего кода, но компилятор не может этого сделать, и затем я также попытался написать свой собственный внутренний код NEON для операций Matrix, но мне было очень трудно это сделать.

Итак, я подумал об использовании библиотеки Eigen, которая обещает векторизацию матричных операций. Поэтому я сразу загрузил библиотеку Eigen C ++ и попытался использовать ее, как указано в их руководствах, но, к сожалению, я получаю ошибки компиляции, когда запускаю их примеры программ.

Любой, кто имеет опыт использования Eigen, какие-нибудь примеры будут действительно полезны? Пожалуйста, помогите мне, как это сделать.

Помощь!

Спасибо


У меня есть папка Eigen по адресу: / home / ubuntu / Documents / eigen. Я установил этот путь в дополнительных каталогах моего проекта Eclipse на C ++. Затем я запускаю следующую программу (Пример) -

#include <Eigen/Core>

// import most common Eigen types
USING_PART_OF_NAMESPACE_EIGEN

int main(int, char *[])
{
  Matrix3f m3;
  m3 << 1, 2, 3, 4, 5, 6, 7, 8, 9;
  Matrix4f m4 = Matrix4f::Identity();
  Vector4i v4(1, 2, 3, 4);

  std::cout << "m3\n" << m3 << "\nm4:\n"
    << m4 << "\nv4:\n" << v4 << std::endl;
}

Я получаю ошибки -

Сборка конфигурации Debug для проекта Test_Eigen ****

сделать все

Строительный файл: ../main.cpp

Вызов: компилятор Sourcery G ++ C ++

arm-none-linux-gnueabi-g ++ -I / home / ubuntu / Documents / eigen -O0 -g3 -Wall -c -fmessage-length = 0 -fcommon -MMD -MP -MF "main.d" -MT "main .d "-mcpu = cortex-a8 -marm -o" main.o "

"../main.cpp"

../main.cpp:6: error: ожидаемый конструктор, деструктор или преобразование типа перед int make: *** [main.o] Ошибка 1


person HaggarTheHorrible    schedule 15.07.2010    source источник
comment
Мы не сможем вам помочь, если вы не опубликуете конкретные ошибки, которые вы получаете.   -  person Thomas    schedule 15.07.2010
comment
Какие бывают ошибки компиляции?   -  person Cogwheel    schedule 15.07.2010
comment
Вы проверяли поддержку и зависимость компилятора по вашей ссылке?   -  person Praveen S    schedule 15.07.2010
comment
Извините, ребята, я только что отредактировал вопрос, пожалуйста, посмотрите на него еще раз. Спасибо.   -  person HaggarTheHorrible    schedule 15.07.2010
comment
Почему это помечено как относящееся к C?   -  person nmichaels    schedule 15.07.2010
comment
Натон, приношу свои извинения, исправит.   -  person HaggarTheHorrible    schedule 15.07.2010


Ответы (2)


Макрос USING_PART_OF_NAMESPACE_EIGEN был удален в Eigen 3. Вместо этого просто используйте

using namespace Eigen;

Судя по всему, руководство устарело.

person Thomas    schedule 15.07.2010
comment
Да, Томас, учебник действительно устарел. Теперь все работает хорошо. Спасибо за быстрый ответ, сэкономили много времени. - person HaggarTheHorrible; 15.07.2010

Я использую Ubuntu 17.04, и у меня это работает.
Во-первых:
Я загружаю egien3.3.3 по адресу официальный сайт eigen. Извлечен в каталог с именем eigen, перейдите в него cd.
Во-вторых:
выполните команду ниже по очереди или сделайте их файлом xxx.sh для одновременного запуска.

#!/bin/bash
#eigen3 install
#from: http://eigen.tuxfamily.org/index.php?title=Main_Page
#download the package like eigen-eigen-67e894c6cd8f.tar.gz 

mkdir build
cd build
cmake -DEIGEN_TEST_NO_OPENGL=1 .. 
make 
sudo make install

Наконец:
проведите тест

#include <eigen3/Eigen/Core>
#include <iostream>

// import most common Eigen types
//USING_PART_OF_NAMESPACE_EIGEN
using namespace Eigen;
using namespace std;
int main(int, char *[])
{
  Matrix3f m3;
  m3 << 1, 2, 3, 4, 5, 6, 7, 8, 9;
  Matrix4f m4 = Matrix4f::Identity();
  Vector4i v4(1, 2, 3, 4);

  cout << "m3\n" << m3 << "\nm4:\n"
    << m4 << "\nv4:\n" << v4 << endl;
}

Примечание.
Чтобы найти установленные результаты, см. / Usr / local / include / eigen3 /
Если что-то изменится, см. mytinx

person wangzheqie    schedule 06.06.2017