HELP

From
Ianos Gnatiuc (2:469/303.55)
To
Viktor Karev
Date
2002-10-04T22:09:23Z
Area
RU.ALGORITHMS
Hello Viktor!

03 Oct 02 12:10, you wrote to me:

 >> тем не менее, компилятор никогда не сможет сделать критическую зону
 >> лучше чем человек. как правило, там где скорость криточно, пишут на
 >> асме, а не всю програму.

 VK> Насчет "никогда" у меня есть сомнения.

компиляторы, как правило, отстают от новых процессоров.

 VK> Посмотри, как оптимизирующий транслятор преобразует сложные
 VK> арифметические выражения.
 VK> Он учитывает такие тонкости, что некоторые операции можно
 VK> переставить без ущерба для результата, а такая перестановка даст
 VK> выигрыш либо по скорости выполнения, либо по размеру кода. Причем
 VK> такая перестановка может быть разной на разных процессорах.
 VK> И оптимизация в трансляторах строится именно в расчете на
 VK> преобразование таких выражений.

а вот и пример токова:

inline DWORD irand()
{
    iholdrand *= 214013;
    iholdrand += 2531011;
    return iholdrand;
}
...
DWORD w = irand();
...

...
    mov     eax, iholdrand
    lea     ecx, [eax+eax*2]
    lea     edx, [eax+ecx*4]
    shl     edx, 4
    add     edx, eax
    shl     edx, 8
    sub     edx, eax
    lea     eax, [eax+edx*4+2531011]
    mov     iholdrand, eax
    mov     w, eax
...
    красота :)

кстати, кто может объяснить, почему rand не повторяется пока не пройдет через все возможные 32 битные значения?


 VK> Сомневаюсь, что человеку удастся за приемлимое время написать на
 VK> asm функцию дифференцирования символьного выражения, причем в
 VK> нескольких вариантах: для 486, для пентиума, с оптимизацией по
 VK> памяти и с оптимизацией по времени.

в этом я частично согласен.

 >> для примера, посмотри как деляется простая функция как memmove(...)

 VK> А что memmove? Конечно, логичнее написать библиотечную функцию на
 VK> asm, чем писать оптимизатор, который будет делать такой же код.
 VK> Это забота авторов транслятора, что вставить в оптимизатор, а что
 VK> - в библиотечную функцию.

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

 VK> А я уже работаю с результатом. В частности, использую тот же
 VK> memmove, но на ЯВУ.

на javа не пишут быстрых програм.

Ianos

... [WinAmp is not installed]  EMAIL: ssianky[at][hotmail | yahoo].com
--- GoldED+/W32 1.1.4.7
 * Origin: SS Ianky - (373-2) 534966 (2:469/303.55)