powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ассемблер - регистры MMX - команды условного перехода.
25 сообщений из 225, страница 6 из 9
Ассемблер - регистры MMX - команды условного перехода.
    #39658086
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Time = 14673

как-то дофига блин
там 8589934591 итераций цикла.

Еще там другой прикол компилятора есть в x32: нельзя писать f(4294967337, 8589934591), он магические числа в код вставляет 21477188
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658090
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®Aleksandr Sharahovзанафига все это, если есть теория )
Теорий много. Все теории стоят одна другой ©. ))

Конкретно по тому, что ты делаешь, есть довольно развитая теория.
Но ссылок не дам, т.к. "Задачу должен решить ты" (с).

AR®Спасибо за примеры кода. Будет времечко, изучу.

Что там изучать, просто используй, ибо:
a) Delphi+BASM=страшная сила,
б) хороший компилятор не заменяет мозг.

AR®Пара заметок:
1) корректно приводить время работы не просто для модели процессора, но с указанием его тактовой частоты

Начать надо сам знаешь с кого.
Частоты легко гуглятся, если чё.

AR®2) по ходу экспериментов я наступал как на "ложное срабатывание", так и на "ложное несрабатывание" своих асм-версий функции.
Поэтому вот более серьёзный тест: все числа от 4294967297 до 4294967550 в качестве 1-го аргумента функции, второй аргумент прежний - 8589934591. Весь цикл (254 шага) не займёт больше 20 минут.
Должно быть ровно 20 случаев f()==1. Если не 20, то в алгоритме ошибка.
А вот это проверим.
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658098
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕще там другой прикол компилятора есть в x32: нельзя писать f(4294967337, 8589934591), он магические числа в код вставляет

Я для теста передаю их как аргументы командной строки консольного приложеньица, зовущего f().
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658106
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНебольшой флешбек. Знаешь ты всё таки заслужил коньяк.

Полагаю, что не заслужил. Ибо конкретно у меня пока быстрее C++ не получилось.
Работаем...
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658109
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как будет угодно.
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658123
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®Поэтому вот более серьёзный тест: все числа от 4294967297 до 4294967550 в качестве 1-го аргумента функции, второй аргумент прежний - 8589934591. Весь цикл (254 шага) не займёт больше 20 минут.
Должно быть ровно 20 случаев f()==1. Если не 20, то в алгоритме ошибка.

алгоритм 21477774 на i5-2300 проверку прошел, затратив 995.5 сек
тест с 4294967297 на i5-2300 проходится за 15.99 сек

частота i5-2300 плавает от 2.8 до 3.1, считаем 3.1.
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658137
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия на С++:
на i3-2120 @3.3 ГГц вышеописанный цикл из 254 шагов делается за 800..845 секунд.
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658155
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®,

значит, считаем 2.8 )
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658191
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
алгоритм 21477774 на i5-3470 (3.2 GHz) проверку прошел, затратив 758.7 сек
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658292
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выяснил, что работу существенно тормозят ассемблерные команды сравнения вида

cmp ecx, <что-нибудь>

если в них стоит регистр не ecx и не edx.
Полагаю, бывалым ассемблерщикам эта ситуация ясна, но мне как новичку - нет.
Так и должно быть?
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658302
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®Выяснил, что работу существенно тормозят ассемблерные команды сравнения вида

cmp ecx, <что-нибудь>

если в них стоит регистр не ecx и не edx.
Полагаю, бывалым ассемблерщикам эта ситуация ясна, но мне как новичку - нет.
Так и должно быть?

так не должно быть, сейчас должно быть пофигу
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658312
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Команды" нынче вообще НЕ тормозят. Нет такого понятия.
Есть конвееры, есть throughtinput, есть latency, есть пенальти (например зависимость от пред. значений, неверное предсказание перехода)

Более того, есть даже Zero Time Instruction (или как-то так, т.е. иструкции выполняемые за 0 тактов прямо декодером команд).

AFAIK
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658313
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В каком смысле сейчас?
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658329
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®В каком смысле сейчас?

в смысле на твоем процессоре
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658348
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моём процессоре оно, к сожалению, есть. Причём не имеет значения, что будет 2-м аргументом CMP - память, константа, другой регистр.
Требовать замены проца? ))
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658356
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®В моём процессоре оно, к сожалению, есть. Причём не имеет значения, что будет 2-м аргументом CMP - память, константа, другой регистр.
Требовать замены проца? ))

