Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
vicontfreetime

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
День добрый!
Нужна помощь по обработке полубайтовых целочисленных значений (т.е. байтовый массив, каждый байт которого хранит 2 значения). Есть ли в природе хороший справочный материал по работе с SSE - SSE 4.2 с целочисленными данными? С примерами.

Всего записей: 377 | Зарегистр. 22-04-2002 | Отправлено: 09:26 14-09-2015
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 10:09 14-09-2015 | Исправлено: bomzzz, 10:28 14-09-2015
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vicontfreetime, вот уж ссе тебе тут точно не помощник...

Всего записей: 11553 | Зарегистр. 03-08-2008 | Отправлено: 10:38 14-09-2015
vicontfreetime

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Почему не помощник? Идея была следующая: грузить в SIMD-регистр данные, делать or по маске, сравнивать с поисковым вектором. Затем сдвигать вектор на 4 бита и сравнивать ещё раз. Использовать параллельно несколько xmm регистров для параллелизации. Некоторую проблему представляет то, что поисковый вектор может быть разной длины, но, думаю, можно придумать, как это обойти. Для длин векторов 3-7 я реализовал это просто на ассемблере, тут, считаю, выигрыша от SIMD не будет. А вот для старших векторов, возможно, и будет.
Вот вышеописанный алгоритм ( т.е. загрузка, or с фиксированной маской и сравнение с другой маской) можно реализовать на SSE?

Всего записей: 377 | Зарегистр. 22-04-2002 | Отправлено: 11:55 14-09-2015
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а как на 4 бита смещать

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 12:05 14-09-2015
vicontfreetime

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поэтому и просил ссылок на доки  

Всего записей: 377 | Зарегистр. 22-04-2002 | Отправлено: 12:57 14-09-2015
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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

Всего записей: 11553 | Зарегистр. 03-08-2008 | Отправлено: 13:37 14-09-2015 | Исправлено: MERCURY127, 13:49 14-09-2015
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
а как на 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

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 13:51 14-09-2015
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а кстати, в каком отладчике можно посмотреть эти пермутации? в реальном, так сказать, времени...

Всего записей: 11553 | Зарегистр. 03-08-2008 | Отправлено: 14:26 14-09-2015
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OllyDbg v2.01
 
>vicontfreetime Остальные необходимые инструкции:
por
pcmpeqb + pmovmskb
 
Но не факт, что будет быстрее обычного асма.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 14:31 14-09-2015 | Исправлено: ne_viens, 14:42 14-09-2015
Benchmark



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
OllyDbg v2.01  

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

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

Более того, на разных поколениях CPU оно будет исполняться с разной эффективностью.

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 16:26 14-09-2015
vicontfreetime

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
 Спасибо!  

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

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

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

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

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

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

Всего записей: 377 | Зарегистр. 22-04-2002 | Отправлено: 16:42 14-09-2015 | Исправлено: vicontfreetime, 16:43 14-09-2015
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Агнера Фога (Agner Fog) почитай:
http://www.agner.org/optimize/optimizing_assembly.pdf
http://www.agner.org/optimize/microarchitecture.pdf
 
 

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 16:58 14-09-2015
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
с avx дела обстоят так же как с sse, у меня процессор не поддерживает. есть туториалы в интернете
 
Добавлено:
а сколько выполняется эта команда смещения на 4 бита? она из ссе какого по номеру?
 
http://rghost.ru/7VYBbg72b
вот прога которая измеряет сколько тактов ссе команда исполняется.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 18:03 14-09-2015 | Исправлено: bomzzz, 20:17 14-09-2015
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 20:23 14-09-2015 | Исправлено: bomzzz, 20:31 14-09-2015
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

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

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 20:39 14-09-2015
vicontfreetime

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

Зачем? Как я адресовать буду 128 Гб RAM? Я не пишу программу целиком на ассемблере, - просто узкие места переписываю на нём.

Всего записей: 377 | Зарегистр. 22-04-2002 | Отправлено: 21:00 14-09-2015
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
смещение не может за один такт, она медленная

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 21:43 14-09-2015
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Никто и не говорит, что операция занимает один такт. Разве ты не в курсе, что команды могут запускаться на исполнение до окончания предшествующей?

Всего записей: 11553 | Зарегистр. 03-08-2008 | Отправлено: 22:19 14-09-2015
Benchmark



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz

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

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

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 22:26 14-09-2015 | Исправлено: Benchmark, 22:29 14-09-2015
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru