Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: ptr73
Дата сообщения: 02.05.2015 09:05
стартаперы vs старперы - never ending story
Автор: xpin2013
Дата сообщения: 01.08.2015 20:39
ShIvADeSt
Привет . Пишу Вам с Windows 10 прям Microsoft Edge.


Код:
Автор: Snouphruh
Дата сообщения: 14.08.2015 11:39

Цитата:
Здравствуйте, начали проходить i8080, хочу у вас узнать команду которая, запишет число 11 в адрес ячейки памяти, который находится в паре hl. Спасибо


HL? ты на Z80 программируешь?

LD A, 11
LD [HL], A

Автор: vicontfreetime
Дата сообщения: 14.09.2015 09:26
День добрый!
Нужна помощь по обработке полубайтовых целочисленных значений (т.е. байтовый массив, каждый байт которого хранит 2 значения). Есть ли в природе хороший справочный материал по работе с SSE - SSE 4.2 с целочисленными данными? С примерами.
Автор: bomzzz
Дата сообщения: 14.09.2015 10:09
http://neilkemp.us/src/sse_tutorial/sse_tutorial.html
http://www.tommesani.com/Docs.html

http://www.hardline.ru/3/26/819
http://parallel.ru/russia/MSU-Intel/sse.html

http://rghost.ru/8C82NgDGZ
http://www.masm32.com/board/index.php
Автор: MERCURY127
Дата сообщения: 14.09.2015 10:38
vicontfreetime, вот уж ссе тебе тут точно не помощник...
Автор: vicontfreetime
Дата сообщения: 14.09.2015 11:55
Почему не помощник? Идея была следующая: грузить в SIMD-регистр данные, делать or по маске, сравнивать с поисковым вектором. Затем сдвигать вектор на 4 бита и сравнивать ещё раз. Использовать параллельно несколько xmm регистров для параллелизации. Некоторую проблему представляет то, что поисковый вектор может быть разной длины, но, думаю, можно придумать, как это обойти. Для длин векторов 3-7 я реализовал это просто на ассемблере, тут, считаю, выигрыша от SIMD не будет. А вот для старших векторов, возможно, и будет.
Вот вышеописанный алгоритм ( т.е. загрузка, or с фиксированной маской и сравнение с другой маской) можно реализовать на SSE?
Автор: bomzzz
Дата сообщения: 14.09.2015 12:05
а как на 4 бита смещать
Автор: vicontfreetime
Дата сообщения: 14.09.2015 12:57
Поэтому и просил ссылок на доки
Автор: MERCURY127
Дата сообщения: 14.09.2015 13:37
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
Автор: ne_viens
Дата сообщения: 14.09.2015 13:51

Цитата:
а как на 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
Автор: MERCURY127
Дата сообщения: 14.09.2015 14:26
а кстати, в каком отладчике можно посмотреть эти пермутации? в реальном, так сказать, времени...
Автор: ne_viens
Дата сообщения: 14.09.2015 14:31
OllyDbg v2.01

>vicontfreetime Остальные необходимые инструкции:
por
pcmpeqb + pmovmskb

Но не факт, что будет быстрее обычного асма.
Автор: Benchmark
Дата сообщения: 14.09.2015 16:26

Цитата:
OllyDbg v2.01

SSE должен показать нормально.

Но вот понадобилось недавно задействовать AVX/AVX2. Оказалось, что кроме windbg и отладчика, встроенного в свежие версии IDA, воспользоваться-то и нечем.


Цитата:
Но не факт, что будет быстрее обычного асма.

Более того, на разных поколениях CPU оно будет исполняться с разной эффективностью.
Автор: vicontfreetime
Дата сообщения: 14.09.2015 16:42
ne_viens
Спасибо!

Цитата:
Но не факт, что будет быстрее обычного асма.

Проверю. Благо реальные данные весят гигов по 20, загружу в память полностью и оба варианта проверю. Когда проверял свой ассемблерный вариант vs C++/Delphi, глазам не верил

MERCURY127

Цитата:
а кстати, в каком отладчике можно посмотреть эти пермутации? в реальном, так сказать, времени...

Я смотрю (о, ужас!) в отладчике RAD Studio, когда непосредственно пишу и проверяю функции.


Цитата:
проще манипулировать ронами, распараллелив несколько операций по конвейеру и ядрам.

