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

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

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

28 ответов

32 просмотра

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

мдэ а в чом проблема юзать 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.

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

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

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Народ, кто шарит в расширенных разделах (EBR/EPR) на дисках с разметками MBR? Везде пишут (в вики рус/англ) в частности + другие источники смотрел, что первый сектор расширенн...
Eugene Krasnikov (ᴊɪɴ x)
1
помогите решить вопрос ктото решал это?
Михаил Helper
9
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Карта сайта