Страница: 1 | 2 |
кстати получается в билдере быстрее С код выполнится int main() {long long x,y=0; for (x=0; x<= 10000000000; x++) y++; return 0; } такой цикл в билдере 84 сек в VC 94 VC ассемблер код: for (x=0; x<= 10000000000; x++) 00411A2C mov dword ptr [x],0 00411A33 mov dword ptr [ebp-8],0 00411A3A jmp main+4Eh (411A4Eh) 00411A3C mov eax,dword ptr [x] 00411A3F add eax,1 00411A42 mov ecx,dword ptr [ebp-8] 00411A45 adc ecx,0 00411A48 mov dword ptr [x],eax 00411A4B mov dword ptr [ebp-8],ecx 00411A4E cmp dword ptr [ebp-8],2 00411A52 jg main+73h (411A73h) 00411A54 jl main+5Fh (411A5Fh) 00411A56 cmp dword ptr [x],540BE400h 00411A5D ja main+73h (411A73h) y++; 00411A5F mov eax,dword ptr [y] 00411A62 add eax,1 00411A65 mov ecx,dword ptr [ebp-18h] 00411A68 adc ecx,0 00411A6B mov dword ptr [y],eax 00411A6E mov dword ptr [ebp-18h],ecx 00411A71 jmp main+3Ch (411A3Ch) из билдера не могу сохранить код т.е. я хочу сказать многое зависит от компилятора, один и тот же код С выполняется быстрее на 12%
Вопрос: Скорость
Добавлено: 11.06.04 04:59
Автор вопроса: Павел | Web-сайт:
Интересная тема о сабже:
http://www.gotdotnet.ru/Forums/CommonForum/48736.aspx
Ответы
Всего ответов: 22
Номер ответа: 1
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #1
Добавлено: 11.06.04 05:54
Сорри, тест
Номер ответа: 2
Автор ответа:
Djoni
Вопросов: 6
Ответов: 35
Профиль | | #2
Добавлено: 11.06.04 11:22
Номер ответа: 3
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #3
Добавлено: 12.06.04 00:16
Люди, всё это брехня. Помните мы проводили тесты на скорость? Я делал на PB и VB. Кто то на Си++ и VB.NET.
Так вот, у того кто делал тест на Си, скорость цикла была 3 раза быстрее чем в машинных кодах. Это либо нонсенс, либо брехня.
А сейчас я вам покажу как обманывать почтеннейшую публику.
Цикл от 1 до 2 млрд (ПБ). (8 секунд)
C7C601943577 mov esi, 77359401
FFCE dec esi
75FC jne 004010E9
Тоже самое (PB Инлайне АСМ). (13 секунд)
BE01943577 mov esi, 77359401
4E dec esi
0F85F9FFFFFF jne 0040111F
Прикольно не правда ли. Игра называется найди 5 отличий. Я то знаю почему быстрее. Попробуйте и вы догадаться. Я потом расскажу в чём прикол. После того как наши асемблерщики выскажут своё мнение.
Номер ответа: 4
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #4
Добавлено: 12.06.04 00:20
Посмотрите какой громадный листнг на Cи, и какой маленький на PB. А "спецы" тут доказывают чуть ли не 4-х кратную разницу. Посмотри, твой код делает цикл через память. Это занимает время. Самый быстрый цикл - через регистры.
Номер ответа: 5
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #5
Добавлено: 13.06.04 13:34
Хотя я тоже ошибался.
Посмотрите
http://www.masmforum.com/viewtopic.php?p=22768#22768
Номер ответа: 6
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #6
Добавлено: 16.06.04 12:20
Судя по VCшному листингу, оптимизация была выключена. Мне лень проверять, но код должен быть заметно быстрее, уже хотя бы потому, что так как x не используется внутри цикла, VC юзает его через регистр. А Intel C++ Compiler, афаик, вообще выбрасывает такие циклы нафиг, заменяя на y=10000000000; x=10000000000;
Сравнивать время исполнения под Виндой, имхо, бессмысленно, лучше сравнивать машинный код. Однако Intel тоже не по деццки читерят, смотрите например здесь: http://www.fds-net.ru/forum/index.php?showtopic=17570&st=0
Номер ответа: 7
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #7
Добавлено: 17.06.04 21:28
Скорость выполнения той или иной команды ещё зависит от того использует она кэш или нет.
Номер ответа: 8
Автор ответа:
Djoni
Вопросов: 6
Ответов: 35
Профиль | | #8
Добавлено: 18.06.04 09:13
прально, т.к. скорость обращения естественно к кешу меньше. Только насколько я понимаю вероятность обращения к кешу тем выше, чем чаще идет повтор команд и данных.
Т.к. я пишу проги для микроконтроллеров, то для меня это воообще актуальная и тема, скорость выполнения кода.
Номер ответа: 9
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #9
Добавлено: 18.06.04 10:09
Ну да, если нужна скорость в повторяющихся операциях, то смотришь по таблицам какая из инструкций поддерживает кэш и как интенсивно его использует. Ну да ты, я вижу, в этом больше моего разбираешся. Приведи тогда парочку примеров как ты использовал кешированные команды. Или там архитектура совсем разная?
Номер ответа: 10
Автор ответа:
Djoni
Вопросов: 6
Ответов: 35
Профиль | | #10
Добавлено: 18.06.04 10:57
Насколько я понимаю все команды и данные попадают в кеш L1 и L2, т.е. нет разницы в командах и потом "задвигание" в кеш осуществляется программно, т.е. не от программиста(по этому просто не существует листинга для быстрой обработки команд), но если команды повторяются настолько часто, что не вылезают за границы кеша, то команда выполняется быстрее, т.к. естественно задержки при работе с кешем намного меньше, чем с памятью.
Номер ответа: 11
Автор ответа:
Djoni
Вопросов: 6
Ответов: 35
Профиль | | #11
Добавлено: 18.06.04 11:04
На счет скорости выполнения кода я имел ввиду "быстрые алгоритмы" и "вылизование" кода т.к. контроллеры имеют ограничения по скорости
Номер ответа: 12
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #12
Добавлено: 18.06.04 11:20
Я имел ввиду что то типа этого
¦ Команда Формат ¦ В ¦Вне ¦Прим. ¦
¦ ¦кэше ¦кэша ¦ ¦
+---------------------------------------------------+-----+-----+-------+
¦ЦЕЛОЧИСЛЕННЫЕ ¦ ¦ ¦ ¦
¦КОМАНДЫ ¦ ¦ ¦ ¦
¦MOV Пересылка: ¦ ¦ ¦ ¦
¦ -----------T------------¬ ¦ ¦ ¦ ¦
¦ регистр1 - ¦ 1000100W ¦11 reg1 reg2¦ ¦ 1 ¦ ¦ ¦
¦ регистр2 L----------+------------- ¦ ¦ ¦ ¦
¦ -----------T------------¬ ¦ ¦ ¦ ¦
¦ регистр2 - ¦ 1000101w ¦11 reg1 reg2¦ ¦ 1 ¦ ¦ ¦
¦ регистр1 L----------+------------- ¦ ¦ ¦ ¦
¦ -----------T------------¬ ¦ ¦ ¦ ¦
¦ память - ¦ 1000101w ¦mod reg r/m ¦ ¦ 1 ¦ 2 ¦ ¦
¦ регистр L----------+------------- ¦ ¦ ¦ ¦
¦ -----------T------------¬ ¦ ¦ ¦ ¦
¦ регистр - ¦ 1000100w ¦mod reg r/m ¦ ¦ 1 ¦ ¦ ¦
¦ память L----------+------------- ¦ ¦ ¦ ¦
¦ -----------T------------¬Непосредст- ¦ ¦ ¦ ¦
¦ константа - ¦ 1100011w ¦11000 reg ¦ венные ¦ 1 ¦ ¦ ¦
¦ регистр L----------+------------- данные ¦ ¦ ¦ ¦
¦ или ¦ ¦ ¦ ¦
¦ -----------¬ Непосредственные ¦ ¦ ¦ ¦
¦ ¦ 1011w reg¦ данные ¦ 1 ¦ ¦ ¦
¦ L----------- ¦ ¦ ¦ ¦
¦ -----------T------------¬Непосредст- ¦ ¦ ¦ ¦
¦ константа - ¦ 1100011w ¦mod 000 r/m ¦ венные ¦ 1 ¦ ¦ ¦
¦ память L----------+------------- данные ¦ ¦ ¦ ¦
¦ -----------¬ ¦ ¦ ¦ ¦
¦ память - ¦ 1010000w ¦ Полное смещение ¦ 1 ¦ ¦ ¦
¦ сумматор (AX)L----------- ¦ ¦ ¦ ¦
¦ -----------¬ ¦ ¦ ¦ ¦
¦ сумматор (AX)¦ 1010001w ¦ Полное смещение ¦ 1 ¦ 2 ¦ ¦
¦ - память L----------- ¦ ¦ ¦ ¦
L---------------------------------------------------+-----+-----+--------
----------------------------------------------------T-----T-----T-------¬
¦ Команда Формат ¦ В ¦Вне ¦Прим. ¦
¦ ¦кэше ¦кэше ¦ ¦
+---------------------------------------------------+-----+-----+-------+
¦MUL = Умножение (без знака) ¦ ¦ ¦ ¦
¦ -----------T------------¬ ¦ ¦ ¦ ¦
¦сумматор (AX) ¦ 1111011w ¦ 11 100 reg ¦ ¦ ¦ ¦ ¦
¦регистр L----------+------------- ¦ ¦ ¦ ¦
¦ Сомножитель-Байт ¦13/18¦ ¦MN/MX,3¦
¦ -Слово ¦13/26¦ ¦MN/MX,3¦
¦ -Двойное слово ¦13/42¦ ¦MN/MX,3¦
¦ -----------T------------¬ ¦ ¦ ¦ ¦
¦сумматор (AX) ¦ 1111011w ¦mod 100 r/m ¦ ¦ ¦ ¦ ¦
¦память L----------+------------- ¦ ¦ ¦ ¦
¦ Сомножитель-Байт ¦13/18¦ 1 ¦MN/MX,3¦
¦ -Слово ¦13/26¦ 1 ¦MN/MX,3¦
¦ -Двойное слово ¦13/42¦ 1 ¦MN/MX,3¦
¦ ¦ ¦ ¦ ¦
¦IMUL = Целочисленное умножение (со знаком) ¦ ¦ ¦ ¦
¦ -----------T------------¬ ¦ ¦ ¦ ¦
¦сумматор (AX) ¦ 1111011w ¦ 11 101 reg ¦ ¦ ¦ ¦ ¦
¦регистр L----------+------------- ¦ ¦ ¦ ¦
¦ Сомножитель-Байт ¦13/18¦ ¦MN/MX,3¦
¦ -Слово ¦13/26¦ ¦MN/MX,3¦
¦ -Двойное слово ¦13/42¦ ¦MN/MX,3¦
¦ -----------T------------¬ ¦ ¦ ¦ ¦
¦сумматор (AX) ¦ 1111011w ¦mod 101 r/m ¦ ¦ ¦ ¦ ¦
¦память L----------+------------- ¦ ¦ ¦ ¦
¦ Сомножитель-Байт ¦13/18¦ ¦MN/MX,3¦
¦ -Слово ¦13/26¦ ¦MN/MX,3¦
¦ -Двойное слово ¦13/42¦ ¦MN/MX,3¦
¦ -----------T----------T-------------¬¦ ¦ ¦ ¦
¦регистр1 ¦ 00001111 ¦ 10101111 ¦11 reg1 reg2 ¦¦ ¦ ¦ ¦
¦регистр2 L----------+----------+--------------¦ ¦ ¦ ¦
¦ Сомножитель-Байт ¦13/18¦ ¦MN/MX,3¦
¦ -Слово ¦13/26¦ ¦MN/MX,3¦
¦ -Двойное слово ¦13/42¦ ¦MN/MX,3¦
Номер ответа: 13
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #13
Добавлено: 18.06.04 11:20
Съехало, хрен с ним.
Номер ответа: 14
Автор ответа:
Djoni
Вопросов: 6
Ответов: 35
Профиль | | #14
Добавлено: 18.06.04 11:27
честно говоря я не особо понял
не могу правильно прочесть это инструкции ты что ли написал???
Номер ответа: 15
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #15
Добавлено: 18.06.04 13:07
Текст просто для ДОС-а. Вот его и перекосило