Kemet » 04.08.2011 08:30:17
Сходная проблема. Не так давно у нас, на смену уходящему поколению, пришли новые программеры. Ну и была поставлена перед ними задача переработать имеющийся код с учетом того, что грядет смена железа. Раньше все железо заказное было, а теперь, видимо, самое обычное, но современное и дешевое. Сам код был на сто раз перепахан, каждая строка выстрадана за годы работы, каждый модуль вручную оптимизирован. Но свежий взгляд всегда необходим, как глоток свежего воздуха. Через 3 месяца передают мне тестовую версию, компилирую, запускаю - в принципе не плохо, ужали размер процентов на 17, производительность возросла на 5-6%, а для нас это критично. Ну, думаю, сейчас еще подшаманим, сравним результаты с контрольной версией и на испытания. Есно всё это делалось на рабочей системе. Ставлю на компы из последней поставки и вижу, что неожиданно производительность просела более чем в 2 раза, по отношению к контрольной версии. Думаю, что за нах, на древней тестовой машине тоже самое выполняется быстрее. Открываю исходники и вижу - всё, что раньше было в виде вложенных процедур и дублировалось в разных модулях и даже в некоторых наследниках объектов, было вынесено наружу, сделано обычными методами, часть переписана на асме. Естественно размер уменьшился, а вот с производительностью лажа получилась. На старых заказных компах размер кэша больше и всё работает так, как и хотелось, а на новых происходит постоянная перезагрузка кэша, отсюда и пробуксовка. Так что вернули вложенные, инлайнить стали избирательно, отлаживая каждый модуль отдельно под конкретное железо.