Vyacheslav
Потом просто инкрементить счётчик по выходу из repne
Eugene
Я думал про scasd, но не уверен, что это быстрее будет. Эти комплексные инструкции работают относительно медленно.
Да и там тоже не всё так радужно. Нужно определять причину выхода из цикла. И тогда либо опять возвращаемся к тому же вопросу:
xor ebx,ebx
@@: repne scand
setz bl
add edx,ebx
test ecx,ecx
jnz @B
Либо городим (и там всё равно встаёт эта тема):
@@: repne scasd
jecxz @F
inc edx
jmp @B
@@: setz bl
add edx,ebx
@osdever ну и куда ты?
K
Ребят, кто-нибудь знает чаты разработчиков компиляторов? Где-то видел такой, не могу найти.
JeisonWi
IRC://#gcc, #clang
K
https://t.me/CompilerDev вот вроде оно, если кому интересно
K
если это посчитается рекламой, можете удалить, не знал
О, ещё боты...
Имперский флаг? Хитро!
електр🟢нік ✙🟠рчбеч ඞ
/ban
Group Butler [beta]
H͚̓ü̺n̪̬̟ͣho͎̥͆wͧ banned Daily!
Ух, сколько ботов набежало!
Dan
Корм админам :)
𝐦𝐚𝐤𝐟𝐥𝐨𝐲
Сессия
bilka00
Вероятней всего сессия...
Eugene
Сексия.
електр🟢нік ✙🟠рчбеч ඞ
Депрессия.
Eugene
Такой вопрос созрел.
Сортировка. Обычно идёт сравнение и в случае, если значение меньше или равно (к примеру), прыгаем. Иначе обмен.
Нужно сделать с использованием cmovсс (без jcc). Но прикол в том, что cmovсс не пишет в память, пишет только в регистр (из регистра или памяти).
В итоге получается какая-то херня типа
mov eax,[esi]
mov edx,[edi]
cmp eax,edx
; Меняем местами, если больше
cmova ecx,eax
cmova eax,edx
cmova edx,ecx
; Пишем обратно
mov [esi],eax
mov [edi],edx
Абсолютно беспонтовая затея (лишние доступы к памяти).
У кого-нибудь есть идеи, как это можно сделать красиво, без такого уродства?
Если использовать cmpxchg, будет не лучше (ну или не намного лучше).
JeisonWi
Такой вопрос созрел.
Сортировка. Обычно идёт сравнение и в случае, если значение меньше или равно (к примеру), прыгаем. Иначе обмен.
Нужно сделать с использованием cmovсс (без jcc). Но прикол в том, что cmovсс не пишет в память, пишет только в регистр (из регистра или памяти).
В итоге получается какая-то херня типа
mov eax,[esi]
mov edx,[edi]
cmp eax,edx
; Меняем местами, если больше
cmova ecx,eax
cmova eax,edx
cmova edx,ecx
; Пишем обратно
mov [esi],eax
mov [edi],edx
Абсолютно беспонтовая затея (лишние доступы к памяти).
У кого-нибудь есть идеи, как это можно сделать красиво, без такого уродства?
Если использовать cmpxchg, будет не лучше (ну или не намного лучше).
AVX может попробовать?
Eugene
Не, в данном случае это точно не надо.
Надо обойтись без SSE и AVX 🙂
Maksym
Шош вас так много
Co(n)stantine👨🔬
Все вдруг поняли, что в 2019 все же нужно знать asm, сложно без него
Kirill
Товарищ Столяров настаивает на том чтобы уважающие себя профессионалы обходились без парочки чародеев и волшебных палочек, если вы понимаете о чём я!)
Anonymous
Eugene
Anonymous
Что это?
Это я к какому-то давнему вопросу о поиске простых чисел на разных ISA
Eugene
Anonymous
Когда частота CPU падает
Anonymous
и процессор работает медленнее
Anonymous
должно компенсироваться толщиной регистров, в случае с AVX
Anonymous
Но код должен быть соответствующим
Eugene
В смысле, когда выполняется AVX, автоматом падает частота? 😯
Anonymous
Вроде бы как да
Anonymous
Но я не знаю, на всех ли CPU так
Anonymous
и на всех ли AVX
Anonymous
Но такое явление точно есть
Anonymous
т.е. код на SSE может оказаться быстрее из-за этого эффекта
Anonymous
https://arxiv.org/pdf/1901.04982.pdf
Anonymous
Тут про интел и про AVX2 и AVX512
Eugene
А если AVX1?
Eugene
И если в винде отключить управление частотой? Это поможет как-то?
Anonymous
По-моему, это чисто железячная специфика
Anonymous
т.е. не винда управляет
Anonymous
На уровне микрокода
Anonymous
А если AVX1?
Надо гуглить. Может и ничего страшного
Eugene
Если смотреть тайминги у А.Фога, к примеру, то в Skylake AVX работает быстро, до него — медленно.
Anonymous
Очень даже правдоподобно
Anonymous
Это как-то связано с отведением тепла. Толстые регистры разогревают процессор сильнее
Aiwan \ (•◡•) / _bot
Во флуд заходи
Закреп читай, а не закрывай.
Aiwan \ (•◡•) / _bot
Вопрос такой, что быстрей, тригонометрические функции через fpu или они же, но реализованных через алгоритмы целочисленной математики?
Aiwan \ (•◡•) / _bot
Где то слышал/читал через fpu около 600-800 тактов
електр🟢нік ✙🟠рчбеч ඞ
на современных
Aiwan \ (•◡•) / _bot
електр🟢нік ✙🟠рчбеч ඞ
там и 1к+ было
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
#book masm + MSVS win32 лекции
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
#book АЛГОРИТМ ВЫЧИСЛЕНИЯ ФУНКЦИЙ SIN(X) И COS(X)
ДЛЯ 16-РАЗРЯДНЫХ МИКРОКОНТРОЛЛЕРОВ
Eugene
На 8086 всё было очень печально. Сейчас FPU работают шустро, SSE — ещё шустрее.
Я как-то алгоритм вычисления синуса через SSE (через ряды) сравнивал с fsin. Так вот, при грамотной реализации (в Delphi, в общем-то хорошо сделано, его и сравнивал) алгоритм работает быстрее, чем fsin.
Eugene
Я уже скидывал пару раз ссылку на доку по таймингам: xk8.ru/agnerinstbl
Тут они хоть и экспериментальным путём получены, но спецом грамотным и по разным процессорам.
Aiwan \ (•◡•) / _bot
Eugene
Смотря как эмуляция реализована.
Aiwan \ (•◡•) / _bot
Для сравнения dosbox qemu bochs
Aiwan \ (•◡•) / _bot
В последних двух я не шарю
Vyacheslav
Vyacheslav
Ну и от реализации зависит.
Aiwan \ (•◡•) / _bot
Но знаю что bochs реализует именно железо программным путем, начиная от биоса и остальных железных компонентов
Eugene
Я хотел сделать как-то быстрое вычисление корня из целого числа (32 бита). На FPU всё равно быстрее, не говоря уже о SSE (где не нужно в память писать/читать) .
Eugene
Не могу сказать про то, как устроены Bochs и QEMU, но DOSBox вроде старается сделать всё, как положено, там не менее, косяки там есть. К примеру, in/out работают очень быстро, когда в реальности около 1 мкс даже на современных.
Eugene
QEMU, как пишут, поддерживает аппаратную виртуализацию, поэтому скорость в случае его использования должна быть не сильно ниже скорости реального процессора.
Aiwan \ (•◡•) / _bot
cmc.masm.taskbook.pdf
Dmitri
Aiwan \ (•◡•) / _bot
#book упражнения masm, чтоб мозги размять
JeisonWi
Eugene
Кстати, кто-нибудь пробовал запускать винду на Andriod? 98 хотя бы или, может, XP. Прочитал сейчас, что 98 запускали на Андроиде через Bochs :))