Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ассемблер - регистры MMX - команды условного перехода. / 25 сообщений из 225, страница 1 из 9
01.06.2018, 16:20
    #39654105
AR®
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
С целью ускорения целочисленной 64-битной арифметики решил попробовать использовать ассемблерную вставку с использованием регистров MMX (которые 64-битные и как нельзя лучше подошли бы для моей задачи).

Не знаю, как сделать цикл со счётчиком или условный переход по равенству/неравенству содержимого одного из MMX-регистров 0.
Некоторая сложность в том, что счётчик (кол-во повторений цикла) у меня тоже 64-битный.

Возможно ли это сделать?
Инструкции JZ, JNZ я так понимаю, для MMX-регистров не при делах?
...
Рейтинг: 0 / 0
01.06.2018, 18:30
    #39654174
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
Старшие разряды счётчика будут константами много миллионов лет. И зачем оно тогда?
...
Рейтинг: 0 / 0
01.06.2018, 19:45
    #39654201
AR®
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
Какие разряды Вы считаете старшими?
Мне будут нужны количества повторений цикла, лежащие в диапазоне 33-41 бит.
Всё это работает на "чистом" C++ в пределах 1 суток, но хотелось бы быстрее, вот за этим оно и нужно. :)
...
Рейтинг: 0 / 0
01.06.2018, 20:03
    #39654208
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
MMX это каменный век, 90-е, сейчас есть AVX-*, наверно надо в эту сторону копать. Как в асме их использовать не знаю, но все компиляторы С/С++ имеют соответствующий ключик для разрешения использования этого набора команд проца.
...
Рейтинг: 0 / 0
01.06.2018, 21:46
    #39654225
AR®
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
Dima TMMX это каменный век, 90-е, сейчас есть AVX-*, наверно надо в эту сторону копать. Как в асме их использовать не знаю, но все компиляторы С/С++ имеют соответствующий ключик для разрешения использования этого набора команд проца.

Возможно, возможно.
Но мне ещё важна совместимость с разными компами, некоторые из них довольно старые, хотя SSE 4 есть уже на всех проверенных.
Мне не критично использование именно MMX, а нужна быстрая 64-битная арифметика (сложение-вычитание, сдвиги, and-or-xor).
...
Рейтинг: 0 / 0
01.06.2018, 21:47
    #39654226
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
Не нужен asm

Достаточно воспользоваться intrinsics инструкциями.
https://software.intel.com/sites/landingpage/IntrinsicsGuide/
...
Рейтинг: 0 / 0
01.06.2018, 21:53
    #39654229
AR®
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
Я правильно понял, что Вы предлагаете не выписывать явно работу с требуемыми регистрами, а довериться компилятору C ?
...
Рейтинг: 0 / 0
02.06.2018, 08:25
    #39654287
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
AR®Какие разряды Вы считаете старшими?
Мне будут нужны количества повторений цикла, лежащие в диапазоне 33-41 бит.
Всё это работает на "чистом" C++ в пределах 1 суток, но хотелось бы быстрее, вот за этим оно и нужно. :)
Сделай цикл в цикле.
...
Рейтинг: 0 / 0
02.06.2018, 08:41
    #39654289
AR®
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
Вряд ли цикл в цикле будет способствовать достижению главной цели (сделать быстрее, чем на C++ с оптимизациями).
...
Рейтинг: 0 / 0
02.06.2018, 08:51
    #39654291
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
AR®Вряд ли цикл в цикле будет способствовать достижению главной цели (сделать быстрее, чем на C++ с оптимизациями).
Попробуй.
...
Рейтинг: 0 / 0
02.06.2018, 09:53
    #39654298
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
AR®Вряд ли цикл в цикле будет способствовать достижению главной цели (сделать быстрее, чем на C++ с оптимизациями).
если индекс не нужен, то скорее всего быстрее будет раза 1.5-3

если у тебя в задаче нет использования сопроцессора, лучше не лезть в него, особенно при многопоточке
...
Рейтинг: 0 / 0
02.06.2018, 10:10
    #39654303
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
AR®Я правильно понял, что Вы предлагаете не выписывать явно работу с требуемыми регистрами, а довериться компилятору C ?
Работа с регистрами - явная,
Что касается набора команд - разные версии кода под разные наборы
...
Рейтинг: 0 / 0
02.06.2018, 11:06
    #39654316
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
Толстый длинный регистр нормально сравнивается. Но я-бы делал по возможности 32-разрядные counters
а в теле цикла добавлял 41-битные константы если есть такая крайняя необходимость. В конце
концов основное мясо цикла приходится на полезную работу а не на проверки счетчиков.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 printf("Size of long dick = %d bytes\n", sizeof(long));

   for(long dick = 6'000'000'000ul ; 
         dick < 6'000'000'000ul + 10 ; 
         dick++ ) {
      printf("Yet another fucken long dick %llu \n", dick);
   }



Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        movabsq $6000000000, %rax
        movq    %rax, -8(%rbp)
