вторник, 7 сентября 2010 г.

profiler-driven linker

навеяло тут чтением всяких разных умных книжек
Вот например у нас есть некая прога и мы хотим выжать из нее максимум производительности кисонька, еще капельку. Как известно у современных процессоров есть кэш, код из которого исполняется на порядок быстрее, чем из RAM. Можно было бы собрать профайлером граф вызовов функций, найти в нем самые тесно (по числу вызовов во время тестовых прогонов) связанные подграфы, и подсунуть эту информацию линкеру для генерации окончательной версии программы, чтобы он сложил эти функции рядом. Тогда при исполнении они скорее всего попадут в кэш все сразу, что должно дать некоторый profit в виде довольно ощутимого прироста производительности. Можно кстати аналогичный трюк исполнить и со статическими данными программы.
Более того, поскольку у разных процессоров даже того же Intel размер кэша отличается - линкер мог бы заточить прогу под конкретно наш процессор

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

Update: все украдено придумано до нас - visual studio 2005 умеет делать практически вышеописанные действия под именем profile-guided optimization:
Block Layout. In this optimization, we form the hottest paths through a function, and lay them out such that hot paths are spatially located closer together. This can increase the utilization of the instruction cache and decrease the working set size and number of pages used.

3 комментария:

  1. Ты верно предполагал :)

    Интел умеет давно PGO, IPO, IPO для всей программы (используются трюки с линковокой), MS - относительно недавно (IPO вроде только).

    Прирост бывает (не всегда), но даже в лучших случаях (для icc) ближе к 3-5% (сейчас может иначе).


    http://en.wikipedia.org/wiki/Interprocedural_optimization

    http://software.intel.com/sites/products/documentation/studio/composer/en-us/2009/compiler_c/optaps/common/optaps_ipo_mult.htm

    ОтветитьУдалить
  2. я какбе в курсе что такое IPO и что оно делает. Ты читал невнимательно - я предлагаю делать routines re-ordering не в результате анализа кода в компиляторе, а на основе результатов профилирования

    ОтветитьУдалить
  3. (чего-то ЖЖ лежал и не давал коммент постить)

    PGO как раз profile-guided.

    ОтветитьУдалить