Зацените курсак

Discussion in 'WASM.HEAP' started by Sonic, May 6, 2006.

  1. _DEN_

    _DEN_ DEN

    Blog Posts:
    0
    Joined:
    Oct 8, 2003
    Messages:
    5,383
    Location:
    Йобастан
    TermoSINteZ



    Перечитай трид еще разик. Не я первым перешел на личности.



    Ms Rem

    r90



    Неужели вы думаете что для меня важно мнение таких некомпетентных, никчемных, несостоявшихся комплексующих "специалистов" как вы? :))) Можете считать меня кем угодно. Только не лопните :))



    Все, более мне эта ветка не интересна и постить сюда я не собираюсь. Счастливо оставаться.
     
  2. Ms Rem

    Ms Rem New Member

    Blog Posts:
    0
    Joined:
    Apr 17, 2005
    Messages:
    1,057
    Location:
    С планеты "Земля"




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

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

    leo Active Member

    Blog Posts:
    0
    Joined:
    Aug 4, 2004
    Messages:
    2,542
    Location:
    Russia
    Мда, видать тема топика не столь актуальна, как извечные бодания на тему X vs Y ;))

    Придется внести свою ложку флейма...



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



    Самоуничижение в вопросах оптимизации мне вовсе не понятно - берешь мануалы от Intel и AMD (читать, то надеюсь не только разработчики камней, да компилеров умеют ;)) - знакомишься\изучаешь, проверяешь\пробуешь, набираешься опыта, затем начинаешь проверять "на вшивость" критические куски кода, сгенерированные компилером. Если устраивает - прекрасно, честь и хвала "десяткам разработчиков", если нет - пишешь свою реализацию на асме, не потому, что ты такой "крутой", а просто потому, что в данном конкретном случае компилер мягко говоря выдал не лучший вариант и не важно по какой причине



    Думается за примерами далеко ходить не нужно - r90 уже упомянул FPU. Для примера можно посмотреть реализацию суммы или лучше суммы квадратов массива вещ.чисел. Думаю Борманов не назовешь глупыми ребятами, и в дельфийском math.pas есть оптимизированные на асме варианты Sum и SumsAndSquares, но вот оптимизировать подобным образом реализацию цикла компилер отказывается. Не уверен, но думаю что и MS, и Intel предпочитают не связываться с "глубокой" оптимизацией FPU и просто предлагают использовать типовые функции. Желающие могут проверить во что превратят вычисление суммы квадратов эти супер-компилеры (кто не поленится - просьба дать знать)

    Могу сразу заметить, что если сумма будет копиться в операнде памяти (как это делают осторожные борманы), то это будет в несколько раз хуже (на P4 до 5 раз), а если в одном регистре FPU, то до двух раз хуже, чем асм-реализация с параллельным накоплением двух сумм по четным и нечетным индексам



    PS: Возможно здесь не совсем к месту упоминать о "супероптимизаторе" Раймонде (фамилию не выговоришь), написавшем чудо-либу fpulib для masm32. Но ведь многие любители встроенных масмовских макросов и либ могут рассуждать как _DEN_ - куда нам до великих оптимизаторов, потративших десятки лет и т.д. и т.п. :))))
     
  4. Quantum

    Quantum Паладин дзена

    Blog Posts:
    0
    Joined:
    Jan 6, 2003
    Messages:
    3,143
    Location:
    Ukraine
    Ms Rem



    Потому что импорт может перестроить линкер, AFAIK.



    bogrus

    Так как можно байты сэкономить на вызовах API? Недавно заметил, что в импорте можно опускать таблицы lookup и загрузчик такую ситуацию допускает (проверял только в XP). Экономия в байтах пропорциональна количеству импортируемых символов x4. Это оно?



    leo

    Тут нечнго проверять. Даже cl.exe не умеет оптимизировать FPU. Обилие инструкций fxch тому подтверждение.
     
  5. r90

    r90 New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2005
    Messages:
    898


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

    А оценивать твоё поведение --- это не моя забота, если ты сам не можешь этого сделать, то обратись к специалисту.
     
  6. Ms Rem

    Ms Rem New Member

    Blog Posts:
    0
    Joined:
    Apr 17, 2005
    Messages:
    1,057
    Location:
    С планеты "Земля"


    Я экономил именно помещая адрес одного из импортов и вызывая другие апи по смещению. К счастью, я пишу на фасме, а у него нет линкера, и порядок импортов будет такой, как я задам.
     
  7. Quantum

    Quantum Паладин дзена

    Blog Posts:
    0
    Joined:
    Jan 6, 2003
    Messages:
    3,143
    Location:
    Ukraine
    Ms Rem



    Аналогично. Иначе бы не получилось убрать лукапы, хотя, кроме фасма, такое ещё можно в насме делать.
     
  8. leo

    leo Active Member

    Blog Posts:
    0
    Joined:
    Aug 4, 2004
    Messages:
    2,542
    Location:
    Russia
    Quantum

    Инструкция fxch - не самое лучшее подтверждение, т.к. в пентиумах это "фиктивная" инструкция - никакого реального обмена не происходит - только переименование регистров (латентность = 0). А вот у AMD - все по честному, 2 тика
     
  9. bogrus

    bogrus Active Member

    Blog Posts:
    0
    Joined:
    Oct 24, 2003
    Messages:
    1,338
    Location:
    ukraine
    да, в основном это оптимизация адресации, т.е. обращение к [регистр (+-) 127 байт] занимает 3 байта, а [регистр (+-) > 127 байт] займет 6 байт, а т.к. обычная программа довольно много и часто манипулирует с одними и теми же (рядом находящимися) переменными, то правильный выбор "базы" к этим 256 байтам - в целом дает существенный прирост



    Вот, к примеру, излюбленный С'ями способ заполнения структуры
    Code (Text):
    1. 00401000 <M>/$  8985 38FFFFFF            MOV     DWORD PTR [EBP-C8],EAX
    2. 00401006    |.  C785 34FFFFFF 01000000   MOV     DWORD PTR [EBP-CC],1
    3. 00401010    |.  898D 30FFFFFF            MOV     DWORD PTR [EBP-D0],ECX
    4. 00401016    |.  C785 2CFFFFFF 14000000   MOV     DWORD PTR [EBP-D4],14
    5. 00401020    |.  8995 28FFFFFF            MOV     DWORD PTR [EBP-D8],EDX
    6. 00401026    |.  C785 24FFFFFF 04000000   MOV     DWORD PTR [EBP-DC],4
    7. 00401030    |.  89B5 20FFFFFF            MOV     DWORD PTR [EBP-E0],ESI
    8. 00401036    |.  C785 1CFFFFFF 80000000   MOV     DWORD PTR [EBP-E4],80
    В нем 8 аналогичных участков по 3 байта (FFFFFF) - итого 24



    А вот аналогичный код с подобранной базой
    Code (Text):
    1. 00401000 <M>/$  8D6D 9C                  LEA     EBP,DWORD PTR [EBP-64]
    2. 00401003    |.  8945 9C                  MOV     DWORD PTR [EBP-64],EAX
    3. 00401006    |.  C745 98 01000000         MOV     DWORD PTR [EBP-68],1
    4. 0040100D    |.  894D 94                  MOV     DWORD PTR [EBP-6C],ECX
    5. 00401010    |.  C745 90 14000000         MOV     DWORD PTR [EBP-70],14
    6. 00401017    |.  8955 8C                  MOV     DWORD PTR [EBP-74],EDX
    7. 0040101A    |.  C745 88 04000000         MOV     DWORD PTR [EBP-78],4
    8. 00401021    |.  8975 84                  MOV     DWORD PTR [EBP-7C],ESI
    9. 00401024    |.  C745 80 80000000         MOV     DWORD PTR [EBP-80],80
    10. 0040102B    |.  8D6D 64                  LEA     EBP,DWORD PTR [EBP+64]
    Т.е. 24 убрали, а 6 добавили - 18 прирост, а откройте любую системную библиотеку, вот только начало обычной ф-ции:
    Code (Text):
    1. 7C838736 ReplaceFileW $  68 EC030000              PUSH    3EC
    2. 7C83873B              .  68 4089837C              PUSH    7C838940
    3. 7C838740              .  E8 869DFCFF              CALL    __SEH_prolog
    4. 7C838745              .  A1 CC36887C              MOV     EAX,DWORD PTR [___security_cookie]
    5. 7C83874A              .  8945 E4                  MOV     DWORD PTR [EBP-1C],EAX
    6. 7C83874D              .  8B7D 08                  MOV     EDI,DWORD PTR [EBP+8]
    7. 7C838750              .  89BD B8FCFFFF            MOV     DWORD PTR [EBP-348],EDI
    8. 7C838756              .  8B45 0C                  MOV     EAX,DWORD PTR [EBP+C]
    9. 7C838759              .  8985 E0FCFFFF            MOV     DWORD PTR [EBP-320],EAX
    10. 7C83875F              .  8B45 10                  MOV     EAX,DWORD PTR [EBP+10]
    11. 7C838762              .  8985 C0FCFFFF            MOV     DWORD PTR [EBP-340],EAX
    12. 7C838768              .  83C8 FF                  OR      EAX,FFFFFFFF
    13. 7C83876B              .  8985 F0FCFFFF            MOV     DWORD PTR [EBP-310],EAX
    14. 7C838771              .  8985 90FDFFFF            MOV     DWORD PTR [EBP-270],EAX
    15. 7C838777              .  8985 98FDFFFF            MOV     DWORD PTR [EBP-268],EAX
    16. 7C83877D              .  8985 8CFDFFFF            MOV     DWORD PTR [EBP-274],EAX
    17. 7C838783              .  8985 40FDFFFF            MOV     DWORD PTR [EBP-2C0],EAX
    18. 7C838789              .  33DB                     XOR     EBX,EBX
    19. 7C83878B              .  899D 4CFCFFFF            MOV     DWORD PTR [EBP-3B4],EBX
    20. 7C838791              .  899D 48FCFFFF            MOV     DWORD PTR [EBP-3B8],EBX
    21. 7C838797              .  899D 54FCFFFF            MOV     DWORD PTR [EBP-3AC],EBX
    22. 7C83879D              .  899D 44FDFFFF            MOV     DWORD PTR [EBP-2BC],EBX
    23. 7C8387A3              .  899D 48FDFFFF            MOV     DWORD PTR [EBP-2B8],EBX
    24. 7C8387A9              .  C785 30FCFFFF 01000000   MOV     DWORD PTR [EBP-3D0],1
    25. 7C8387B3              .  899D 38FCFFFF            MOV     DWORD PTR [EBP-3C8],EBX
    26. 7C8387B9              .  899D C8FCFFFF            MOV     DWORD PTR [EBP-338],EBX
    27. 7C8387BF              .  899D D4FCFFFF            MOV     DWORD PTR [EBP-32C],EBX
    28. 7C8387C5              .  899D 40FCFFFF            MOV     DWORD PTR [EBP-3C0],EBX
    29. 7C8387CB              .  899D 50FCFFFF            MOV     DWORD PTR [EBP-3B0],EBX
    30. 7C8387D1              .  899D ECFCFFFF            MOV     DWORD PTR [EBP-314],EBX
    31. 7C8387D7              .  899D C4FCFFFF            MOV     DWORD PTR [EBP-33C],EBX
    32. 7C8387DD              .  899D 34FCFFFF            MOV     DWORD PTR [EBP-3CC],EBX
    Т.ч. 2 раза - это реальные цифры! даже не обязательно делать всё руками, досточно грамотно написать специальную утилиту, по скорости 4 раза - это был результат (на васме) от оптимизации обычной виндовой strcat (хотя здесь уже прийдется больше делать ручками)
     
  10. Sonic

    Sonic New Member

    Blog Posts:
    0
    Joined:
    Jul 29, 2004
    Messages:
    77
    Location:
    Днепропетровск
    Блин вы вобще видели название темы ? Для приличия каждый бы мог и затестить - помочь найти ошибки и т.д.
     
  11. The Svin

    The Svin New Member

    Blog Posts:
    0
    Joined:
    Jul 6, 2003
    Messages:
    665
    Location:
    Russia


    :)

    Прошу прощения.

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

    Чего я не вбивал в верхнее окошко - в нижнем ничего так и не появилось.
     
  12. rmn

    rmn Well-Known Member

    Blog Posts:
    0
    Joined:
    Nov 23, 2004
    Messages:
    2,347
    2The Svin



    Так в комплекте идет файлик test.txt. Почитав его, понимаешь куда че вбить :)
     
  13. Sonic

    Sonic New Member

    Blog Posts:
    0
    Joined:
    Jul 29, 2004
    Messages:
    77
    Location:
    Днепропетровск
    Для вывода рез-та в нижнем окошке перед переменной или выр-ем ставте знак "?", потом наж-те кнопочко и если нет ош. или чего не заглючило получите в нижнем окошечке рез-тат. Все выражения должны заканчиваться точкой с запятой (;). (Сам виноват надо было пояснения сразу написать)
     
  14. TermoSINteZ

    TermoSINteZ Синоби даоса Staff Member

    Blog Posts:
    2
    Joined:
    Jun 11, 2004
    Messages:
    3,568
    Location:
    Russia
    мда... ктож ваш учил интерфейсы графические делать ))) берите пример с Windows ;) или с MAC OS
     
  15. Quantum

    Quantum Паладин дзена

    Blog Posts:
    0
    Joined:
    Jan 6, 2003
    Messages:
    3,143
    Location:
    Ukraine
    leo



    Обилие этих инструкций в коде считаю явным признаком отстутсвия оптимизации, т.к. в 99% случаев можно от них отказаться. Никакого отношения к скорости выполнения этот эмпирически субьективный критерий не имеет. Ещё один признак (вижуал часто так делает):
    Code (Text):
    1. fstp var_1
    2. mov eax,var_1
    3. mov var_2,eax
    Когда можно короче:
    Code (Text):
    1. fst var_1
    2. fstp var_2


    Ещё пример. Когда по какой-то причине нужно просто выкинуть топовый регистр FPU, компилятор спихивает его в стек:
    Code (Text):
    1. push eax
    2. fstp [esp]
    Хотя удобнее делать так:
    Code (Text):
    1. fstp st(0)


    bogrus



    Справедливости ради стоит добавить, что вижуал умеет так оптимизировать с подбором базы. Я именно у него научился этому приемчику.
     
  16. Sonic

    Sonic New Member

    Blog Posts:
    0
    Joined:
    Jul 29, 2004
    Messages:
    77
    Location:
    Днепропетровск
    TermoSINteZ не в этом суть
     
  17. BioMehanik

    BioMehanik New Member

    Blog Posts:
    0
    Joined:
    Apr 30, 2006
    Messages:
    101
    The Svin





    Несогласен.

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

    Один думает-остальные пишут.



    Однако когда база знаний различная, более того, различнен характер участников, эффективность группы возростает МНОГОКРАТНО.

    Об этом свидетельствуют различные хак-группы, и кряк-группы, деятельность которых во многом эффективнее и MS и прочих фирм.



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







    Отнюдь.

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

    "экзаменаторы".

    Так что... Ну ты не во всем прав..



    _DEN_

    Поддерживаю всех, ты - пустозвон.

    Все-таки среди тех людей, где я общаюсь, да и на этом форуме в том числе, о человеке судят не по тому, что он говорит о себе и о других,

    прочей мелочи а ПО РЕЗУЛЬТАТАМ.

    ТВОИХ РЕЗУЛЬТАТОВ Я НЕ ВИЖУ. СЛЫШУ ТОЛЬКО СЛОВА ИЗ ПУСТОТЫ. Да и то... словами это не назовешь-БРЕД ОДИН.
     
  18. BioMehanik

    BioMehanik New Member

    Blog Posts:
    0
    Joined:
    Apr 30, 2006
    Messages:
    101
    Sonic

    Об оптимизации говорить рано.

    Глюки исправляй.

    Ошибка при работе со знаками. Аналогичные ошибки при работе с дробями.



    Вот смотри:

    ?12+x=7;

    ?x

    Ответ

    х=19



    Аналогично, если "+" заменить на "/"
     
  19. Quantum

    Quantum Паладин дзена

    Blog Posts:
    0
    Joined:
    Jan 6, 2003
    Messages:
    3,143
    Location:
    Ukraine
    BioMehanik



    Достаточно пройти все 10 уровней Mod-X. Правда, условия стартового контракта не слишком шикарные. А ещё они периодически спонсируют олимпиады по программированию в различных ВУЗах по всей планете и трудоустраивают победителей. Короче, тот кто сильно хочет работать в Редмонде, вполне может туда попасть.
     
  20. BioMehanik

    BioMehanik New Member

    Blog Posts:
    0
    Joined:
    Apr 30, 2006
    Messages:
    101
    Quantum

    Здорово... А можешь поподробнее... Ссылки там, или еще что-нить...