Ошибка использования Ceres вместе с библиотекой с помощью sse / avx

У меня есть шаблонная библиотека, в которой некоторые функции специализируются для типов с плавающей запятой и двойных типов. Эта специализация использует sse / avx, следовательно, эта библиотека имеет -march=native -mavx2 флаги компилятора. Когда я пытаюсь использовать какую-то функцию (которая не является специализированной) этой библиотеки, я получаю следующую ошибку времени выполнения от Ceres:

test_ceres: /usr/include/eigen3/Eigen/src/Core/DenseStorage.h:128: Eigen::internal::plain_array<double, 4, 0, 32>::plain_array() [T = double, Size = 4, MatrixOrArrayOptions = 0, Alignment = 32]: Assertion `(internal::UIntPtr(array) & (31)) == 0 && "this assertion is explained here: " "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" " **** READ THIS WEB PAGE !!! ****"' failed.

Мне удалось воспроизвести ошибку с гораздо более простым кодом: Вот. По сути, этот пример работает, когда -mavx2 -march=native флаги удаляются и не работают (выдает предыдущую ошибку), когда они присутствуют (комментарий и раскомментирование из CmakeLists.txt). В этом примере нет функций, использующих avx / sse, но помните, что в моей библиотеке они есть, поэтому убираем флаги -mavx2 -march=native это не вариант. Есть идеи, что делать, чтобы решить эту проблему? Когда я скомпилировал Ceres, я добавил флаг -DCMAKE_CXX_FLAGS="-march=native" как указано в документация.

Чтение веб-страница в сообщении об ошибке не предоставил никакого решения.

Немного полезной информации о моей системе:

  • компилятор: clang ++
    • версия clang 6.0.0-1ubuntu2 (tags / RELEASE_600 / final)
    • Цель: x86_64-pc-linux-gnu
    • Модель потока: posix
  • Версия Ceres: 2.0 (на самом деле у меня есть git-репо, и я обновил его несколько минут назад:)
  • Процессор: процессор Intel® Core ™ TM i7-4770 с тактовой частотой 3,40 ГГц

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector