Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Boost Basic Linear Algebra - Configuration Options

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Boost Basic Linear Algebra - Configuration Options

NDEBUG

Убедитесь, что вы определили NDEBUGЕдинственный способ, которым uBLAS знает, что вам нужна конфигурация релиза, - это проверить, определили ли вы NDEBUG. Если вы этого не сделаете, это предполагает, что вам нужна конфигурация отладки и добавляет много очень полезной проверки времени выполнения. Но это очень медленно!

BOOST_UBLAS_MOVE_SEMANTICS

The patch and description was provided by Nasos Iliopoulos.

Непосредственным эффектом этого варианта является устранение потребности в ноалиях в типахвекторныйиматричный, при назначении на тот же тип. Этот вариант не оказывает влияния на ограниченные и с типы. Хотя это редкость, не все компиляторы поддерживают удаление копий (что позволяет перемещать семантику), поэтому необходимо выполнить тест, чтобы убедиться, что есть преимущество при включении. Небольшая демонстрация и тест можно найти вtest_move_semantics.cpp

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

Если семантика движения поддерживается вашим компилятором, вы получите такой вывод, как:

matrix<double> --------------------------------------------------------------------
Temporary pointer r: 0x94790c0
Pointer (must be equal to temp. pointer if move semantics are enabled) : 0x94790c0

Примечания:

  • Неудивительно, что матрицы и векторы были переданы VALUE, компилятор заботится и либо движется (если основной код не изменяет объект), либо копирует (если основной код изменяет объект).
  • Возможно, есть некоторое пространство для некоторых улучшений (например, очистка данных перед обменом).
  • Семантика движения не устраняет временности. Они скорее перемещают свое хранилище, поэтому копии не выполняются.
  • MSVC не реализует оптимизацию обратной стоимости в режиме отладки. Так что, если вы создадите отладку с этим компилятором, вы можете получитьдругое поведение, чем сборка релиза.
  • Включение семантики движения осуществляется через #define BOOST_UBLAS_MOVE_SEMANTICS
  • Существует много возможностей для оптимизации при выходе стандарта c++0x, используя ссылки на rvalue. (У меня есть сладкая векторная реализация, использующая это).
  • Если вы включите семантику движения, и ваш компилятор не поддержит их, операция будет проходить мимо ссылки.

Интересные ссылки

BOOST_UBLAS_CHECK_ENABLE

Когда BOOST_UBLAS_CHECK_ENABLE определен, то все проверки индексов и параметров включены. Это включено в режиме отладки и отключено в режиме выпуска.

BOOST_UBLAS_TYPE_CHECK

Когда включена функция BOOST_UBLAS_TYPE_CHECK, включаются все возможные дорогостоящие проверки структуры. Если это нежелательно, используйте#define Boost_UBLAS_TYPE_CHECK 0перед включением любого заголовка uBLAS. Оригинальное название: Boost_UBLAS_TYPE_CHECK_EPSILON Может использоваться для контроля приемлемого допуска, см.Detail/matrix_assign.hppдля реализации деталей этой проверки.

BOOST_UBLAS_USE_LONG_DOUBLE

Включите выражения uBLAS, которые включают контейнеры с длинным двойником "

BOOST_UBLAS_USE_INTERVAL

Включить выражения uBLAS, которые включают контейнеры типов «boost::numeric:::interval».

Configuring uBLAS with Macros

Многие макросы появляются в ublas/config.hpp и в других местах. Надеюсь, в будущем некоторые из них исчезнут. Они делятся на 4 группы:

  • Автоматически устанавливается на основе NDEBUG "boost/numeric/ublas/config.hpp". Делает различие между отладкой (безопасным) и выпуском (быстрым) режимом. Похожие на STLport
    • Режим выпуска(определяется NDEBUG)
      • BOOST_UBLAS_INLINEОпределение зависимых компиляторов для наложения функций управления.
      • BOOST_UBLAS_USE_FAST_SAME
    • Режим отладки
      • Boost_UBLAS_CHECK_ENABLEВключить проверку индексов, итераторов и параметров. Предотвращение выхода из ограниченного доступа и т.д.
      • BOOST_UBLAS_TYPE_CHECKВключить дополнительные проверки результатов выражений с использованием неплотных типов. Выбирает ошибку времени выполнения, такую как присвоение численно несимметричной матрицы symmertic_matrix. Используйте#define Boost_UBLAS_TYPE_CHECK 0для отключения дорогостоящих проверок численного типа.(Примечание: «проверка структуры» была бы гораздо лучшим названием.)
      • BOOST_UBLAS_TYPE_CHECK_EPSILONпо умолчанию: sqrt(epsilon), контролирует, насколько большой может стать разница между ожидаемым результатом и вычисленным результатом. Увеличьте это значение, если вы собираетесь использовать сингулярные или плохо масштабированные матрицы. Пожалуйста, обратитесь кDetail/matrix_assign.hppдля осуществления этих проверок типа.
  • Автоматически устанавливается по принципу «boost/numeric/ublas/config.hpp» на основе компилятора и макроса boost/config.hpp. Увеличивает обходные пути дефицита компилятора, уже поставляемые boost/config.hpp
    • BOOST_UBLAS_NO_NESTED_CLASS_RELATIONОсобенно неприятная проблема с VC7.1 требует, чтобы uBLAS и использование пользователем начинались (это), а не начинались.
    • BOOST_UBLAS_NO_SMART_PROXIESОтключить автоматическое распространение «постоянства» на прокси. Умные прокси автоматически определяют, является ли контейнер, на который они ссылаются, постоянным или нет. Они корректируют определение итераторов и контейнерного доступа, чтобы отразить эту константу.
  • Для использования авторами uBLAS для тестирования методов реализации. Набор в config.hpp
    • Boost_UBLAS_USE_INVARIANT_HOISTING
    • BOOST_UBLAS_USE_INDEXING
    • BOOST_UBLAS_USE_INDEXED_ITERATOR
    • BOOST_UBLAS_NON_CONFORMANT_PROXIESГэппи-контейнеры могут быть несоответствующими, то есть содержать элементы с разными индексами. Назначение между прокси-серверами (например, векторными диапазонами) этих контейнеров затруднено, поскольку LHS может потребоваться вставить новые элементы. Это медленно.
    • BOOST_UBLAS_USE_DUFF_DEVICEПочти бесполезно на всех платформах (см. GCC's -funroll-loops)
  • Варианты пользователей. Может быть предварительно определен пользователем перед включением любых заголовков uBLAS. Они также могут быть автоматически определены для некоторых компиляторов для работы с ошибками компиляции.

Последнее изменение: Wed 16 23:16:45 CEST 2009 Last modified: Wed Sep 16 23:16:45 CEST 2009 [ORIG_END] -->

Статья Boost Basic Linear Algebra - Configuration Options раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 02:28:57/0.0053279399871826/0