.L3:
        movq    -8(%rbp), %rdx
        movabsq $6000000009, %rax
        cmpq    %rax, %rdx
        ja      .L2
        movq    -8(%rbp), %rax
        movq    %rax, %rsi
        leaq    .LC1(%rip), %rdi
        movl    $0, %eax
        call    printf@PLT
        addq    $1, -8(%rbp)
        jmp     .L3
...
Рейтинг: 0 / 0
02.06.2018, 13:47
    #39654346
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
AR®Вряд ли цикл в цикле будет способствовать достижению главной цели (сделать быстрее, чем на C++ с оптимизациями).
Не получится. Я пробовал. Как ни выкручивайся, чаще всего руками написанный ассемблерный код получается медленнее, чем сгенерированный GCC.
...
Рейтинг: 0 / 0
02.06.2018, 14:22
    #39654347
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
Ага. Или руками написанный LLVM
...
Рейтинг: 0 / 0
03.06.2018, 11:19
    #39654451
AR®
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
Dimitry SibiryakovКак ни выкручивайся, чаще всего руками написанный ассемблерный код получается медленнее, чем сгенерированный GCC.

Пока могу лишь подтвердить это. :)
Сделал тело цикла в ассемблерной вставке, получается в 1,5 раза дольше. Но работает правильно.
...
Рейтинг: 0 / 0
03.06.2018, 11:23
    #39654452
AR®
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
maytonНо я-бы делал по возможности 32-разрядные counters а в теле цикла добавлял 41-битные константы если есть такая крайняя необходимость. В конце концов основное мясо цикла приходится на полезную работу а не на проверки счетчиков.


Количество возможных проходов цикла лежит в диапазоне чисел разрядностью 33-41 бит (это пока). Было бы естественно использовать 64-битный регистр для этого.
...
Рейтинг: 0 / 0
03.06.2018, 11:51
    #39654457
MBo
MBo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
AR®Всё это работает на "чистом" C++ в пределах 1 суток, но хотелось бы быстрее

А какова реальная задача?
Может быть, есть алгоритмические пути оптимизации?
...
Рейтинг: 0 / 0
03.06.2018, 12:03
    #39654459
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
AR®maytonНо я-бы делал по возможности 32-разрядные counters а в теле цикла добавлял 41-битные константы если есть такая крайняя необходимость. В конце концов основное мясо цикла приходится на полезную работу а не на проверки счетчиков.


Количество возможных проходов цикла лежит в диапазоне чисел разрядностью 33-41 бит (это пока). Было бы естественно использовать 64-битный регистр для этого.
Используй. Фрагмент gcc-шного ассемблерного выхода ты видел. Но не забывай что РОН-ы это ценный ресурс.
И если ты решил взять 1 регистр и прибить его гвоздями к счетчику циклов то ты лишаешь себя возможности
использовать его в других целях.

Кстати что у тебя внутри тела цикла?
...
Рейтинг: 0 / 0
03.06.2018, 13:05
    #39654478
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
AR®,

Расчетное - в mmx, переменную цикла - в обычный регистр (rcx, например). У меня так некоторые вставки (например - фильтры-свёртки) отлично работают.
...
Рейтинг: 0 / 0
03.06.2018, 13:56
    #39654497
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
AR®Количество возможных проходов цикла лежит в диапазоне чисел разрядностью 33-41 бит (это пока).
Даже пустой цикл такого размера займёт туеву хучу времени. На фоне полезной нагрузки в его теле расходы на сам цикл обычно ничтожны. Не парься, пиши цикл в С++ с long long счётчиком.
...
Рейтинг: 0 / 0
03.06.2018, 14:11
    #39654499
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
Dimitry SibiryakovAR®Количество возможных проходов цикла лежит в диапазоне чисел разрядностью 33-41 бит (это пока).
Даже пустой цикл такого размера займёт туеву хучу времени. На фоне полезной нагрузки в его теле расходы на сам цикл обычно ничтожны. Не парься, пиши цикл в С++ с long long счётчиком.
Мы занимаемся совершенно ненужным делом. Пытаемся додумать зачем ему (автору) нужен счетчик с 41 битом.
Чисто теоретически я могу предположить что у него шаг цикла растет или стартовое выражение уже изначально
велико.

Вобщем мой вопрос о "реальной задаче" по прежнему актуален.
...
Рейтинг: 0 / 0
03.06.2018, 14:46
    #39654503
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
Зачем нужен MMX регистр в x64?
...
Рейтинг: 0 / 0
03.06.2018, 14:58
    #39654506
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
Ценное замечание. Я вот с любезного разрешения Intel сделал скриншотик с доки Introduction to x64 Assembly

Регистр RAX,RDX который участвовал в loop condition моего тестового примера архитектурно отделен от пачки регистров FPU/MMX.
И наверное есть здравый смысл в том что GCC собрал исходник без него. У компиллятора тоже есть свои
метрики стоимости.
...
Рейтинг: 0 / 0
03.06.2018, 19:24
    #39654550
AR®
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблер - регистры MMX - команды условного перехода.
Dimitry SibiryakovНе парься, пиши цикл в С++ с long long счётчиком.
Так написан, работает.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ассемблер - регистры MMX - команды условного перехода. / 25 сообщений из 225, страница 1 из 9
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]