По ядрам - умею, а где можно почитать, как оптимизировать под конвейер? (хотя бы на уровне "вот эти две команды способны выполняться параллельны, а эти - ни-ни) И подобная инфа только под Интел есть?


Автор: ne_viens
Дата сообщения: 14.09.2015 16:58
Агнера Фога (Agner Fog) почитай:
http://www.agner.org/optimize/optimizing_assembly.pdf
http://www.agner.org/optimize/microarchitecture.pdf


Автор: bomzzz
Дата сообщения: 14.09.2015 18:03
с avx дела обстоят так же как с sse, у меня процессор не поддерживает. есть туториалы в интернете

Добавлено:
а сколько выполняется эта команда смещения на 4 бита? она из ссе какого по номеру?

http://rghost.ru/7VYBbg72b
вот прога которая измеряет сколько тактов ссе команда исполняется.
Автор: bomzzz
Дата сообщения: 14.09.2015 20:23

Цитата:
По ядрам - умею, а где можно почитать, как оптимизировать под конвейер? (хотя бы на уровне "вот эти две команды способны выполняться параллельны, а эти - ни-ни) И подобная инфа только под Интел есть?

тебе под дос надо писать, а не под винду.

смотри впервом архиве пример ссе7. я использую ссе команды, но чтоб вывести под виндой рельтат, мне приходится еще сопроцессором преобразовывать строки вот такое ссе. но там выводилось численное значение
Автор: ne_viens
Дата сообщения: 14.09.2015 20:39

Цитата:
а сколько выполняется эта команда смещения на 4 бита?


psrlw ?
И через один такт процессора уже можно выполнять следующую psrlw.
Эта команда есть уже в MMXе, значит в примере она будет как SSE, так как с xmm работает.



Автор: vicontfreetime
Дата сообщения: 14.09.2015 21:00

Цитата:
тебе под дос надо писать, а не под винду.

Зачем? Как я адресовать буду 128 Гб RAM? Я не пишу программу целиком на ассемблере, - просто узкие места переписываю на нём.
Автор: bomzzz
Дата сообщения: 14.09.2015 21:43
смещение не может за один такт, она медленная
Автор: MERCURY127
Дата сообщения: 14.09.2015 22:19
Никто и не говорит, что операция занимает один такт. Разве ты не в курсе, что команды могут запускаться на исполнение до окончания предшествующей?
Автор: Benchmark
Дата сообщения: 14.09.2015 22:26
bomzzz

Цитата:
смещение не может за один такт, она медленная

Может.

Вообще измерять в тактах не совсем правильно, поскольку тут зависимость от:
1. процессора и, как следствие, количества микроинструкций для выполнения команды
2. размера используемых аргументов и того, где они находятся (т.е. регистр/память)
3. количества данных инструкций, которые этот процессор может выполнить параллельно
4. как правильно заметил MERCURY127, от возможности заранее предсказать переход и выполнить эту инструкцию раньше или одновременно с кодом, идущим до неё

Подробнее - тут:
http://www.agner.org/optimize/instruction_tables.pdf
Автор: bomzzz
Дата сообщения: 15.09.2015 07:56
побаловался с тиками, действительно на современных процессорах (а моему 12 лет) эти операции быстрые, медленными они были давным давно. причем



если не врет два такта для ссе против пяти



Автор: GregScorp
Дата сообщения: 22.09.2015 07:24
Всем привет
Автор: GeorgeMame
Дата сообщения: 22.09.2015 15:39
Как наиболее безболезненно подружить интеловский фортран с ассемблером (x64)? Дело в том, что этот фортран еще не поддерживает FMA, который в 2 раза быстрей AVX, хотя опция для поддержки FMA существует.
Автор: 1lex1
Дата сообщения: 05.01.2016 11:17
В x86 для инструкций MMX есть регистры MM(0...8) по 64 бита, а для SSE — XMM(0...8) по 128 бит. Регистры MM — младшие половины XMM или это другие регистры и их можно независимо использовать?
Автор: bomzzz
Дата сообщения: 05.01.2016 11:21

Цитата:
технология SSE позволяла преодолеть две основные проблемы MMX: при использовании MMX невозможно было одновременно использовать инструкции сопроцессора, так как его регистры были общими с регистрами MMX, и возможность MMX работать только с целыми числами.


Добавлено:

Цитата:
Расширение MMX включает в себя восемь 64-битных регистров общего пользования MM0—MM7. Для совместимости со способами переключения контекста процессора в существующих ОС Intel была вынуждена объединить в программной модели процессора восемь регистров MMX с мантиссами восьми регистров FPU. Аппаратно это могут быть разные устройства, но с точки зрения программиста — это одни и те же регистры. Таким образом, нельзя одновременно пользоваться командами математического сопроцессора и MMX.
Автор: 1lex1
Дата сообщения: 05.01.2016 13:16
bomzzz, спасибо, я это видел. Но из этого не следует наличие или отсутствие связи между ММ или ХММ.
Автор: bomzzz
Дата сообщения: 05.01.2016 14:19
как бы физически это не было исполнено, ссе можно использовать вместе с ммх. в конце концов это не сложно проверить

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.