Как ускорить boost::serialization ?
От: nen777w  
Дата: 30.11.15 22:27
Оценка:
Есть ли способ ускорить десериализацию построенную на subj?

По сути при десериализации есть много мелких операций (~400) десериализации значений типа unsigned int.
Хотя если брать суммарный объем данных (размер файла) из которых выполняется десериализация то он в среднем не больше 2kb.
И таких файлов не так и много около 30-ти штук.
И что самое неприятное, проблема проявляется только под Mac OS X, под Windows скорость работы вполне нормальная.

Что было уже сделано:
1) Переделка на memory_device, т.е. файл предварительно весь файл читается в буффер, на буфер натравляется memory_device + boost::iostreams и вся десериализация происходит над данными в памяти.
По показателям производительности (замерялось в debug):
Windows: ~14s
Mac OSX: ~86s

2) Пралельная десериализация. Т.е. запускается boost::thread::hardware_concurrency() * 2 -потоков и в каждом происходит десериализация.
Тут по показателям производительности вообще странные результаты (замерялось в debug):
Windows: ~4s
Mac OSX: ~105s

Т.е. под OSX она стала еще больше а под Windows еще меньше (как и ожидалось).

Приложение под OSX собирается clang-ом c ключами: -std=c++11 -O2 -msse2 -ffp-contract=fast

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