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

Есть программа использующая новые функции процессора, но я знаю, что

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

28 ответов

44 просмотра

Есть проверки на версию микроархитектуры

мдэ а в чом проблема юзать cpuid и читать флаги, а потом уже переключаться между сетом инструкций внутри программы. Я вообще отказался от процедур в большинстве случаев и пишу макросами, написал нужную мне математику на SSE отдельно от AVX и отдельно вообще только FPU

Alex
Есть проверки на версию микроархитектуры

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

Арч-чан 🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀
Я это знаю, но у меня проблема в том, что я тупой....

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

Арч-чан 🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀
Я это знаю, но у меня проблема в том, что я тупой....

if 386 then .... if 14900k then .... итого ты пишешь несколько версий кода для разных версий проца в одной программе

Арч-чан 🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀🢀
Я это знаю, но у меня проблема в том, что я тупой....

Ну сделай что-нибудь типа: func: jmp [func_impl] func_detect: <detect> jz .slow .fast: mov [func_impl],func_fast jmp func .slow mov [func_impl],func_slow jmp func func_impl dd func_detect Можно ещё быстрее, если положить func_fast сразу после джампа в func и забивать джамп нопами в случае чего.

Alex
Делается несколько версий процедуры. Перед вызовом...

Также можно записывать новый код для процедур на лету. Ещё немного, и получится подобие JIT.

smt model 1
Также можно записывать новый код для процедур на л...

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

Aiwan \ (•◡•) / _bot
тоесть, этот новый код уже должен в программе имет...

Можно и так. Но тогда надо патчить вызов процедуры, инструкцию call <адрес>.

smt model 1
Можно и так. Но тогда надо патчить вызов процедуры...

не надо. cpuid решит проблему по какой ветке пойдет выполняться код, имхо

Aiwan \ (•◡•) / _bot
не надо. cpuid решит проблему по какой ветке пойде...

Да, но разве сначала пропатчить нужный код, а потом его не трогать во время выполнения не получится быстрее и удобнее, чем хранить адрес нужной процедуры и каждый раз бранчить?

smt model 1
Да, но разве сначала пропатчить нужный код, а пото...

чел выше сказал что "Перекомпилировать не особо хороший вариант." значит у него есть исходник. если есть исходник, тот зачем весь этот гемор с патчем, когда можно все написать 1 раз и навсегда?

smt model 1
Можно и так. Но тогда надо патчить вызов процедуры...

Это вообще наилучший вариант. Вот только там есть проблема с хвостовыми вызовами, их не отследить нормально.

Стикер

Есть программа

Aiwan \ (•◡•) / _bot
чел выше сказал что "Перекомпилировать не особо хо...

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

smt model 1
Каждый раз иметь ветвление или читать адрес из пос...

если уж совсем в крайности податься, то это "каждый раз" может случиться лишь 1 раз. это много?

Aiwan \ (•◡•) / _bot
меня за 20 минут уже 2 или 3 ввели в заблуждение

Нет, ну если ещё честнее, то это модульная "идея", которая будет компилироваться как операционка и как программа, в основном там не будет асаемблер, но он нужен для функции которым необходима скорость.

Aiwan \ (•◡•) / _bot
если уж совсем в крайности податься, то это "кажды...

Вот человек пишет, что это для критичных к скорости участков кода. Если в скорости нет смысла, то можно и не париться с различными версиями кода. А ускорять можно например по моему предложению.

smt model 1
Вот человек пишет, что это для критичных к скорост...

Там вся программа критична к скорости, просто имет смысл писать большую часть кода на С с -O3.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта