Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка сегментирования в Boost.ASIO signal 1.47 
:(
    Опции темы
phprus
Дата 7.8.2011, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 22.8.2006

Репутация: 1
Всего: 3



Доброго времени суток!

В библиотеке Boost.ASIO 1.47 появились средства для работы с системными сигналами (man 2 signal).
Но при попытке реализовать обработчик сигналов с использованием этой библиотеки я получаю ошибку сегментирования при использовании компилятора Intel Composer XE 12 Update 4 (12.0.4) и флагов оптимизации "-O3 -funroll-loops -fomit-frame-pointer".

Судя по отладчику ошибка возникает в файле boost/asio/detail/signal_handler.hpp:67, это строка:
Код

boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);

Но из-за оптимизации отладчик мало что показывает (например, параметры переданные в do_complete показываются неправильные).

Интересно, что в случае отключения оптимизации (-O0) ошибка уходит, так-же ошибка не наблюдается при использовании gcc 4.1.2, 4.3.4, 4.5.0, 4.6.1(MinGW) и Intel C++ Compiler 11.1.

Если в файле boost/asio/detail/signal_handler.hpp после строки "boost::asio::detail::fenced_block b;" добавить отладочный вывод на экран или sleep(0), то ошибка тоже пропадает.


Подскажите пожалуйста идеи по методам дальнейшей отладки Boost для совместимости с компилятором Intel.

PM MAIL WWW ICQ   Вверх
boostcoder
Дата 7.8.2011, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



а в список рассылки boost написать не пробовал?
PM WWW   Вверх
phprus
Дата 7.8.2011, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 22.8.2006

Репутация: 1
Всего: 3



Знаний английского для свободного общения в списках рассылка не хватает.
Писать/говорить по английски я почти не умею (грубо говоря, так и не научился).

Когда написал пост, возникла мысль проверить во что разворачивается boost::asio::detail::fenced_block.
Код

#elif defined(__GNUC__) \
  && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)) \
  && !defined(__INTEL_COMPILER) && !defined(__ICL) \
  && !defined(__ICC) && !defined(__ECC) && !defined(__PATHSCALE__)
# include <boost/asio/detail/gcc_sync_fenced_block.hpp>
#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
# include <boost/asio/detail/gcc_x86_fenced_block.hpp>
#elif

Так вот, в случае GCC срабатывает gcc_sync_fenced_block, а в __INTEL_COMPILER - gcc_x86_fenced_block, хотя __INTEL_COMPILER >= 1100 поддерживает реализацию, которую использует gcc_sync_fenced_block и при использовании gcc_sync_fenced_block приложение не падает (патч во вложении, багрепорт сочиню чуть позже).

Остается вопрос, для чего в обработчиках используется fenced_block и почему это имеет такие последствия.

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  boost_1_47_0_intel_segfault_in_asio_signal.diff.txt 2,71 Kb
PM MAIL WWW ICQ   Вверх
boostcoder
Дата 7.8.2011, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



этот баг появился только в версии 1.47.0 ?
PM WWW   Вверх
volatile
Дата 7.8.2011, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(phprus @  7.8.2011,  14:59 Найти цитируемый пост)
Интересно, что в случае отключения оптимизации (-O0) ошибка уходит

походу это не столько глюк буста, сколько глюк
Цитата(phprus @  7.8.2011,  14:59 Найти цитируемый пост)
Intel Composer XE 12 Update 4 (12.0.4) 


PM MAIL   Вверх
phprus
Дата 7.8.2011, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 22.8.2006

Репутация: 1
Всего: 3



boostcoder
Обработчик системных сигналов в ASIO появился только в 1.47.0, по этому да.
Хотя код в обработчиках операций сокетов аналогичный, но там подобные проблемы не проявляется на всем моем зоопарке компиляторов.

volatile, возможно, но приведенное решение этот баг исправляет или скрывает.
А так как оптимизирует компилятор Intel значительно лучше чем GCC, то приходится поддерживать и его.

Это сообщение отредактировал(а) phprus - 7.8.2011, 20:42
PM MAIL WWW ICQ   Вверх
boostcoder
Дата 7.8.2011, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(phprus @  7.8.2011,  20:30 Найти цитируемый пост)
оптимизирует компилятор Intel значительно лучше чем GCC

правда? smile 
PM WWW   Вверх
phprus
Дата 7.8.2011, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 22.8.2006

Репутация: 1
Всего: 3



Цитата(boostcoder @  8.8.2011,  00:29 Найти цитируемый пост)
правда?

Да. Сталкивался с различием в скорости готового кода примерно до 1,5 раз.
К примеру использовать SSE(SIMD) инструкции в коде числосчитающих алгоритмов у компилятора от Intel получается лучше, чем у GCC. Также субъективно у компилятора от Intel инлайнить код получается лучше, чем у GCC (субъективно, так как не знаю как это можно объективно оценить).
PM MAIL WWW ICQ   Вверх
boostcoder
Дата 7.8.2011, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



phprus, интересно бы посмотреть на сравнительные тесты от какой-то компании. надо погуглить..

зы
зато LTO и Graphite оптимизаторы есть только у GCC. LTO к примеру, повышает скорость работы не в 1.5 раза, а в среднем 9-12 раз smile сам проверял.
можешь проверить по этой методике: http://kemiisto.blogspot.com/2010/09/lto.html
там видно прирост в ~6 раз. я же, на своих собственноручно собранных mingw`ах, на виртуалке, получаю прирост ~9 раз. на реальной машине WinXP - 11.
так что интел отдыхает.. как и микрософт...

Это сообщение отредактировал(а) boostcoder - 7.8.2011, 22:21
PM WWW   Вверх
volatile
Дата 8.8.2011, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



smile 
Цитата(boostcoder @  7.8.2011,  22:20 Найти цитируемый пост)
зато LTO ... оптимизаторы есть только у GCC

LTO (Link-Time Optimization) у студии есть, называется только оно так:
Enable link-time code generation (/GL)

Не поленился, взял код с блога Кемисто, откомпилил на студии
Результат без /GL:
Код

1e+018
1.734
1e+018
13.5


Результат c /GL:
Код

1e+018
1.734
1e+018
1.734


Как видно, LTO повышает скорость работы данного кода в 7.78 раз.
Доведя его до абсолютного равенства 1.734==1.734. Т.е дальше здесь оптимизировать (в этом плане) уже нечего.

Добавлено через 2 минуты и 28 секунд
Цитата(boostcoder @  7.8.2011,  22:20 Найти цитируемый пост)
интересно бы посмотреть на сравнительные тесты от какой-то компании. надо погуглить..

Если что накопаете, скиньте ссылки. Тоже интересно посмотреть.
PM MAIL   Вверх
boostcoder
Дата 8.8.2011, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(volatile @  8.8.2011,  00:08 Найти цитируемый пост)
LTO (Link-Time Optimization) у студии есть, называется только оно так:
Enable link-time code generation (/GL)

не знал.. smile 
вообще, похоже многие не знают. ибо со всеми с кем обсуждал, никто не сказал что в студии тоже есть link-time-optimization.

Добавлено через 9 минут
значит теперь он и у gcc есть smile 
PM WWW   Вверх
phprus
Дата 8.8.2011, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 22.8.2006

Репутация: 1
Всего: 3



Цитата(boostcoder @  8.8.2011,  01:20 Найти цитируемый пост)
зато LTO и Graphite оптимизаторы есть только у GCC. LTO к примеру, повышает скорость работы не в 1.5 раза, а в среднем 9-12 раз smile сам проверял.

У меня RedHat 5 и штатный GCC 4.1.2 для сравнения, еще есть SLES 11, там GCC 4.3.4, что не многим новее и LTO там нет :( 
Хотя и интел на RedHat не самый свежий - 11.1 и 12.0.4 на SUSE.

А для разработки у меня openSUSE c ICC 12.0.4 и GCC 4.5.0, но даже на ней заметен прирост скорости у Intel. Кроме того прирост порядка 1,5 именно на числосчиталках вида весь код в одном cpp. Там LTO применять просто негде.

А вообще мысль интересная, надо еще раз сравнить производительность своего кода, а не только расчетных приложений вдруг что изменилось с последних тестов.
PM MAIL WWW ICQ   Вверх
xvr
Дата 8.8.2011, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(boostcoder @  7.8.2011,  22:20 Найти цитируемый пост)
зато LTO оптимизаторы есть только у GCC.

Гы. У Intel компилятора это называется IPO и есть еще с версии 8.1 (а может и раньше)

Добавлено через 2 минуты и 7 секунд
PS. Функциональность Graphite похоже в Intel компиляторе тоже есть (масса loop оптимизаций, включая автораспараллеливание)

Добавлено через 3 минуты и 35 секунд
PPS. Скорость можно посмотреть на сайте SPEC (SPECCPU)

PM MAIL   Вверх
boostcoder
Дата 8.8.2011, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



сказывается неиспользование msvc и intel smile 
PM WWW   Вверх
phprus
Дата 8.8.2011, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 22.8.2006

Репутация: 1
Всего: 3



Похоже все таки это баг Boost: https://svn.boost.org/trac/boost/ticket/5763
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0553 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.