Size: a a a

Ассемблер

2021 May 19

s

s54816 in Ассемблер
Ответ отвалился.
источник
2021 May 20

MA

Max Azatian in Ассемблер
 movups xmm0, [rsp] 
 movups xmm1, [rsi + rcx]

 mulps xmm1, xmm0
mulps не работает, если в него сразу кинуть адрес в памяти (у меня память не выровнена). Если память нельзя выравнивать, то как можно обойти второй movups с хмм1?
источник

MA

Max Azatian in Ассемблер
короче говоря, этот цикл еще больше оптимизировать можно? :
first:
 movups xmm0, [rsp] //alpha
 movups xmm1, [rsi + rcx] //x[i..i+4]

 mulps xmm1, xmm0 //alpha * (x[i..i+4])

 movups xmm2, [rdx + rcx] //y[i..i+4]
 addps xmm1, xmm2 //alpha * (x[i..i+4]) + (y[i..i+4])

 movups [rdx + rcx], xmm1 //new y[i..i+4]

 add rcx, 16
 cmp rcx, rdi
 jl first
источник

s

s54816 in Ассемблер
Я про -ss говорил, там выравнивать не нужно.
источник

MA

Max Azatian in Ассемблер
там я поправил, дальше уже некуда
источник

MA

Max Azatian in Ассемблер
мб в основном цикле еще что есть
источник

s

s54816 in Ассемблер
Ну разве что перестать читать альфу внутри цикла.
источник

MA

Max Azatian in Ассемблер
тогда тестер говорит, что решение хуже (если ее читать вне цикла)
источник

MA

Max Azatian in Ассемблер
это уже попробовал
источник

s

s54816 in Ассемблер
А это точно одна и та же функция? Ты пробовал результат первого куска распечатать?
источник

MA

Max Azatian in Ассемблер
да
там косяк был в другом, я это уже поправил
источник

s

s54816 in Ассемблер
Я просто пытаюсь понять, что за тестер у вас такой :)
источник

MA

Max Azatian in Ассемблер
он для каждой операции считает кол-во микроинструкций, и выдает среднеарифметическое по +- 1024 тестам
источник

D

Den in Ассемблер
А вот как значит, bcd бывает еще упакованым а бывает нет.  в неупакованом полбайта пустые а в упакованом вторые 4 бита задействуют под второю цифру
источник

D

Den in Ассемблер
Вообще какая то странная терминология получается, в неупакованом виде классическом в байт можно 256 значений запихать а в упакованый BCD только 99, странная какая то упаковка, написано было, что это придумали для улучшения быстродействия типа не надо десятичные числа преобразовывать что то типа в двоичные и потом обратно, но что то как то это сомнительно, тут тоже идет преобразование да еще и места надо больше в регистах под этот двоично-десятичный формат? Похоже из за этого так регистры новые чтоли раздули? Чтобы работать с этим BCD?
источник

MA

Max Azatian in Ассемблер
ты в в BCD можешь только 100 значений упаковать, так как там 8 сегментов * 2 цифры всего, которые их и показывают
источник

MA

Max Azatian in Ассемблер
и БСД изначально для всяких таймеров и похожего придумали
источник

MA

Max Azatian in Ассемблер
чтобы значения норм отображать и не колупаться с переводом из двоичной в десятичную
источник

D

Den in Ассемблер
да ошибся не 99 а 100 там же еще нулевое значение
источник

s

s54816 in Ассемблер
В BCD ты можешь деньги хранить, хоть 100 цифр, если у тебя достаточно денег. Никто не заставляет ограничиваться байтом или полубайтом. Длинные числа выводить сложнее (тебе нужно длинное деление), и вот как раз эту проблему BCD отлично решает.
И да, «упакованный» !=  «сжатый».
источник