В рамках подготовки к релизу CFW 0.2 проводил провожу переработку CSO. Во время выделения глобального пула сообщений в отдельный файл решил попробовать переписать его на asm`е. Сам по себе пул вроде не сложный, так что по идеи компилятор должен выдавать более-менее приличный код.
Простейший тест в котором каждый поток сначала выделял, а потом освобождал 32768 сообщений показал следующее (кол-во пар выделение+основбождение в млн. в секунду):
1 поток | 2 потока | 3 потока | 4 потока | 5 потоков | 6 потоков | |
Реализация на Pascal | 17.38 | 40.98 | 54.78 | 72.31 | 78.83 | 86.22 |
Реализация на Asm | 20.57 | 47.25 | 75.06 | 91.21 | 106.11 | 109.08 |
Ускорение от перехода на Asm | +18.4% | +15.3% | +37% | +26.1% | +34.6% | +26.5% |
Переход на Asm даёт выигрыш от 15.3% до 37%, т.е. в среднем получает где-то 25%.