powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ассемблер - регистры MMX - команды условного перехода.
25 сообщений из 225, страница 2 из 9
Ассемблер - регистры MMX - команды условного перехода.
    #39654551
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot MBo]AR®Может быть, есть алгоритмические пути оптимизации?
Мне они не известны.
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39654554
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилЗачем нужен MMX регистр в x64?

В x86. Было бы в x64, не было бы разговора.
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39654822
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, вести с полей малоутешительны:
"чистый" C++ - 20 секунд
тело цикла на асм-вставке - 30 секунд
intrinsics-функции - 50 секунд.
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39654868
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опиши реальную задачу + показывай код )))
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39654870
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®ИзопропилЗачем нужен MMX регистр в x64?

В x86. Было бы в x64, не было бы разговора.
Исторически первыми появились FPU регистры. А они нужны оуенно. Об этом скажет всякий кто уважает AutoCad.
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39654897
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevОпиши реальную задачу + показывай код )))
Не буду. Задачу должен решить я. )
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39654907
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®Мне они не известны.
Вероятнее всего это из-за узости твоего кругозора. Потому и говорят тебе чтобы опубликовал задачу. У коллективного-то разума кругозор поширше будет.

AR®В x86. Было бы в x64, не было бы разговора.
А в чём проблема собрать под 64 бита?
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39654925
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА в чём проблема собрать под 64 бита?
В имеющихся студии и процессоре в компе. ) Ну и в желании иметь результат, совместимый со старым оборудованием.
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39655179
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®Leonid KudryavtsevОпиши реальную задачу + показывай код )))
Не буду. Задачу должен решить я. )
Ты хитрый и лукавый. Не будет тебе респекта.
Давай сорцы! Ставлю коньяк что тебе ассемблер не нужен.
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39655963
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton Ставлю коньяк что тебе ассемблер не нужен.
Я таки выписал свой алгоритм на ассемблерной вставке на 32 битах без использования регистров MMX.
Результат опять-таки малоутешителен: 37 секунд при прочих равных условиях.
Т.е. хуже, чем с MMX и хуже чем то, что сделал компилятор C++.

Куда за коньяком-то? :)
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39655964
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, насколько можно верить тому .asm, который остаётся рядом с .obj, если в свойствах проекта задать Assembly Output = "Assembly With Source Code (/FAs)"?
В смысле верить, что то, что там написано и будет в .exe ?
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39655967
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®Вообще, насколько можно верить тому .asm, который остаётся рядом с .obj, если в свойствах проекта задать Assembly Output = "Assembly With Source Code (/FAs)"?
В смысле верить, что то, что там написано и будет в .exe ?
Можно
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39655971
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®,

А пруфы где?
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39655973
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®,

Если компилятор породил код лучше - значит есть к чему стремиться
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39655976
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без сорцов - никакого коньяка.
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39656294
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®Dimitry SibiryakovА в чём проблема собрать под 64 бита?
В имеющихся студии и процессоре в компе. ) Ну и в желании иметь результат, совместимый со старым оборудованием.
Однако выше...
AR®Но мне ещё важна совместимость с разными компами, некоторые из них довольно старые, хотя SSE 4 есть уже на всех проверенных.
Мне не критично использование именно MMX, а нужна быстрая 64-битная арифметика (сложение-вычитание, сдвиги, and-or-xor).
Кажется, во всех процессорах, в которых есть SSE4, есть и поддержка 64 бит.
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39656330
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneКажется, во всех процессорах, в которых есть SSE4, есть и поддержка 64 бит.банально 32-битная винда, из-за принтера, например, старого
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39656661
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneКажется, во всех процессорах, в которых есть SSE4, есть и поддержка 64 бит.

Вот интересно, позволяет ли какая-нибудь студия скомпилировать 32-битное приложение, но в asm-вставках обращаться к регистрам R8-R15 (64-битным )?
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39656732
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®
Вот интересно, позволяет ли какая-нибудь студия скомпилировать 32-битное приложение, но в asm-вставках обращаться к регистрам R8-R15 (64-битным )?
большинство команд к регистрам преобрауется в один и тот же код, что в 32-битном, что 64 битном коде. Например, xor RAX,RAX и xor EAX,EAX даёт один и тот же бинарный код для своей разрядности.
Просто в одном случае они интерпретируются как 32-битные, а в другом как 64-битные

в 64-битном коде обращение к 32-битным регистрам добавляет префиксы смены разряда перед командой,обратно насколько мне известно такого префикса нет
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39656953
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®BarloneКажется, во всех процессорах, в которых есть SSE4, есть и поддержка 64 бит.

Вот интересно, позволяет ли какая-нибудь студия скомпилировать 32-битное приложение, но в asm-вставках обращаться к регистрам R8-R15 (64-битным )?
Нет.
И дело не в студии
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39657098
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилИ дело не в студии

32-битное приложение устанавливает режим процессора, делающий недоступными дополнительные регистры?

