Есть ли способ ускорить десериализацию построенную на 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
Использовать другую библиотеку увы не вариант, по той причине что нужна будет обратная совместимость архивов.
Спасибо.