Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
С целью ускорения целочисленной 64-битной арифметики решил попробовать использовать ассемблерную вставку с использованием регистров MMX (которые 64-битные и как нельзя лучше подошли бы для моей задачи). Не знаю, как сделать цикл со счётчиком или условный переход по равенству/неравенству содержимого одного из MMX-регистров 0. Некоторая сложность в том, что счётчик (кол-во повторений цикла) у меня тоже 64-битный. Возможно ли это сделать? Инструкции JZ, JNZ я так понимаю, для MMX-регистров не при делах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2018, 16:20 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Старшие разряды счётчика будут константами много миллионов лет. И зачем оно тогда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2018, 18:30 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Какие разряды Вы считаете старшими? Мне будут нужны количества повторений цикла, лежащие в диапазоне 33-41 бит. Всё это работает на "чистом" C++ в пределах 1 суток, но хотелось бы быстрее, вот за этим оно и нужно. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2018, 19:45 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
MMX это каменный век, 90-е, сейчас есть AVX-*, наверно надо в эту сторону копать. Как в асме их использовать не знаю, но все компиляторы С/С++ имеют соответствующий ключик для разрешения использования этого набора команд проца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2018, 20:03 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Dima TMMX это каменный век, 90-е, сейчас есть AVX-*, наверно надо в эту сторону копать. Как в асме их использовать не знаю, но все компиляторы С/С++ имеют соответствующий ключик для разрешения использования этого набора команд проца. Возможно, возможно. Но мне ещё важна совместимость с разными компами, некоторые из них довольно старые, хотя SSE 4 есть уже на всех проверенных. Мне не критично использование именно MMX, а нужна быстрая 64-битная арифметика (сложение-вычитание, сдвиги, and-or-xor). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2018, 21:46 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Не нужен asm Достаточно воспользоваться intrinsics инструкциями. https://software.intel.com/sites/landingpage/IntrinsicsGuide/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2018, 21:47 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Я правильно понял, что Вы предлагаете не выписывать явно работу с требуемыми регистрами, а довериться компилятору C ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2018, 21:53 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®Какие разряды Вы считаете старшими? Мне будут нужны количества повторений цикла, лежащие в диапазоне 33-41 бит. Всё это работает на "чистом" C++ в пределах 1 суток, но хотелось бы быстрее, вот за этим оно и нужно. :) Сделай цикл в цикле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2018, 08:25 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Вряд ли цикл в цикле будет способствовать достижению главной цели (сделать быстрее, чем на C++ с оптимизациями). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2018, 08:41 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®Вряд ли цикл в цикле будет способствовать достижению главной цели (сделать быстрее, чем на C++ с оптимизациями). Попробуй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2018, 08:51 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®Вряд ли цикл в цикле будет способствовать достижению главной цели (сделать быстрее, чем на C++ с оптимизациями). если индекс не нужен, то скорее всего быстрее будет раза 1.5-3 если у тебя в задаче нет использования сопроцессора, лучше не лезть в него, особенно при многопоточке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2018, 09:53 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®Я правильно понял, что Вы предлагаете не выписывать явно работу с требуемыми регистрами, а довериться компилятору C ? Работа с регистрами - явная, Что касается набора команд - разные версии кода под разные наборы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2018, 10:10 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Толстый длинный регистр нормально сравнивается. Но я-бы делал по возможности 32-разрядные counters а в теле цикла добавлял 41-битные константы если есть такая крайняя необходимость. В конце концов основное мясо цикла приходится на полезную работу а не на проверки счетчиков. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2018, 11:06 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®Вряд ли цикл в цикле будет способствовать достижению главной цели (сделать быстрее, чем на C++ с оптимизациями). Не получится. Я пробовал. Как ни выкручивайся, чаще всего руками написанный ассемблерный код получается медленнее, чем сгенерированный GCC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2018, 13:47 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Ага. Или руками написанный LLVM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2018, 14:22 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovКак ни выкручивайся, чаще всего руками написанный ассемблерный код получается медленнее, чем сгенерированный GCC. Пока могу лишь подтвердить это. :) Сделал тело цикла в ассемблерной вставке, получается в 1,5 раза дольше. Но работает правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2018, 11:19 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
maytonНо я-бы делал по возможности 32-разрядные counters а в теле цикла добавлял 41-битные константы если есть такая крайняя необходимость. В конце концов основное мясо цикла приходится на полезную работу а не на проверки счетчиков. Количество возможных проходов цикла лежит в диапазоне чисел разрядностью 33-41 бит (это пока). Было бы естественно использовать 64-битный регистр для этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2018, 11:23 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®Всё это работает на "чистом" C++ в пределах 1 суток, но хотелось бы быстрее А какова реальная задача? Может быть, есть алгоритмические пути оптимизации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2018, 11:51 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®maytonНо я-бы делал по возможности 32-разрядные counters а в теле цикла добавлял 41-битные константы если есть такая крайняя необходимость. В конце концов основное мясо цикла приходится на полезную работу а не на проверки счетчиков. Количество возможных проходов цикла лежит в диапазоне чисел разрядностью 33-41 бит (это пока). Было бы естественно использовать 64-битный регистр для этого. Используй. Фрагмент gcc-шного ассемблерного выхода ты видел. Но не забывай что РОН-ы это ценный ресурс. И если ты решил взять 1 регистр и прибить его гвоздями к счетчику циклов то ты лишаешь себя возможности использовать его в других целях. Кстати что у тебя внутри тела цикла? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2018, 12:03 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®, Расчетное - в mmx, переменную цикла - в обычный регистр (rcx, например). У меня так некоторые вставки (например - фильтры-свёртки) отлично работают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2018, 13:05 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®Количество возможных проходов цикла лежит в диапазоне чисел разрядностью 33-41 бит (это пока). Даже пустой цикл такого размера займёт туеву хучу времени. На фоне полезной нагрузки в его теле расходы на сам цикл обычно ничтожны. Не парься, пиши цикл в С++ с long long счётчиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2018, 13:56 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovAR®Количество возможных проходов цикла лежит в диапазоне чисел разрядностью 33-41 бит (это пока). Даже пустой цикл такого размера займёт туеву хучу времени. На фоне полезной нагрузки в его теле расходы на сам цикл обычно ничтожны. Не парься, пиши цикл в С++ с long long счётчиком. Мы занимаемся совершенно ненужным делом. Пытаемся додумать зачем ему (автору) нужен счетчик с 41 битом. Чисто теоретически я могу предположить что у него шаг цикла растет или стартовое выражение уже изначально велико. Вобщем мой вопрос о "реальной задаче" по прежнему актуален. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2018, 14:11 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Зачем нужен MMX регистр в x64? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2018, 14:46 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Ценное замечание. Я вот с любезного разрешения Intel сделал скриншотик с доки Introduction to x64 Assembly Регистр RAX,RDX который участвовал в loop condition моего тестового примера архитектурно отделен от пачки регистров FPU/MMX. И наверное есть здравый смысл в том что GCC собрал исходник без него. У компиллятора тоже есть свои метрики стоимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2018, 14:58 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39654478&tid=1340094]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 282ms |
| total: | 434ms |

| 0 / 0 |