А вообще склоняюсь к мысли о безнадёжности темы.
В Intel'овском "Introduction to x64 Assembly.pdf" сказано "although it is difficult to outperform a good C++ compiler for most programmers".

Похоже, MS Visual Studio имеет вполне себе a good C++ compiler.
Вчера вечером сделал новую версию с асм-вставкой (без MMX), в которой минимизировал количество JMP'ов всех видов, но результат ещё хуже - 45 секунд вместо 37.
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39657102
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®Похоже, MS Visual Studio имеет вполне себе a good C++ compiler.
Интеловский еще лучше, тут замеряли 18108708
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39657121
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AR®32-битное приложение устанавливает режим процессора, делающий недоступными дополнительные регистры?
да
AR®В Intel'овском "Introduction to x64 Assembly.pdf" сказано "although it is difficult to outperform a good C++ compiler for most programmers".
AR®Вчера вечером сделал новую версию с асм-вставкой (без MMX), в которой минимизировал количество JMP'ов всех видов, но результат ещё хуже - 45 секунд вместо 37.
код покажи
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39657217
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме кол-ва Jump'ов они должы быть еще и "правильные". Дабы с Intel Pentium существуют достаточно простые правила для оптимизатора переходов. Т.ч. например условный jump с переходом наверх по коду и условный jump с переходом далее по коду - для процессора очень сильно отличаются. AFAIK

JMP'ы для современных процессоров уже не проблема. Тут скорее важнее, что бы арифметические операции между собой по операндам были не связаны и пенальти не получать. AFAIK

Ну и опять таки, нужно понимать, а под какой конкретно процессор ты собираешься оптимизировать. Первый Pentium от современных - все же очень сильно отличается.

IMHO & AFAIK собираешься оптимизировать Intel VTune иметь на компьютере обязательно. А уж дальше, читать про пенальти которые он тебе выдаст. Ну или выучивать пару томов Intel'овской документации с правилами оптимизаци под твой процессор

p.s.
На первых пентиумах и Pentium II, у меня в коде все время пенальти по частичному обращению к памяти лезли /обращение к байту, когда до этого по адресу записывали слово/. Банальный цикл преобразующий RGB <--> RGBA работал медленнее, чем декомпрессия JPEG'а ))) из оптимизированной Intel'ом библиотеки
...
Рейтинг: 0 / 0
Ассемблер - регистры MMX - команды условного перехода.
    #39657460
AR®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разоблачение чёрной магии.
Не спрашивайте про постановку задачи целиком. Она большая и скучная. Важна суть, а не постановка, а она - ниже.

Есть функция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
__int32 f(unsigned __int64 a, unsigned __int64 b)
{
	__int64 c = 0;
	__int64 d = 1;

	do
	{
		__int64 e = -(d & 1);
		d >>= 1;
		d ^= e & a;
		c++;
	}
	while (d != 1 && c != b);
                                                        
	return (d == 1 && c == b) ? 1 : 0;	// если выполнились одновременно оба условия, достаточных для выхода из цикла, возвращаем 1, иначе 0
}



Вот что сделал компилятор:
Код: plaintext
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.
; 202  : 	__int64 c = 0;

	xor	edx, edx
	push	esi
	push	edi
	mov	DWORD PTR _c$[ebp+4], edx

; 203  : 	__int64 d = 1;

	mov	eax, 1
	xor	ecx, ecx
$LN4@f:

; 204  : 
; 205  : 	do
; 206  : 	{
; 207  : 		__int64 e = -(d & 1);

	mov	esi, eax
	and	esi, 1
	xor	edi, edi

; 208  : 		d >>= 1;
; 209  : 		d ^= e & a;

	neg	esi
	adc	edi, edi
	and	esi, DWORD PTR _a$[ebp]
	shrd	eax, ecx, 1
	neg	edi
	and	edi, DWORD PTR _a$[ebp+4]
	sar	ecx, 1
	xor	eax, esi

; 210  : 		c++;

	mov	esi, DWORD PTR _c$[ebp+4]
	xor	ecx, edi
	add	edx, 1
	adc	esi, 0
	mov	DWORD PTR _c$[ebp+4], esi

; 211  : 	}
; 212  : 	while (d != 1 && c != b);

	cmp	eax, 1
	jne	SHORT $LN11@f
	test	ecx, ecx
	je	SHORT $LN10@f
$LN11@f:
	cmp	edx, DWORD PTR _b$[ebp]
	jne	SHORT $LN4@f
	cmp	esi, DWORD PTR _b$[ebp+4]
	jne	SHORT $LN4@f
$LN7@f:



Контрольный пример: f(4294967337, 8589934591) = 1. Это числа длиной 33 бита.
Требуется версия на ассемблере, работающая быстрее, чем скомпилированная.
...
Рейтинг: 0 / 0
25 сообщений из 225, страница 2 из 9
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ассемблер - регистры MMX - команды условного перехода.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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