LINUX.ORG.RU

uBlas - медленно


0

0

Реализовал алгоритм (вектора,матрицы...) на uBlas'e и STL.uBlas cли л по скорости больше чем в 2 раза. NDBUG определил. Обоих компилил с -О3. Можно ли uBlas еще как-то разогнать ? А то вещь в принципе для ЛА удобная, но и скорость важна.


Ответ на: комментарий от drZlo

Кроме NDBUG был там еще один завлекательный ни хрена не документированный макрос, сейчас попробую вспомнить, или завтра на работе в Вики посмотрю, и отпишусь. Разгоняет uBlas до второй космической.

SLiDER
()

В STL'е уже есть умножения матрицы на вектор?

Reset ★★★★★
()
Ответ на: комментарий от drZlo

А вот собственно и он :) -> BOOST_UBLAS_CHECK_ENABLE. Редкая гадина, включает всякое непотребство типа BOOST_UBLAS_CHECK_FALSE(e) , BOOST_UBLAS_CHECK(expression, e), BOOST_UBLAS_CHECK_EX(expression, file, line, e). Без него сильно быстрее будет. Но отрубать его имеет смысл только в релизе, когда уже все отлажено :)

SLiDER
()

Посмотрел и не осознал чем оно лучше double * . Пока будешь втыкать в описание этой мути быстрее сам напишешь все эти алгоритмы и гораздо эффективней.

Reset ★★★★★
()
Ответ на: комментарий от Reset

Тож так думаю, если uBlas разогнать не удастся, то придется.

drZlo
() автор топика
Ответ на: комментарий от jtootf

Я так полагаю - uBlas. "double *" - наклепать массивов и гонять указатели, ну и, если оформить все ӕто культурно, то наверное, так лучше всего будет )

drZlo
() автор топика
Ответ на: комментарий от drZlo

В смысле как ??? Как-то так -> #define BOOST_UBLAS_CHECK_ENABLE 0

А вообще я бы рекомендовал отрубить еще кой какие проверки, так сказать для полной радости.

#ifdef NDEBUG

#ifndef BOOST_UBLAS_INLINE

#define BOOST_UBLAS_INLINE inline

#endif

// Do not check sizes!

#define BOOST_UBLAS_USE_FAST_SAME

// NO runtime error checks with BOOST_UBLAS_CHECK macro

#ifndef BOOST_UBLAS_CHECK_ENABLE

#define BOOST_UBLAS_CHECK_ENABLE 0

#endif

// NO type compatibility numeric checks

#ifndef BOOST_UBLAS_TYPE_CHECK

#define BOOST_UBLAS_TYPE_CHECK 0

#endif

#endif

С форматированием беда, но я думаю должно быть все понятно.

SLiDER
()
Ответ на: комментарий от drZlo

Мдин, Вы издеваетесь, надо мной что ли, я же вполне конкретный код написал, как что отключить, зачем boost-овские исходники править, что у вас там не работате, можно подробнее ???

SLiDER
()
Ответ на: комментарий от SLiDER

Кстати, про ногу: достаточно просто у себя определить NDEBUG или BOOST_UBLAS_NDEBUG, чтоб отрубить отладку, что я давно и сделал и получил прирост производительности (без ӕтого вообще тормоза были). Потом спросил, что еще можно сделать (_кроме ӕтого_), а ты мне привел код из конфига, который вообще здесь не нужен, т.к. делает тож самое что и NDEBUG. Так что читай, пожалуйста, внимательно посты на которые отвечаеш ;)

drZlo
() автор топика
Ответ на: комментарий от drZlo

Ни NDEBUG ни BOOST_UBLAS_NDEBUG, ни в коем разе не отрубают те макросы о которых я писал, и вы на каждый чих в своей программе получаете проверки выхода за пределы массивов и т.п. Ну хозяин - барин, как говорится, не хотите не отклюайте, Ваше дело.

SLiDER
()

Если удалось просто всё реализовать на STL, да и работает быстрее, так и мучится не надо.

anonymous
()
Ответ на: комментарий от SLiDER

Мляяяя, нк когда ж начнем читать доки ? А ?

Frequently Asked Questions
Q: I'm running the uBLAS dense vector and matrix benchmarks. Why do I see a significant performance difference between the native C and library implementations?
A: uBLAS distinguishes debug mode (size and type conformance checks enabled, expression templates disabled) and release mode (size and type conformance checks disabled, expression templates enabled). Please check, if the preprocessor symbol NDEBUG of cassert is defined. NDEBUG enables release mode, which in turn uses expression templates. You can optionally define BOOST_UBLAS_NDEBUG to disable all bounds, structure and similar checks of uBLAS.

Ну и на закусь:

// Enable performance options in RELEASE mode
#if defined (NDEBUG) || defined (BOOST_UBLAS_NDEBUG)

#ifndef BOOST_UBLAS_INLINE
#define BOOST_UBLAS_INLINE inline
#endif

// Do not check sizes!
#define BOOST_UBLAS_USE_FAST_SAME

// NO runtime error checks with BOOST_UBLAS_CHECK macro
#ifndef BOOST_UBLAS_CHECK_ENABLE
#define BOOST_UBLAS_CHECK_ENABLE 0
#endif

// NO type compatibility numeric checks
#ifndef BOOST_UBLAS_TYPE_CHECK
#define BOOST_UBLAS_TYPE_CHECK 0
#endif


// Disable performance options in DEBUG mode
#else
....

drZlo
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.