стартаперы vs старперы - never ending story
» Assembler
ShIvADeSt
Привет . Пишу Вам с Windows 10 прям Microsoft Edge.
Код:
Привет . Пишу Вам с Windows 10 прям Microsoft Edge.
Код:
Цитата:
Здравствуйте, начали проходить i8080, хочу у вас узнать команду которая, запишет число 11 в адрес ячейки памяти, который находится в паре hl. Спасибо
HL? ты на Z80 программируешь?
LD A, 11
LD [HL], A
День добрый!
Нужна помощь по обработке полубайтовых целочисленных значений (т.е. байтовый массив, каждый байт которого хранит 2 значения). Есть ли в природе хороший справочный материал по работе с SSE - SSE 4.2 с целочисленными данными? С примерами.
Нужна помощь по обработке полубайтовых целочисленных значений (т.е. байтовый массив, каждый байт которого хранит 2 значения). Есть ли в природе хороший справочный материал по работе с SSE - SSE 4.2 с целочисленными данными? С примерами.
vicontfreetime, вот уж ссе тебе тут точно не помощник...
Почему не помощник? Идея была следующая: грузить в SIMD-регистр данные, делать or по маске, сравнивать с поисковым вектором. Затем сдвигать вектор на 4 бита и сравнивать ещё раз. Использовать параллельно несколько xmm регистров для параллелизации. Некоторую проблему представляет то, что поисковый вектор может быть разной длины, но, думаю, можно придумать, как это обойти. Для длин векторов 3-7 я реализовал это просто на ассемблере, тут, считаю, выигрыша от SIMD не будет. А вот для старших векторов, возможно, и будет.
Вот вышеописанный алгоритм ( т.е. загрузка, or с фиксированной маской и сравнение с другой маской) можно реализовать на SSE?
Вот вышеописанный алгоритм ( т.е. загрузка, or с фиксированной маской и сравнение с другой маской) можно реализовать на SSE?
а как на 4 бита смещать
Поэтому и просил ссылок на доки
vicontfreetime, mmx/sse/avx не рассчитаны на ниббловую (4 бита) грануляцию, минимум 8 бит, чаще даже 16.
проще манипулировать ронами, распараллелив несколько операций по конвейеру и ядрам.
но если охота поизвращаться... качаем 64-ia-32-architectures-software-developer-manual-325462.pdf
http://www.intel.ru/content/www/ru/ru/processors/architectures-software-developer-manuals.html
и иже с ним и читаем главы 5.4, 10 и далее. думаю, ты быстро пожалеешь, что связался с ссе...
https://mischasan.wordpress.com/2011/04/04/what-is-sse-good-for-2-bit-vector-operations/
https://github.com/mischasan/sse2
http://docs.oracle.com/cd/E18752_01/html/817-5477/epmpv.html
проще манипулировать ронами, распараллелив несколько операций по конвейеру и ядрам.
но если охота поизвращаться... качаем 64-ia-32-architectures-software-developer-manual-325462.pdf
http://www.intel.ru/content/www/ru/ru/processors/architectures-software-developer-manuals.html
и иже с ним и читаем главы 5.4, 10 и далее. думаю, ты быстро пожалеешь, что связался с ссе...
https://mischasan.wordpress.com/2011/04/04/what-is-sse-good-for-2-bit-vector-operations/
https://github.com/mischasan/sse2
http://docs.oracle.com/cd/E18752_01/html/817-5477/epmpv.html
Цитата:
а как на 4 бита смещать
.const
_mask db 16 dup (0fh)
_mem db 12h,34h,56h,78h,9ah,0bch,0deh,0f0h,12h,34h,56h,78h,9ah,0bch,0deh,0f0h
.code
start:
lea ecx, _mem
lea edx, _mask
movdqu xmm0, [ecx]
movdqu xmm7, [edx]
movdqu xmm1, xmm0
psrlw xmm1, 4
pand xmm0, xmm7 ;lo nibbles
pand xmm1, xmm7 ;hi nibbles
ret
END start
а кстати, в каком отладчике можно посмотреть эти пермутации? в реальном, так сказать, времени...
OllyDbg v2.01
>vicontfreetime Остальные необходимые инструкции:
por
pcmpeqb + pmovmskb
Но не факт, что будет быстрее обычного асма.
>vicontfreetime Остальные необходимые инструкции:
por
pcmpeqb + pmovmskb
Но не факт, что будет быстрее обычного асма.
Цитата:
OllyDbg v2.01
SSE должен показать нормально.
Но вот понадобилось недавно задействовать AVX/AVX2. Оказалось, что кроме windbg и отладчика, встроенного в свежие версии IDA, воспользоваться-то и нечем.
Цитата:
Но не факт, что будет быстрее обычного асма.
Более того, на разных поколениях CPU оно будет исполняться с разной эффективностью.
ne_viens
Спасибо!
Цитата:
Проверю. Благо реальные данные весят гигов по 20, загружу в память полностью и оба варианта проверю. Когда проверял свой ассемблерный вариант vs C++/Delphi, глазам не верил
MERCURY127
Цитата:
Я смотрю (о, ужас!) в отладчике RAD Studio, когда непосредственно пишу и проверяю функции.
Цитата:
По ядрам - умею, а где можно почитать, как оптимизировать под конвейер? (хотя бы на уровне "вот эти две команды способны выполняться параллельны, а эти - ни-ни) И подобная инфа только под Интел есть?
Спасибо!
Цитата:
Но не факт, что будет быстрее обычного асма.
Проверю. Благо реальные данные весят гигов по 20, загружу в память полностью и оба варианта проверю. Когда проверял свой ассемблерный вариант vs C++/Delphi, глазам не верил
MERCURY127
Цитата:
а кстати, в каком отладчике можно посмотреть эти пермутации? в реальном, так сказать, времени...
Я смотрю (о, ужас!) в отладчике RAD Studio, когда непосредственно пишу и проверяю функции.
Цитата:
проще манипулировать ронами, распараллелив несколько операций по конвейеру и ядрам.
По ядрам - умею, а где можно почитать, как оптимизировать под конвейер? (хотя бы на уровне "вот эти две команды способны выполняться параллельны, а эти - ни-ни) И подобная инфа только под Интел есть?
Агнера Фога (Agner Fog) почитай:
http://www.agner.org/optimize/optimizing_assembly.pdf
http://www.agner.org/optimize/microarchitecture.pdf
http://www.agner.org/optimize/optimizing_assembly.pdf
http://www.agner.org/optimize/microarchitecture.pdf
с avx дела обстоят так же как с sse, у меня процессор не поддерживает. есть туториалы в интернете
Добавлено:
а сколько выполняется эта команда смещения на 4 бита? она из ссе какого по номеру?
http://rghost.ru/7VYBbg72b
вот прога которая измеряет сколько тактов ссе команда исполняется.
Добавлено:
а сколько выполняется эта команда смещения на 4 бита? она из ссе какого по номеру?
http://rghost.ru/7VYBbg72b
вот прога которая измеряет сколько тактов ссе команда исполняется.
Цитата:
По ядрам - умею, а где можно почитать, как оптимизировать под конвейер? (хотя бы на уровне "вот эти две команды способны выполняться параллельны, а эти - ни-ни) И подобная инфа только под Интел есть?
тебе под дос надо писать, а не под винду.
смотри впервом архиве пример ссе7. я использую ссе команды, но чтоб вывести под виндой рельтат, мне приходится еще сопроцессором преобразовывать строки вот такое ссе. но там выводилось численное значение
Цитата:
а сколько выполняется эта команда смещения на 4 бита?
psrlw ?
И через один такт процессора уже можно выполнять следующую psrlw.
Эта команда есть уже в MMXе, значит в примере она будет как SSE, так как с xmm работает.
Цитата:
тебе под дос надо писать, а не под винду.
Зачем? Как я адресовать буду 128 Гб RAM? Я не пишу программу целиком на ассемблере, - просто узкие места переписываю на нём.
смещение не может за один такт, она медленная
Никто и не говорит, что операция занимает один такт. Разве ты не в курсе, что команды могут запускаться на исполнение до окончания предшествующей?
bomzzz
Цитата:
Может.
Вообще измерять в тактах не совсем правильно, поскольку тут зависимость от:
1. процессора и, как следствие, количества микроинструкций для выполнения команды
2. размера используемых аргументов и того, где они находятся (т.е. регистр/память)
3. количества данных инструкций, которые этот процессор может выполнить параллельно
4. как правильно заметил MERCURY127, от возможности заранее предсказать переход и выполнить эту инструкцию раньше или одновременно с кодом, идущим до неё
Подробнее - тут:
http://www.agner.org/optimize/instruction_tables.pdf
Цитата:
смещение не может за один такт, она медленная
Может.
Вообще измерять в тактах не совсем правильно, поскольку тут зависимость от:
1. процессора и, как следствие, количества микроинструкций для выполнения команды
2. размера используемых аргументов и того, где они находятся (т.е. регистр/память)
3. количества данных инструкций, которые этот процессор может выполнить параллельно
4. как правильно заметил MERCURY127, от возможности заранее предсказать переход и выполнить эту инструкцию раньше или одновременно с кодом, идущим до неё
Подробнее - тут:
http://www.agner.org/optimize/instruction_tables.pdf
побаловался с тиками, действительно на современных процессорах (а моему 12 лет) эти операции быстрые, медленными они были давным давно. причем
если не врет два такта для ссе против пяти
если не врет два такта для ссе против пяти
Всем привет
Как наиболее безболезненно подружить интеловский фортран с ассемблером (x64)? Дело в том, что этот фортран еще не поддерживает FMA, который в 2 раза быстрей AVX, хотя опция для поддержки FMA существует.
В x86 для инструкций MMX есть регистры MM(0...8) по 64 бита, а для SSE — XMM(0...8) по 128 бит. Регистры MM — младшие половины XMM или это другие регистры и их можно независимо использовать?
Цитата:
технология SSE позволяла преодолеть две основные проблемы MMX: при использовании MMX невозможно было одновременно использовать инструкции сопроцессора, так как его регистры были общими с регистрами MMX, и возможность MMX работать только с целыми числами.
Добавлено:
Цитата:
Расширение MMX включает в себя восемь 64-битных регистров общего пользования MM0—MM7. Для совместимости со способами переключения контекста процессора в существующих ОС Intel была вынуждена объединить в программной модели процессора восемь регистров MMX с мантиссами восьми регистров FPU. Аппаратно это могут быть разные устройства, но с точки зрения программиста — это одни и те же регистры. Таким образом, нельзя одновременно пользоваться командами математического сопроцессора и MMX.
bomzzz, спасибо, я это видел. Но из этого не следует наличие или отсутствие связи между ММ или ХММ.
как бы физически это не было исполнено, ссе можно использовать вместе с ммх. в конце концов это не сложно проверить
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
Предыдущая тема: .NET GUI компоненты
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.