Скорость+оптимизация

Тема в разделе "WASM.A&O", создана пользователем Sonic, 19 май 2005.

  1. Sonic

    Sonic New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2004
    Сообщения:
    77
    Адрес:
    Днепропетровск
    Как можно оптимизировать прилогаемый код ?

    (возведение числа в произвольную степень)

    Сколько тактов занимает его выполнение на вашей машине ?

    (указать какой проц)

    [​IMG] _2044032175__Math.zip
     
  2. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    3325 такста - Pentium 2.4 HT.

    Отличные сорсы.



    Зачем invoke Sleep,10 мой младенческий разум не понял.

    Если нужно возвадить только в целую степень то лучше то что я уже написал.



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

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine


    Что-то я не понял. Там точно такты?



    1463 на древнем Celeron 700
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    IMHO переполнение счётчика.

    16384 итераций за 1169 тактов (AXP2000+)?



    Упс, сорри, там потом делится на 16384
     
  5. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    3600 - Pentium 2.4B
     
  6. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    IceStudent Да там такты, это нормально, что на древнем камне их меньше (архитектура проще\конвеер короче), такое на многих тестах случается (но не на всяких), вот если бы P6 да нынешнюю частоту ...
     
  7. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Все супер! Где исходники взял, аль сам написал?

    Посмотрел тут, получил, что перед началом цикла у тебя в st(0) содержится величина

    st=[-power*log<sub>2</sub>(1/value)]/[log<sub>2</sub>e]



    Дай- ка я думаю сделаю так:

    st=[power*log<sub>2</sub>(value)]/[log<sub>2</sub>e]



    Это тоже самое выражение (упрощенное). Теперь объясни мне, почему st(0) отличаются друг от друга в двух этих слачаях.
     
  8. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Числа забыл указать.

    Проц. Intel Pentioum Celeron 2.00 GHz

    3500 - в среднем (+-100)

    После перекомпиляции 3100 (+-100) (тоже странно)
     
  9. pas

    pas New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia


    Я совсем глуп видимо, но получается, что при увеличении частоты в 3,... раза итоговая производительность увеличивается в 1,7... раза так, что ли?
     
  10. MoKC0DeR

    MoKC0DeR New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2003
    Сообщения:
    136
    Адрес:
    Russia
    1169 - Athlon 3200 (64)
     
  11. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    pas

    А ты как думал, погоня за частотами бесплатно дается ;)
     
  12. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    pas Именно, если взять вычисления миллиарда таких комбинаций, то P4 выигрывает не на много:
    Код (Text):
    1. ===============================================================
    2. PIII 1.0GHz (Tualatin)
    3. 1000000000 * 1463 / 1000000000 = 1463 секунд / 60 = 24.38 минут
    4. ===============================================================
    5. P4 2.40GHz (Northwood)
    6. 1000000000 * 3325 / 2400000000 = 1385 секунд / 60 = 23.08 минут
    7. ===============================================================
    А Tualatin при частоте этого Northwood вычислил бы все за 10.16 минут. Правда возможно, что при отключеном HT P4 покажет меньше тактов, т.к. результат RDTSC скорее всего включает 2 потока
     
  13. Sonic

    Sonic New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2004
    Сообщения:
    77
    Адрес:
    Днепропетровск
    Отвечаю всем в порядке очереди:

    - NoName:

    invoke Sleep,10 я заметил что при его использовании

    точнее получается определить кол-во тактов

    (результат стабилен) чего так не знаю

    - IceStudent:

    там точно такты! На 500 Селере сегодня получил 1477, на Duron 900 всего 1140

    - dr_dred:

    log2(1/value) используется т.к. вроде при использовании FYL2X -2*sqrt(2)<=ST(0)<=2*sqrt(2)

    - dead_body:

    на Pentium 4 1.6 GHz получилось 3170 (какое ядро не знаю ), хотя на Pentium 1 166 MHz получается 1822

    такта для _Math и 1644 для Math



    Какие тут напрашиваются выводы ?

    Пеньки что деградируют ? AMD the BEST ?

    Хотелось бы услышать замечания в сторону оптимизации.
     
  14. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Чтобы сделать какие-то выводы нужно провести ещё много тестов, например кол-во тактов необходимых на шифрование 10Кб данных алгоритмом RC4 почти одинаково в P3\P4 (около 80000, тест в аттаче)

    [​IMG] 1870005306__rc4test.exe
     
  15. Sonic

    Sonic New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2004
    Сообщения:
    77
    Адрес:
    Днепропетровск
    Вот результат. Прокоментируй (где там что ?)

    Эти 15 чисел - такты ?

    Насколько я понял там нет работы с сопроцессором, а выводы

    хотелось бы сделать именно о его работе.

    И зачем там столько nop в цикле ? Кинь исходник.

    [​IMG] 2044616466__Untitled.gif
     
  16. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    см. аттач.
     
  17. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Хе-хе. Sonic, ты вот смеешься над моим алгоритмом, а не знаешь, почему он работает медленей твоего в два раза. Он как раз в три раза быстрее работает.



    Ты делаешь



    invoke QPower,offset x,offset y,offset x,32



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



    Сделай так:

    .data<ol type=1>...

    z dq ?

    ...</ol>.code

    <ol type=1>...

    invoke QPower,offset x,offset y,offset z,32

    ...

    </ol>и увидишь результат.

    Моя процедурка:

    _QPower proc lpX,lpPower,lpRes<ol type=1>finit

    fld1

    mov eax,lpPower

    fld qword ptr [eax]

    fchs

    fld1

    mov eax,lpX

    fld qword ptr [eax]

    fdivp st(1),st

    fyl2x

    fld st

    frndint

    fsub st(1),st

    fxch st(1)

    f2xm1

    fld1

    fadd

    fscale

    fstp st(1)

    mov eax,lpRes

    fst qword ptr [eax]

    ret</ol>_QPower endp
     
  18. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Sonic
    Это с какого камня? Да такты (15 проходов), нопы для выравнивания (не в цикле, а перед ним), тест твоего math в аттаче тоже

    [​IMG] _251892150__temp.zip
     
  19. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
  20. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    шифрование 10Кб данных алгоритмом RC4 (AXP2000+ @1666MHz)

    ---------------------------

    00404480 / 134 bytes / 15 passes

    ---------------------------

    000000000000000000467734

    000000000000000000138716

    000000000000000000138665

    000000000000000000138657

    000000000000000000138597

    000000000000000000138598

    000000000000000000138671

    000000000000000000138622

    000000000000000000138667

    000000000000000000138686

    000000000000000000138669

    000000000000000000138598

    000000000000000000138609

    000000000000000000138644

    000000000000000000138676

    ---------------------------



    ЗЫ: странно напоминают http://www.wasm.ru/forum/files/2044616466__Untitled.gif



    ЗЫЫ: может ещё что-нибудь сравнить?