avva: (Default)
[personal profile] avva

Все-таки забавно, насколько использование виртуальных методов убивает скорость. Prefetch queue - наше все.

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

Date: 2007-05-17 05:56 am (UTC)
From: [identity profile] fima.livejournal.com
Хм, а если бы это был предсказанный переход, то все равно пришлось бы ждать 200-300 тиков пока новый код найдется в памяти, ну может, на пару тиков меньше из-за конвейера. Так что разница в 5 раз все еще сомнительна.

При этом, если программа "делает относительно мало работы, а вызывается очень много раз", то после первого раза весь нужный код и виртуальные таблицы должны оказаться в кэше и там торчать из-за частого использования, т.е. сильно большего доступа в память для извлечения всего этого быть не должно.

Date: 2007-05-17 06:33 pm (UTC)
From: [identity profile] s1m.livejournal.com
prefetcher это обнаружит и закажет чтение до того, как команда реально начнет исполнятся.

зависит от объема данных и размера кэша, но даже 20-30 циклов задержки на каждый непредсказанный переход к кэше могут достатчно сильно сказаться на производительности.

January 2026

S M T W T F S
    1 2 3
45678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 5th, 2026 10:04 am
Powered by Dreamwidth Studios