... или попробовать переименовать регистры в программе.
Что-то другое влияет и подставляет регистры.
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658377
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что же это за процессор такой ? )))

Дело не в регистре, важно что с этим регистром происходило до этого.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658378
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Время на прогон от 4294967297 до 4294967550 169сек

Это была реклама китайского i7-3770@4GHz
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658380
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если собираетесь разбираться в производительности, ставьте Intel VTune (коммерческая цена от 800$)
он Вам и покажет, какие пенальти возникают и пр.

А так, это гадание на кофейной гуще
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658386
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglВремя на прогон от 4294967297 до 4294967550 169сек
Это была реклама китайского i7-3770@4GHz
И получено 20 раз f()=1 ?
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658403
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги. У меня предложение. Абсолютные цифры в секундах что вы постите - неинформативны для других железяк.

Предлагаю взять за 100% первый вариант автора и если вы сделали удачную оптимизацию - укажите секунды и проценты ускорения.
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658417
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще бы хорошо компилятор указывать.

У меня QT ((( у него формат inline ассемблера совсем для меня не привычный (((
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658432
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЕсли собираетесь разбираться в производительности, ставьте Intel VTune (коммерческая цена от 800$)
он Вам и покажет, какие пенальти возникают и пр.
А так, это гадание на кофейной гуще

Лирическое отступление: ваши слова, между прочим, неплохо иллюстрируют суть англосаксонской цивилизации: вещью владеешь, но полноценно воспользоваться ей просто так не сможешь, а только заплатив дополнительно. )
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658443
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЕсли собираетесь разбираться в производительности, ставьте Intel VTune (коммерческая цена от 800$)
он Вам и покажет, какие пенальти возникают и пр.
А так, это гадание на кофейной гуще

Это подлинная магия, тасование инструкции ассемблера круче гадания на картах )

maytonКоллеги. У меня предложение. Абсолютные цифры в секундах что вы постите - неинформативны для других железяк.

Предлагаю взять за 100% первый вариант автора и если вы сделали удачную оптимизацию - укажите секунды и проценты ускорения.

А нету как такового вариант автора.
Предлагаю автору запостить *полный* *ассемблерный* листинг тестируемой функции.

Я пока остановился на таком варианте
1) 14.617 сек (i5-2300@2.8) 11.809 сек (i5-3470@3.2)
20) 910.780 сек (i5-2300@2.8) 727.574 сек (i5-3470@3.2)
Код: pascal
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.
function f(a, b: pint64): boolean;
asm
  push ebx
  push ebp
  push esi
  push edi
  //d:=1;
  mov esi, 1
  xor edi, edi
  //b:=count-1;
  mov ebx, dword ptr [edx]
  mov ebp, dword ptr [edx+4]
  sub ebx, esi
  sbb ebp, edi
  mov edx, esi
  jmp @entry

@loop:
  //new d
  xor edi, ecx
  xor esi, edx
  mov edx, esi
  //test d
  cmp edx, 1
  jne @entry
  test edi, edi
  jz @false

@entry:
  shrd esi, edi, 1
  and edx, 1
  xor ecx, ecx
  sub ecx, edx
  mov edx, dword ptr[eax]
  and edx, ecx
  and ecx, dword ptr[eax+4]
  shr edi, 1
  //test b
  sub ebx, 1
  jnc @loop
  add ebp, ebx
  jge @loop

  //test d
  xor eax, eax
  xor esi, edx
  xor edi, ecx
  xor esi, 1
  or esi, edi
  setz al
  jmp @done
@false:
  xor eax, eax
@done:
  pop edi
  pop esi
  pop ebp
  pop ebx
  end;

...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39658452
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevДело не в регистре, важно что с этим регистром происходило до этого.

Вы оказались абсолютно правы. Поигрался с "кадровыми перестановками" и выяснил: "долго" сравниваются cmp регистры, участвовавшие в shrd и shr, а "быстро" - участвовавшие только в add / adc.
...
Рейтинг: 0 / 0
25 сообщений из 225, страница 6 из 9
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ассемблер - регистры MMX - команды условного перехода.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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