TermoSINteZ Перечитай трид еще разик. Не я первым перешел на личности. Ms Rem r90 Неужели вы думаете что для меня важно мнение таких некомпетентных, никчемных, несостоявшихся комплексующих "специалистов" как вы? )) Можете считать меня кем угодно. Только не лопните ) Все, более мне эта ветка не интересна и постить сюда я не собираюсь. Счастливо оставаться.
Поздарвляю, ты здесь один компитентный, состоявшийся и не комплексующий специалист, мнение которого неприрекаемо (а все кто с ним не согласны, сразу же обьявляются дураками). Свою компитентность в этих вопросах, ты несомненно доказал с помощью трындежа и пустого гона. Про таких людей говорят - "не отвечает за базар". Конечно, тут ты можешь делать это сколько угодно, но не советую тебе так же поступать в реальной жизни, так как там за это могут и голову свернуть. Пустозвонов нигде не любят.
Мда, видать тема топика не столь актуальна, как извечные бодания на тему X vs Y ) Придется внести свою ложку флейма... Соб-но, я хотел сказать примерно то же, что и r90 - универсальный компилятор может обеспечивать оптимизацию в некотором аморфном "среднем". Предусмотреть все просто невозможно, а многое - нецелесообразно из соображений сложности, стоимости, затрат памяти, времени компиляции и т.п. Поэтому видимо в соревновании компилеров наблюдается такая же картина, что и в соревновании камней - у одних одно "получше", другое "похуже", у других наоборот - кто как понимает "среднее" и насколько успешно навязывает это понимание средним юзверям, умалчивая о недостатках и выпячивая достоинства Самоуничижение в вопросах оптимизации мне вовсе не понятно - берешь мануалы от Intel и AMD (читать, то надеюсь не только разработчики камней, да компилеров умеют ) - знакомишься\изучаешь, проверяешь\пробуешь, набираешься опыта, затем начинаешь проверять "на вшивость" критические куски кода, сгенерированные компилером. Если устраивает - прекрасно, честь и хвала "десяткам разработчиков", если нет - пишешь свою реализацию на асме, не потому, что ты такой "крутой", а просто потому, что в данном конкретном случае компилер мягко говоря выдал не лучший вариант и не важно по какой причине Думается за примерами далеко ходить не нужно - r90 уже упомянул FPU. Для примера можно посмотреть реализацию суммы или лучше суммы квадратов массива вещ.чисел. Думаю Борманов не назовешь глупыми ребятами, и в дельфийском math.pas есть оптимизированные на асме варианты Sum и SumsAndSquares, но вот оптимизировать подобным образом реализацию цикла компилер отказывается. Не уверен, но думаю что и MS, и Intel предпочитают не связываться с "глубокой" оптимизацией FPU и просто предлагают использовать типовые функции. Желающие могут проверить во что превратят вычисление суммы квадратов эти супер-компилеры (кто не поленится - просьба дать знать) Могу сразу заметить, что если сумма будет копиться в операнде памяти (как это делают осторожные борманы), то это будет в несколько раз хуже (на P4 до 5 раз), а если в одном регистре FPU, то до двух раз хуже, чем асм-реализация с параллельным накоплением двух сумм по четным и нечетным индексам PS: Возможно здесь не совсем к месту упоминать о "супероптимизаторе" Раймонде (фамилию не выговоришь), написавшем чудо-либу fpulib для masm32. Но ведь многие любители встроенных масмовских макросов и либ могут рассуждать как _DEN_ - куда нам до великих оптимизаторов, потративших десятки лет и т.д. и т.п. )))
Ms Rem Потому что импорт может перестроить линкер, AFAIK. bogrus Так как можно байты сэкономить на вызовах API? Недавно заметил, что в импорте можно опускать таблицы lookup и загрузчик такую ситуацию допускает (проверял только в XP). Экономия в байтах пропорциональна количеству импортируемых символов x4. Это оно? leo Тут нечнго проверять. Даже cl.exe не умеет оптимизировать FPU. Обилие инструкций fxch тому подтверждение.
типичный случай завышенного самомнения. Я написал, то что я написал, не для тебя, а исключительно для самоутверждения: пускай все видят какой я умный. А оценивать твоё поведение --- это не моя забота, если ты сам не можешь этого сделать, то обратись к специалисту.
Я экономил именно помещая адрес одного из импортов и вызывая другие апи по смещению. К счастью, я пишу на фасме, а у него нет линкера, и порядок импортов будет такой, как я задам.
Ms Rem Аналогично. Иначе бы не получилось убрать лукапы, хотя, кроме фасма, такое ещё можно в насме делать.
Quantum Инструкция fxch - не самое лучшее подтверждение, т.к. в пентиумах это "фиктивная" инструкция - никакого реального обмена не происходит - только переименование регистров (латентность = 0). А вот у AMD - все по честному, 2 тика
да, в основном это оптимизация адресации, т.е. обращение к [регистр (+-) 127 байт] занимает 3 байта, а [регистр (+-) > 127 байт] займет 6 байт, а т.к. обычная программа довольно много и часто манипулирует с одними и теми же (рядом находящимися) переменными, то правильный выбор "базы" к этим 256 байтам - в целом дает существенный прирост Вот, к примеру, излюбленный С'ями способ заполнения структуры Код (Text): 00401000 <M>/$ 8985 38FFFFFF MOV DWORD PTR [EBP-C8],EAX 00401006 |. C785 34FFFFFF 01000000 MOV DWORD PTR [EBP-CC],1 00401010 |. 898D 30FFFFFF MOV DWORD PTR [EBP-D0],ECX 00401016 |. C785 2CFFFFFF 14000000 MOV DWORD PTR [EBP-D4],14 00401020 |. 8995 28FFFFFF MOV DWORD PTR [EBP-D8],EDX 00401026 |. C785 24FFFFFF 04000000 MOV DWORD PTR [EBP-DC],4 00401030 |. 89B5 20FFFFFF MOV DWORD PTR [EBP-E0],ESI 00401036 |. C785 1CFFFFFF 80000000 MOV DWORD PTR [EBP-E4],80 В нем 8 аналогичных участков по 3 байта (FFFFFF) - итого 24 А вот аналогичный код с подобранной базой Код (Text): 00401000 <M>/$ 8D6D 9C LEA EBP,DWORD PTR [EBP-64] 00401003 |. 8945 9C MOV DWORD PTR [EBP-64],EAX 00401006 |. C745 98 01000000 MOV DWORD PTR [EBP-68],1 0040100D |. 894D 94 MOV DWORD PTR [EBP-6C],ECX 00401010 |. C745 90 14000000 MOV DWORD PTR [EBP-70],14 00401017 |. 8955 8C MOV DWORD PTR [EBP-74],EDX 0040101A |. C745 88 04000000 MOV DWORD PTR [EBP-78],4 00401021 |. 8975 84 MOV DWORD PTR [EBP-7C],ESI 00401024 |. C745 80 80000000 MOV DWORD PTR [EBP-80],80 0040102B |. 8D6D 64 LEA EBP,DWORD PTR [EBP+64] Т.е. 24 убрали, а 6 добавили - 18 прирост, а откройте любую системную библиотеку, вот только начало обычной ф-ции: Код (Text): 7C838736 ReplaceFileW $ 68 EC030000 PUSH 3EC 7C83873B . 68 4089837C PUSH 7C838940 7C838740 . E8 869DFCFF CALL __SEH_prolog 7C838745 . A1 CC36887C MOV EAX,DWORD PTR [___security_cookie] 7C83874A . 8945 E4 MOV DWORD PTR [EBP-1C],EAX 7C83874D . 8B7D 08 MOV EDI,DWORD PTR [EBP+8] 7C838750 . 89BD B8FCFFFF MOV DWORD PTR [EBP-348],EDI 7C838756 . 8B45 0C MOV EAX,DWORD PTR [EBP+C] 7C838759 . 8985 E0FCFFFF MOV DWORD PTR [EBP-320],EAX 7C83875F . 8B45 10 MOV EAX,DWORD PTR [EBP+10] 7C838762 . 8985 C0FCFFFF MOV DWORD PTR [EBP-340],EAX 7C838768 . 83C8 FF OR EAX,FFFFFFFF 7C83876B . 8985 F0FCFFFF MOV DWORD PTR [EBP-310],EAX 7C838771 . 8985 90FDFFFF MOV DWORD PTR [EBP-270],EAX 7C838777 . 8985 98FDFFFF MOV DWORD PTR [EBP-268],EAX 7C83877D . 8985 8CFDFFFF MOV DWORD PTR [EBP-274],EAX 7C838783 . 8985 40FDFFFF MOV DWORD PTR [EBP-2C0],EAX 7C838789 . 33DB XOR EBX,EBX 7C83878B . 899D 4CFCFFFF MOV DWORD PTR [EBP-3B4],EBX 7C838791 . 899D 48FCFFFF MOV DWORD PTR [EBP-3B8],EBX 7C838797 . 899D 54FCFFFF MOV DWORD PTR [EBP-3AC],EBX 7C83879D . 899D 44FDFFFF MOV DWORD PTR [EBP-2BC],EBX 7C8387A3 . 899D 48FDFFFF MOV DWORD PTR [EBP-2B8],EBX 7C8387A9 . C785 30FCFFFF 01000000 MOV DWORD PTR [EBP-3D0],1 7C8387B3 . 899D 38FCFFFF MOV DWORD PTR [EBP-3C8],EBX 7C8387B9 . 899D C8FCFFFF MOV DWORD PTR [EBP-338],EBX 7C8387BF . 899D D4FCFFFF MOV DWORD PTR [EBP-32C],EBX 7C8387C5 . 899D 40FCFFFF MOV DWORD PTR [EBP-3C0],EBX 7C8387CB . 899D 50FCFFFF MOV DWORD PTR [EBP-3B0],EBX 7C8387D1 . 899D ECFCFFFF MOV DWORD PTR [EBP-314],EBX 7C8387D7 . 899D C4FCFFFF MOV DWORD PTR [EBP-33C],EBX 7C8387DD . 899D 34FCFFFF MOV DWORD PTR [EBP-3CC],EBX Т.ч. 2 раза - это реальные цифры! даже не обязательно делать всё руками, досточно грамотно написать специальную утилиту, по скорости 4 раза - это был результат (на васме) от оптимизации обычной виндовой strcat (хотя здесь уже прийдется больше делать ручками)
Блин вы вобще видели название темы ? Для приличия каждый бы мог и затестить - помочь найти ошибки и т.д.
Прошу прощения. Мне нужно пошаговую инструкцию для малышей как этим пользоваться. Чего я не вбивал в верхнее окошко - в нижнем ничего так и не появилось.
Для вывода рез-та в нижнем окошке перед переменной или выр-ем ставте знак "?", потом наж-те кнопочко и если нет ош. или чего не заглючило получите в нижнем окошечке рез-тат. Все выражения должны заканчиваться точкой с запятой (. (Сам виноват надо было пояснения сразу написать)
leo Обилие этих инструкций в коде считаю явным признаком отстутсвия оптимизации, т.к. в 99% случаев можно от них отказаться. Никакого отношения к скорости выполнения этот эмпирически субьективный критерий не имеет. Ещё один признак (вижуал часто так делает): Код (Text): fstp var_1 mov eax,var_1 mov var_2,eax Когда можно короче: Код (Text): fst var_1 fstp var_2 Ещё пример. Когда по какой-то причине нужно просто выкинуть топовый регистр FPU, компилятор спихивает его в стек: Код (Text): push eax fstp [esp] Хотя удобнее делать так: Код (Text): fstp st(0) bogrus Справедливости ради стоит добавить, что вижуал умеет так оптимизировать с подбором базы. Я именно у него научился этому приемчику.
The Svin Несогласен. В том случае, если база знаний и специализация каждого из членов группы одинаковая, то с вероятностью 15-20% может ты и прав. Для рядовых программистов вероятность выше, поскольку в принципе, как говорится на "одно лицо". Поэтому там введена централизованная система координирования. Один думает-остальные пишут. Однако когда база знаний различная, более того, различнен характер участников, эффективность группы возростает МНОГОКРАТНО. Об этом свидетельствуют различные хак-группы, и кряк-группы, деятельность которых во многом эффективнее и MS и прочих фирм. ------------------------------------------ Отнюдь. Чтобы туда устроиться необходимо иметь супермозги. 14 собеседований, на каждом из которых тебя будут заставлять решать алгоритмические, арифметические задачи, головоломки, и прочюю фигню, ответы на которые в некоторых случаях не знают даже "экзаменаторы". Так что... Ну ты не во всем прав.. _DEN_ Поддерживаю всех, ты - пустозвон. Все-таки среди тех людей, где я общаюсь, да и на этом форуме в том числе, о человеке судят не по тому, что он говорит о себе и о других, прочей мелочи а ПО РЕЗУЛЬТАТАМ. ТВОИХ РЕЗУЛЬТАТОВ Я НЕ ВИЖУ. СЛЫШУ ТОЛЬКО СЛОВА ИЗ ПУСТОТЫ. Да и то... словами это не назовешь-БРЕД ОДИН.
Sonic Об оптимизации говорить рано. Глюки исправляй. Ошибка при работе со знаками. Аналогичные ошибки при работе с дробями. Вот смотри: ?12+x=7; ?x Ответ х=19 Аналогично, если "+" заменить на "/"
BioMehanik Достаточно пройти все 10 уровней Mod-X. Правда, условия стартового контракта не слишком шикарные. А ещё они периодически спонсируют олимпиады по программированию в различных ВУЗах по всей планете и трудоустраивают победителей. Короче, тот кто сильно хочет работать в Редмонде, вполне может туда попасть.