Size: a a a

Ассемблер

2021 September 01

d

disba1ancer in Ассемблер
можешь кратко пояснить как пользоваться таблицами инструкций агнера фога? если ератко никак, то пофиг, лучше сам буду разбираться
источник

E

Entusiast in Ассемблер
Таблица - это не всё.
У Агнера есть святой грааль по изучению микропроцессоров, там до Zen, расписаны как раз все эти явления - отставка, остановка флагов, остановка регистров, AGI остановка и т.д

Вот к нему я чаще всего заглядываю, а таблица - это так, дополнительное
источник

d

disba1ancer in Ассемблер
ясно
источник

d

disba1ancer in Ассемблер
вот у меня дважды встречается такое место:
       mov     [cur + size - 1], al
       lea     size, [size - 1]

0:      test    size, size
и думаю какой порядок лучше и туда ли я вообще смотрю... я про mov и lea
источник

E

Entusiast in Ассемблер
Ну и насчёт таблицы - вроде ничего сложного, микрооперации написаны (uops), задержка (clock cycles иди latency) написана, что ещё там нужно...
источник

d

disba1ancer in Ассемблер
ну их же нельзя просто взять и сложить, есть, наверное, какие-то правила
источник

E

Entusiast in Ассемблер
Ну есть, конечно же. Взглянуть нужно сначала вообще на весь код, предвидеть промахи в кэше, ещё перепроверить всё по поводу флагов, и т.д

inc + add = 2
Однако на деле с остановкой флагов inc + add = ~6-8 (ну примерно, сейчас не могу посмотреть)
Вот такие моменты нужно смотреть, это опять же относится к изучению микропроцессоров Агнера Фога
источник

d

disba1ancer in Ассемблер
боюсь для меня это рокет сайенс и уход от цели, я конечно хочу быстро, но не думаю что стоит тратить огромное количество времени ради прироста в пару процентов, вместо более интересных мне вещей...
источник

d

disba1ancer in Ассемблер
я первый мемсет немного переписал, сравни его с начальной версией из истории (в гисте есть ревизии), как по твоему, стало лучше?
источник

E

Entusiast in Ассемблер
Да, лучше, но в алгоритме всё равно test ждёт значения ECX, так что там как не меняй (в случае с stos и lea) - будет зависимость, процессору труднее будет предугадать  результат, и просчитать наперёд прыжок
Но я думаю, что это нормально
источник

d

disba1ancer in Ассемблер
с тестом проблемы, но, кажется, только там где mov + lea
источник

E

Entusiast in Ассемблер
А, увидел, скомбинировал

mov size
mov cur
test size
Да, так лучше
источник

d

disba1ancer in Ассемблер
но те куски, где ты ещё про абсурд написал, так и остались проблемными
источник

d

disba1ancer in Ассемблер
попробую второй прокачать аналогично и поглядеть что будет
источник

d

disba1ancer in Ассемблер
в общем прокачал второй, там помоему вообще немного по лучше, не считая что ecx пришлось на стек сохранять, а сразу после восстановления его надо тестить...
источник

d

disba1ancer in Ассемблер
у второго алгоритма получилось меньше условных переходов
источник

d

disba1ancer in Ассемблер
ладно, думаю закончить пока с memset, ибо мне ещё нужен memcmp, memcpy и memmove
источник
2021 September 02

d

disba1ancer in Ассемблер
хм, для броска исключений рантайму не хватает memcpy и strcmp, по ходу это и задаст вектор направления
источник

C

Cofeefee in Ассемблер
А чем тебе Агнеровские не нравятся?
источник

/

/bin/cat in Ассемблер
Кек, а как его пропустили?)
источник