Мікаель
Всем привет. Какой стратегии (с точки зрения энергоэффективности) лучше придерживаться при обработке кванта задачи? 1) Отработать горячо (на высокой частоте) но быстро. 2) Отработать медленно (на низкой частоте) но дольше.
Мікаель
Можно, конечно, перестраивать частоту по ситуации, однако таких ситуаций много у меня насобиралось; приходится писать много дополнительного кода, перестраивающий код других блоков, зависящих от базовой частоты (менять прескейлеры, например).
електр🟢нік ✙🟠рчбеч ඞ
на низкой конечно
Мікаель
на низкой конечно
А почему? Например, задача требует 1млн тактов. На частоте 1мгц мы отработаем 1сек на мощности 1вт. А на частоте 2 мгц мы отработаем 0.5сек на мощности 2вт. Энергорасход одинаков.
електр🟢нік ✙🟠рчбеч ඞ
частота возросла вдвое, а потребление в 10
Мікаель
частота возросла вдвое, а потребление в 10
Понятно. У меня в даташите ничего про нелинейность не сказано. Там лишь параметр мкА/МГц. То есть типа линейный.
Мікаель
електр🟢нік ✙🟠рчбеч ඞ
все равно рекомендую частоту пониже
Мікаель
все равно рекомендую частоту пониже
Я всё-же склоняюсь к более высокой частоте из-за других немаловажных факторов. Например, может возникнуть задача требующая высокого быстродействия (вывод на дисплей, например). При увеличении частоты — также придётся и другие функциональные блоки перестраивать для работы в прежнем темпе на фоне увеличившейся частоты. При этом хорошо, если эти функциональные блоки позволяют перестроить себя безаварийно. Иначе бы их тоже придётся сначала корректно останавливать, перестраивать, запускать.. Всё это дополнительный код и усложнение.
Anonymous
Зависит .init .fini или .init_array .fini_array или .ini .fini .ctors .dtors от типа линковки (статичный или динамичный бинарник) ? То есть только динамичный поддерживает эти секции или оба ? в e_entry указывается .init code или .text _start?
Leon
Понятно. У меня в даташите ничего про нелинейность не сказано. Там лишь параметр мкА/МГц. То есть типа линейный.
Ну так это оно и есть. Мощность это сила тока в квадрате помножить на сопротивленте. Увеличиваеш вмперы в 2 раза, мощность вырастет в 4.
Anonymous
Кто то пользуется gef-gdb?
Anonymous
Как отключить этот плагин во время работы gdb?
Eugene
.code invoke GetDayOfYear mov DayNumber,al NextDay: inc byte [DayNumber] jnz .simple_day call Day256 .simple_day: invoke SetProgrammingState, TRUE hlt ; wait for end of day invoke SetProgrammingState, FALSE push eax invoke Sleep, 8*3600*1000 jmp NextDay Day256: invoke KillBear invoke DrinkBeer invoke ScreamOutLoud, ProgrammersDayMsg ret ; Hardware interrupt handler NewYearInterruptHandler: mov byte [DayNumber],0 iret StackOverflowExceptionHandler: invoke Die in al,70h or al,80h out 70h,al ; disable NMI cli jmp $ .data ProgrammersDayMsg: db 'Программисты всех стран, соединяйтесь!',0 DayNumber: db ?
Дмитрий
Ошибок много в программе... В byte 365 точно не поместится... Нужен word... И вместо add byte [DayNumber], 1 проще использовать inc [DayNumber]
Eugene
Ошибок много в программе... В byte 365 точно не поместится... Нужен word... И вместо add byte [DayNumber], 1 проще использовать inc [DayNumber]
word не нужен, т.к. подразумевается прерывание NewYear (а т.к. 365 < 512, то два раза за год не сработает) :) inc не меняет флага CF, поэтому именно add.
Eugene
Но вообще, можно было inc + jnz сделать, конечно :)
Дмитрий
Все равно не пойму, насчет прерывания тогда... 365 < 512, то два раза за год не сработает. В смысле байт 512 может хранить?
Дмитрий
И зачем убивать медведя? Пусть живет... 😁
Eugene
Все равно не пойму, насчет прерывания тогда... 365 < 512, то два раза за год не сработает. В смысле байт 512 может хранить?
1 января мы с друзьями ходим в баню срабатывает прерывание и сбрасывает счётчик дней в ноль. Поэтому перенос (CF=1) сработает 1 раз в год на 256-й день.
Дмитрий
Ну на день программиста сработает...
Дмитрий
А следующий раз сработает хз когда...
Eugene
На следующий год в день программиста. 1 января 2020: DayNumber = 0 2 января 2020: DayNumber = 1 11 сентября 2020: DayNumber = 255 12 сентября 2020: DayNumber = 0 (медведь, пиво, вопли). 13 сентября 2020: DayNumber = 1 31 декабря 2020: DayNumber = 110 1 января 2021: сработало NewYearInterrupt, DayNumber = 0 2 января 2021: DayNumber = 1 12 сентября 2021: DayNumber = 255 13 сентября 2021: DayNumber = 0 (медведь, пиво, вопли). 14 сентября 2021: DayNumber = 1 31 декабря 2021: DayNumber = 109 1 января 2022: сработало NewYearInterrupt, DayNumber = 0 ...
Дмитрий
Ну и так как программа может быть запущена не 1 января, неплохо добавить в начало invoke GetDay mov DayNumber, eax
Eugene
Ну и так как программа может быть запущена не 1 января, неплохо добавить в начало invoke GetDay mov DayNumber, eax
Тут согласен :) Подразумевается, что прога запущена в день рождения программиста.
Eugene
Поправил :)
Eugene
И заменил на inc/jnz
Дмитрий
А как сюда попадает? NewYearInterruptHandler: mov byte [DayNumber],0 iret
Eugene
Хардварное прерывание.
Дмитрий
И push eax, перед слипом зачем?
Eugene
Чтобы сохранить результат работы во Вселенной. Собственно, из-за этого стек и переполняется.
Дмитрий
А... Ясно тогда
Eugene
Всё, я спать...
Anonymous
Доброго времени суток! в elf если удалить shdr ,то elf nopie будет загружаться также без неё,но если файл является pie static ,и у него нету shdr ,он тоже будет загружаться в память по любому адресу? Я прочитал все возможные статьи понял ,что если удалить shdr ,то elf pie static не сможет загрузиться по любому адресу ,так как загрузчик не будет знать где располагается .symtab .strtab .rel.[name] .got .plt Сегменты это контейнеры которые содержат в себе секции или это vma которые содержат секции,где секции это единица данных в терминологии elf Но если мы не знаем где в сегментах располагается sections ,мы не сможем загрузить Я прав? Как загрузчик загружает pie по любому адресу (если он загружает) не имея таблицу секций?
Anonymous
./checksec.sh --file main RELRO STACK CANARY NX PIE RPATH RUNPATH FILE No RELRO No canary found NX enabled PIE enabled No RPATH No RUNPATH main 00000000000010a0 <free@plt>: 10a0: f3 0f 1e fa endbr64 10a4: f2 ff 25 d5 22 00 00 bnd jmp QWORD PTR [rip+0x22d5] # 3380 <free@GLIBC_2.2.5> 10ab: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0] это программа скомпилированна как pie dynamic.Вопрос почему здесь нету вот так: 000003a0 <ml_util_func@plt>: 3a0: ff a3 14 00 00 00 jmp DWORD PTR [ebx+0x14] 3a6: 68 10 00 00 00 push 0x10 3ab: e9 c0 ff ff ff jmp 370 <_init+0x30> почему этот испольняемый файл main,у него нету ленивого связывания хотя RELRO отключен .got.plt содержит все адреса уже заранее то есть динамический компоновщик их не разрешает
Anonymous
В 64 битном режиме сколько весит cs?
Anonymous
Какого размера класть cs в стек при возврате из ring0 ret to ring3?
Aiwan \ (•◡•) / _bot
cs - 16 бит
Anonymous
cs - 16 бит
Но есть такая инструкция mov eax,cs
Aiwan \ (•◡•) / _bot
Eugene
Она очищает старшее слово, насколько я помню, но надо смотреть Intel SDM.
Anonymous
Eugene
Anonymous
Это как?
загрузка модуля ядра и перезапись таблицы прерываний
Eugene
А, я подумал, что это в винде. Вообще, когда в 64-х битах делаешь retf, из стека извлекается 2 qword'а (2*8 байт). Когда делаешь iret, то соответственно 3 qword'а (3*8 байт). В 32-х битах, соответственно, dword'ы (по 4 байта).
Eugene
А вот по поводу mov eax,cs или mov rax,cx.
Eugene
Но где-то я видел, что то ли на старых процессорах, то ли ещё где-то старшая часть может не обнуляться. Где-то выше, кажется, обсуждалось это.
Eugene
Вот: https://t.me/proasm/46470 До Pentium 4. Ты даже участвовал в этом обсуждении :) @pr4gasm
Anonymous
(:
JeisonWi
Не совсем ассемблер, но близко - существует такая вещь как Sphinx C-- - нечто среднее между ассемблером и Си. Он используется для некоторых программ в KolibriOS. Поскольку проект заброшен, я его немного почистил, сделал компиляцию под основные платформы и настроил CI
JeisonWi
https://github.com/XVilka/cminusminus
JeisonWi
Пулл-реквесты - welcome
FailsBot
ReactOS Created vs Resolved Report
Leon
ReactOS Created vs Resolved Report
Откуда скачки?
Eugene
Что такое Fast Short REP MOV (FSRM)? В чём его отличие от Enhanced REP MOVSB/STOSB (ERMSB)?
Ned
*начинался октябрь, и с ним пришёл практикум по ассемблеру....*
Anonymous
Ребят,вопрос,что такое float absolute ? fabs? Это когда берется float или double по модулю ?
Eugene
Ребят,вопрос,что такое float absolute ? fabs? Это когда берется float или double по модулю ?
В стеке FPU числа хранятся в формате, заданным контрольным словом FCW (по умолчанию tbyte), поэтому float это будет, double или long double зависит от этого значения. fabs удаляет знак числа в st(0).
Eugene
Про arm не скажу. Я думаю, это несложно найти в доках.
Anonymous
Про arm не скажу. Я думаю, это несложно найти в доках.
Да я нашел ,просто интересно реализация
Aiwan \ (•◡•) / _bot
я не сказал про арх , arm64
обнули старший бит числа через битовую операцию и будет тебе щазтие
Anonymous
Ребят,что такое min() ,max() ? Arm64 (:
Anonymous
Функции на c
Ага понял,странно ,зачем их придумали если есть fcmp fccmp
JeisonWi
https://twitter.com/filipe_mulonde/status/1314475293214748673?s=19
Aiwan \ (•◡•) / _bot
https://twitter.com/filipe_mulonde/status/1314475293214748673?s=19
а что на других страницах?
Aiwan \ (•◡•) / _bot
еще можно добавить shl rax,64 и тому подобное