Romeo » 17 июн 2009, 11:02
" писал(а):Команды MOV, AND, OR, ADD и пр. еще со времен 386 всегда выполнялась за 1 такт, на 286 уже 2 такта, а вот на современных процессорах до 0.25 тактов (4 инструкции за раз, это при идеальном случае). В то время как SHL/SHR/SAL/SAR и иже с ними за 4 такта (3 такта если находятся в кеше 1 уровня). В моей библиотеке сжатия по хаффману мне удалось отказаться от 2-ух инструкций сдвигов в пользу MOV для табличных расчетов и это дало прирост в 30%. Экспериментально вычисленное время выполнения сдвиговых операций на одноядерном процессоре в среднем составляет 4.8 такта на инструкцию.
somewhere, ну ты силён, я последний раз программировал на чистом асме в чистом DOS на четвёках
Причём руководствовался интеактивной документашкой techhelp, была такая раньше, она описывала все параметры команд для двоек и троек, потому я и сказал, что 2 такта. Но даже тогда, сдвиг работал два такта (при условии, что сдвиг на делается на один бит и количество бит, то есть единичка, занесены в регистр). Почему на современных процессорах это время увеличилось, интересно?
" писал(а):быстрее чем loop. Ну и еще довольно много прочих хитростей.
Ага, это известный факт. Ещё есть очень правильная рекомендация всячески уходить от джампов, например используя сложение с переполнением и вычитание с заёмом (adc, sbb) - при хитро продуманном алгоритме это позволяет в некотрых случаях красиво переделать конструкцию if, в состав которой входит джамп. Вообще там много нюансов есть, к сожалению не все уже помню, так как сейчас нас asm не пишу.
" писал(а):А вот самая быстрая команда все таки NOP
Трудно поспорить, я про NOP забыл даже
" писал(а):старый добрый bitfuck или хотябы преобразование RGB555 -> RGB888 и обратно
Сейчас ты человека совсем запугаешь, он к нас не придёт больше
[quote="""]Команды MOV, AND, OR, ADD и пр. еще со времен 386 всегда выполнялась за 1 такт, на 286 уже 2 такта, а вот на современных процессорах до 0.25 тактов (4 инструкции за раз, это при идеальном случае). В то время как SHL/SHR/SAL/SAR и иже с ними за 4 такта (3 такта если находятся в кеше 1 уровня). В моей библиотеке сжатия по хаффману мне удалось отказаться от 2-ух инструкций сдвигов в пользу MOV для табличных расчетов и это дало прирост в 30%. Экспериментально вычисленное время выполнения сдвиговых операций на одноядерном процессоре в среднем составляет 4.8 такта на инструкцию.[/quote]
[b]somewhere[/b], ну ты силён, я последний раз программировал на чистом асме в чистом DOS на четвёках :) Причём руководствовался интеактивной документашкой techhelp, была такая раньше, она описывала все параметры команд для двоек и троек, потому я и сказал, что 2 такта. Но даже тогда, сдвиг работал два такта (при условии, что сдвиг на делается на один бит и количество бит, то есть единичка, занесены в регистр). Почему на современных процессорах это время увеличилось, интересно?
[quote="""]быстрее чем loop. Ну и еще довольно много прочих хитростей.[/quote]
Ага, это известный факт. Ещё есть очень правильная рекомендация всячески уходить от джампов, например используя сложение с переполнением и вычитание с заёмом (adc, sbb) - при хитро продуманном алгоритме это позволяет в некотрых случаях красиво переделать конструкцию if, в состав которой входит джамп. Вообще там много нюансов есть, к сожалению не все уже помню, так как сейчас нас asm не пишу.
[quote="""]А вот самая быстрая команда все таки NOP [/quote]
Трудно поспорить, я про NOP забыл даже :)
[quote="""]старый добрый bitfuck или хотябы преобразование RGB555 -> RGB888 и обратно [/quote]
Сейчас ты человека совсем запугаешь, он к нас не придёт больше :)