суббота, 10 сентября 2011 г.

Ускоряющий инлайнинг

Компилятор GHC достаточно хорошо оптимизирует, когда код свален в одну кучу в одном модуле. Исполняется быстро, но с таким кодом работать неудобно. Так в одной куче у меня код долго и оставался, пока сегодня не попробовал прагму компилятора INLINE, которая подобна конструкции inline в C++.

Без этой прагмы после разбиения кода на модули, некоторые тесты стали отрабатывать медленнее в 3-4 раза на счетных задачах. Тогда я прогнал один из тестов через профайлер, и затем добавил прагму самой долгоисполняющейся функции. Я с самого начала догадывался, что эта за функции, а профайлер лишь подтвердил мое предположение.

Так вот, чудесная новость состоит в том, что прежняя скорость вернулась, какой она была до разбиения программы на модули. Другими словами, некоторые вещи ускорились в 3-4 раза.