Важная информация

User Tag List

Страница 2 из 8 ПерваяПервая 123456 ... ПоследняяПоследняя
Показано с 11 по 20 из 75

Тема: SwapSet

  1. #11

    Регистрация
    31.03.2005
    Адрес
    Новосибирская область
    Сообщений
    128
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    но текущий hl - портится для варианта с сохранением флагов.
    Поэтому я пожертвовал ix для чистой записи состояния в сет.
    Можно еще расширить вариант и записывать вторые наборы ex af, af'/exx
    но это добавит тактов соответственно
    Последний раз редактировалось jim; 07.09.2025 в 17:35.

  2. #12

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    556
    Спасибо Благодарностей отдано 
    187
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    100 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jim Посмотреть сообщение
    Поэтому я пожертвовал ix для чистой записи состояния в сет.
    ну в моём случае это решается просто:

    push hl
    call слот.sv
    pop hl

    Цитата Сообщение от jim Посмотреть сообщение
    Можно еще расширить вариант и записывать вторые наборы ex af, af'/exx
    но это добавит тактов соответственно
    Оно даже этот вариант редко кому нужен, другие уж точно исключительно по необходимости.

  3. #13

    Регистрация
    31.03.2005
    Адрес
    Новосибирская область
    Сообщений
    128
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Согласен что редко ) Но имеет право быть. Просто попробовать писать в таком стиле и применение найдется.
    Заманчиво иметь неограниченное количество регистров ))
    К примеру:
    Имеем N экземпляров объектов которые нужно изменять на протяжении времени
    Основной цикл
    {
    set1 ; состояние 1
    ; какие то изменения
    ...
    setN ; состояние N
    ; аналогично
    }
    Последний раз редактировалось jim; 07.09.2025 в 17:55.

  4. #14

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jim Посмотреть сообщение
    речь не о многозадачности.
    а о чём же? вот ЗАЧЕМ еще такое может понадобиться, чего нельзя проще сделать другими способами?

    Цитата Сообщение от jim Посмотреть сообщение
    всего лишь структурирование кода меньше очевидных push/pop (код чище)
    с чего меньше? сохранение контекста почти всегда мб нужно только в обработчике прерывания, который обычно всего один
    с чего чище? лишний call (+ это кстати лишнее пространство на стеке)

    Цитата Сообщение от jim Посмотреть сообщение
    и абстракция расширения основных наборов регистров,
    полная бессмыслица, начиная с "расширения набора регистров" программным способом
    смысл регистра как раз в том, что это "сверхоперативная", то есть самая БЫСТРАЯ область памяти
    а тут медленное сохранение/восстановление всех подряд да еще ix пожертвовать предлагается
    то есть выйдет сокращение набора фактически

    Цитата Сообщение от jim Посмотреть сообщение
    вызов функций использующих свой собственный контекст. общий стек для всех наборов виртуальных регистров позволяет пересылать данные между сетами.
    к примеру изменили регистры в сете, переключились на новый, про первый можно забыть и не держать регистры на стеке до вызова процедуры использующей эти регистры, вызвали сет в любом месте программы по надобности.
    без многозадачности (реентрабельности) всегда проще сразу с переменными работать, а не со стеком
    да еще значительно эффективней - только с теми, которые действительно применяются
    Прихожу без разрешения, сею смерть и разрушение...

  5. #15

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    556
    Спасибо Благодарностей отдано 
    187
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    100 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jim Посмотреть сообщение
    Заманчиво иметь неограниченное количество регистров ))
    Заманчиво, но нереально - свапинг их не добавляет а всего лишь переключает, причем медленно. Увы... (

    Цитата Сообщение от jim Посмотреть сообщение
    Имеем N экземпляров объектов которые нужно изменять на протяжении времени
    Основной цикл
    {
    set1 ; состояние 1
    ; какие то изменения
    ...
    setN ; состояние N
    ; аналогично
    }
    Ну х.з. состояние такого 'обьекта' должно уложиться в эти несчастные 7 регистров, иначе ещё и стек надо для каждого обьекта свой. Тогда и правда либо многозадачность вертеть, либо как сказал Lethargeek сохраняться в переменных.
    В принципе, возможность имеет быть, а целесообразность может подтвердить или опровергнуть только практика.
    p.s. Я таки оказывается еще ошибся со смещениями - совсем голова не варит, вай-вай-вай

    Этот пользователь поблагодарил Dart Alver за это полезное сообщение:

    jim(07.09.2025)

  6. #16

    Регистрация
    31.03.2005
    Адрес
    Новосибирская область
    Сообщений
    128
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    а о чём же? вот ЗАЧЕМ еще такое может понадобиться, чего нельзя проще сделать другими способами?
    Например сместить уровень абстракций от регистров к окнам контекстов функций.
    Это автоматически не означает многозадачность или параллельную обработку. Это гибкость кода. Для кого то возможно это великий грех.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    с чего меньше? сохранение контекста почти всегда мб нужно только в обработчике прерывания, который обычно всего один
    с чего чище? лишний call (+ это кстати лишнее пространство на стеке)
    Не согласен что только в обработчике. В кооперативной многозадачности например.
    И я не отказываюсь от стека он доступен всем сетам как родной. Можно PUSH в одном сете и POP в другом или том же.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    полная бессмыслица, начиная с "расширения набора регистров" программным способом
    смысл регистра как раз в том, что это "сверхоперативная", то есть самая БЫСТРАЯ область памяти
    а тут медленное сохранение/восстановление всех подряд да еще ix пожертвовать предлагается
    то есть выйдет сокращение набора фактически
    Смысл регистра в том что это быстрая ячейка памяти. Абстракция расширения медленная при переключении, дальше это те же самые быстрые регистры.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    без многозадачности (реентрабельности) всегда проще сразу с переменными работать, а не со стеком
    да еще значительно эффективней - только с теми, которые действительно применяются
    Сохранение загрузка переменных это то же нетривиальная задача. Ты не работаешь с переменными напрямую в памяти, для начала они грузятся в регистры. Мой вариант с sp сокращает время операций и при этом это не полноценный стек push/pop (а сохранил, загрузил другой набор, поработал, вернулся к первому или можно вообще забыть о нем)

    - - - Добавлено - - -

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    Ну х.з. состояние такого 'обьекта' должно уложиться в эти несчастные 7 регистров, иначе ещё и стек надо для каждого обьекта свой. Тогда и правда либо многозадачность вертеть, либо как сказал Lethargeek сохраняться в переменных.
    Ну тут свобода, никто не мешает хранить в регистрах сета указатель на структуры данных и работать с ними как с обычными переменными.
    Последний раз редактировалось jim; 07.09.2025 в 22:33.
    Like a bright light on the ХORIZON
    Shining so bright, he'll get you flying

  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #17

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jim Посмотреть сообщение
    Например сместить уровень абстракций от регистров к окнам контекстов функций.
    переменные абстрактнее и удобнее
    и зачем нужны "контекстов" без реентрабельности?

    Цитата Сообщение от jim Посмотреть сообщение
    Это автоматически не означает многозадачность или параллельную обработку. Это гибкость кода.
    что такое "гибкость кода"? в чём измеряется?

    Цитата Сообщение от jim Посмотреть сообщение
    Не согласен что только в обработчике. В кооперативной многозадачности например.
    ...которая на спеке реализуется, ВНЕЗАПНО, через обработчик
    в чём новизна-то? в лишних call в теле обработчика?

    Цитата Сообщение от jim Посмотреть сообщение
    Смысл регистра в том что это быстрая ячейка памяти. Абстракция расширения медленная при переключении, дальше это те же самые быстрые регистры.
    то есть в сумме - медленное решение

    Цитата Сообщение от jim Посмотреть сообщение
    Сохранение загрузка переменных это то же нетривиальная задача.
    ШТА

    Цитата Сообщение от jim Посмотреть сообщение
    Ты не работаешь с переменными напрямую в памяти, для начала они грузятся в регистры
    да, и что? притом с теми лишь, которые мне нужны

    Цитата Сообщение от jim Посмотреть сообщение
    Мой вариант с sp сокращает время операций
    для начала - добавляет лишние операции (ибо функция необязательно использует все регистры) + замедляет их еще манипуляциями с sp

    Цитата Сообщение от jim Посмотреть сообщение
    и при этом это не полноценный стек push/pop (а сохранил, загрузил другой набор, поработал, вернулся к первому или можно вообще забыть о нем)
    то есть медленно, а результаты всё равно потом распихивать в переменные

    - - - Добавлено - - -

    Цитата Сообщение от jim Посмотреть сообщение
    Согласен со всеми пунктами.
    Короткий ответ, я так хочу )
    поздно
    Прихожу без разрешения, сею смерть и разрушение...

  9. #18

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jim Посмотреть сообщение
    Сохранение всего сета регистров — сознательное решение.
    Суть не в экономии регистров или минимизации тактов, а в свободе работы с данными.
    Каждый решает сам, использовать мой подход или нет — он предоставляет свободу и гибкость, но не навязывает себя.
    макрос предоставит больше свободы с гибкостью и без отказа от минимизации/экономии
    Прихожу без разрешения, сею смерть и разрушение...

  10. #19

    Регистрация
    31.03.2005
    Адрес
    Новосибирская область
    Сообщений
    128
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Swapset - это высокоуровневый подход облегчающий работу с контекстными окнами (отдельными программами), его целью не является оптимизация по скорости.
    Для переключения контекстов программ абсолютно не нужен планировщик или организация прерываний с TCB, и даже не задействован стек.
    Это именно свобода выбора между ролями процессора в любой момент времени. Свобода забыть и вспомнить о главном цикле, или временно заняться другой задачей. Можно вообще не писать подпрограммы (call/ret) так как каждый сет регистров это новое пространство (как отдельный код запущенный в своем окне).
    Здесь нет параллельных вычислений и фонового выполнения как в вытесняющей многозадачности.
    Есть возможность запуска любой задачи, независимо от места программы, и возврата при необходимости.
    А основная фишка, то, что в любой контекст можно вернуться простым переключением.
    Последний раз редактировалось jim; 11.09.2025 в 22:44.
    Like a bright light on the ХORIZON
    Shining so bright, he'll get you flying

  11. #20

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jim Посмотреть сообщение
    Swapset - это высокоуровневый подход облегчающий работу с контекстными окнами (отдельными программами), его целью не является оптимизация по скорости.
    НИЗКОуровневый - ибо ну куда уж ниже простого асма-то
    а вот чуть ВЫШЕ уровнем - будет макрос (это намёк))
    переменные - также более высокий уровень, чем регистры

    Цитата Сообщение от jim Посмотреть сообщение
    ля переключения контекстов программ абсолютно не нужен планировщик или организация прерываний с TCB, и даже не задействован стек.
    ну и зачем нужно "переключение контекстов программ" без "организации прерываний"?
    если (под)программа не прерывалась, то она работу закончила и результаты из регистров сохранены

    Цитата Сообщение от jim Посмотреть сообщение
    Это именно свобода выбора между ролями процессора в любой момент времени. Свобода забыть и вспомнить о главном цикле, или временно заняться другой задачей. Можно вообще не писать подпрограммы (call/ret) так как каждый сет регистров это новое пространство (как отдельный код запущенный в своем окне).
    Здесь нет параллельных вычислений и фонового выполнения как в вытесняющей многозадачности.
    Есть возможность запуска любой задачи, независимо от места программы, и возврата при необходимости.
    А основная фишка, то, что в любой контекст можно вернуться простым переключением.
    словоблудие бессмысленное какое-то приведи КОНКРЕТНЫЕ сценарии применения!
    вот чисто технически для начала - каким образом ты без прерываний (!) собрался запускать (а также возвращаться) с любого (!) места?
    Прихожу без разрешения, сею смерть и разрушение...

    Этот пользователь поблагодарил Lethargeek за это полезное сообщение:

    null_device(16.09.2025)

Страница 2 из 8 ПерваяПервая 123456 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •