2010-07-15 10 views
4

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

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

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

Помощь!

Благодаря


У меня есть папка Эйгена по адресу: /дома/Ubuntu/Documents/собственного я установил этот путь в 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; 
} 

Ошибки, которые я получаю -

билд конфигурации отладки для проекта 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: ошибка: ожидается, конструктор, деструктор или преобразование типов до того 'межд' марки: *** [main.o] Ошибка 1

+0

Мы не можем вам помочь, если вы не публикуете материалы которые вы получаете. – Thomas

+1

Каковы ошибки компиляции? – Cogwheel

+0

Удалили ли вы поддержку компилятора и зависимость от вашей ссылки? –

ответ

10

USING_PART_OF_NAMESPACE_EIGEN макрос removed в Эйгене 3. Вместо этого просто используйте

using namespace Eigen; 

По-видимому, учебник устарел.

+0

Да, Томас учебник действительно устарел. Теперь он работает хорошо. Спасибо за ваш быстрый ответ, сэкономили много времени. – HaggarTheHorrible

1

Я использую Ubuntu 17.04, и это работа для меня
Первое:
I скачать egien3.3.3 на eigen official site. Извлечен в каталог с именем 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/местные/включить/eigen3/
Если какая-либо вещь изменение, см. mytinx