169 похожих чатов

Итак, сравниваем 17 инструкций и 5 инструкций. О боже, что

же будет быстрее??

28 ответов

3 просмотра

Однажды асмофанатики сравнят две программы (асм и си) с большим количеством функционала, но пока сравнивают только хеллоу ворды, так как программу с большим количеством функционала асмофанатики ещё не написали

КТ315- Автор вопроса
КТ315
Ладно, ты меня уговорил. @yakha_chakva - 7.

Опять аргументы кончились.

КТ315- Автор вопроса
s54820
Опять аргументы кончились.

Нет, он просто мне 17 сообщений понаписал, пока я спал. С провокациями.

КТ315- Автор вопроса
s54820
Опять аргументы кончились.

Ха, прикольно. xadd медленнее. Намного...

КТ315
screenshot Ха, прикольно. xadd медленнее. Намного...

Я предполагал, что каждая xadd будет друг друга ждать, но по идее должно было уравновесить те несколько инструкций от компилятора.

КТ315- Автор вопроса
s54820
Я предполагал, что каждая xadd будет друг друга жд...

Гермес ещё у себя проверит, у него нет Invariant TSC.

КТ315
Гермес ещё у себя проверит, у него нет Invariant T...

Так чего тебе инвариант, ты же не такты считаешь.

КТ315- Автор вопроса
s54820
Так чего тебе инвариант, ты же не такты считаешь.

Ну, да, но в любом случае, интересно как у Гермеса будет. У него, к примеру, movsb и ручной цикл были одинаковы по скорости, а у меня ручной был быстрее. У него на процессоре как будто старые инструкции более оптимизированы.

КТ315
Ну, да, но в любом случае, интересно как у Гермеса...

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

КТ315
screenshot Ха, прикольно. xadd медленнее. Намного...

Мне clang вот такой код выдал на фибоначчи fib(int): test edi, edi js .LBB0_1 lea esi, [rdi + 1] mov ecx, esi and ecx, 7 cmp edi, 7 jae .LBB0_7 mov eax, 1 xor edx, edx jmp .LBB0_4 .LBB0_1: mov eax, 1 ret .LBB0_7: and esi, -8 mov eax, 1 xor edx, edx .LBB0_8: add edx, eax add eax, edx add edx, eax add eax, edx add edx, eax add eax, edx add edx, eax add eax, edx add esi, -8 jne .LBB0_8 .LBB0_4: test ecx, ecx je .LBB0_6 .LBB0_5: mov esi, eax mov eax, edx add eax, esi dec ecx mov edx, esi jne .LBB0_5 .LBB0_6: ret Можешь сравнить с кодом от gcc? Интересно стало, что быстрее

КТ315- Автор вопроса
КТ315
screenshot

Да разница меньше 10%

КТ315- Автор вопроса
КТ315- Автор вопроса
The Bird of Hermes
Да разница меньше 10%

Надо написать вариант без xadd, но чтобы не сохранять регистры вообще. Тогда обязательно получится обогнать любой срампилятор.

КТ315
На 5 тиков))

Мне кажется на фоне того, как код разрастается, это несущественно

КТ315
screenshot

Так ты их и так не сохраняешь)

КТ315- Автор вопроса
КТ315- Автор вопроса
Joshua Jakowlew
Мне clang вот такой код выдал на фибоначчи fib(int...

Стоп, нечестно!! Не обогнал, не считается. Ты скинул код с соглашением x64, используешь аргумент из EDI, и EDI не сохраняешь. А внутри ещё ESI используется. Минимум 2 push/pop надо ))

КТ315
Стоп, нечестно!! Не обогнал, не считается. Ты скин...

Я выдал то, что мне выдал компиль. Можешь поиграться https://godbolt.org/z/K9791h464

КТ315- Автор вопроса
Joshua Jakowlew
Я выдал то, что мне выдал компиль. Можешь поиграть...

Так m32 добавлять надо, флагов что-ли не знаешь..

КТ315
Так m32 добавлять надо, флагов что-ли не знаешь..

А ты 32 битную сборку хочешь что ли делать?

КТ315- Автор вопроса
The Bird of Hermes
А ну попробуй их добавить

С m32 всё равно побыстрее. Он обыграл, не использует EDI, только ESI сохранил.

КТ315
Ладно, ты меня уговорил. @yakha_chakva - 7.

ну что и следовало ожидать, всё как высказывал вчера - сарказм и нелепые ответы заканчиваются и приходит мут неугодных

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта