User Tag List

Показано с 1 по 10 из 627

Тема: Расчёт точного времени выполнения команд различными процессорами архитектуры PDP-11.

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,248
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    Схема 1801ВМ2 уже давно восстановлена. Может пойти и посмотреть в ней.
    Там не только схема восстановлена, но восстановлены алгоритмы исполнения команд. Так что можно пойти и посмотреть. Всё начинается отсюда. Микрокод ASH(C) Rs,Rd здесь. Ну и далее.

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

    BlaireCas(08.09.2021)

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

  3. #2

    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    483
    Спасибо Благодарностей отдано 
    139
    Спасибо Благодарностей получено 
    391
    Поблагодарили
    146 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    восстановлены алгоритмы исполнения команд. Так что можно пойти и посмотреть
    Посмотрел. Но не нашел особо ничего подозрительного. И в эмуляторе допустим emustudio как-раз сделана линейная зависимость времени выполнения ash #x,R0 от значения x.
    Однако на железке время выполнения вовсе нелинейно вышло в зав-ти от того сколько раз прокрутить регистр. Причем очень интересно вышло.

    Вот такой код заполняет относительно длинный буфер:
    Код:
    mov #12345, R0
    ash #0, R0
    Запускается, замеряется время. Затем команда сдвига меняется на ash #1, R0 и т.д.
    Eсли вывести время выполнения сдвигов [0..8] и приращение к предыдущему то получится скажем такое (на 1млн таких комманд в усл.ед.)

    На emustudio все линейно как и ожидалось
    Код:
    Время	Приращение
    363	363
    388	25
    413	25
    438	25
    463	25
    488	25
    514	26
    539	25
    564	25
    На реальной УКНЦ однако иначе (суть не в том что эмустудио быстрее, а в нелинейности):
    Код:
    Время	Приращение
    511	511
    534	23
    584	50
    604	20
    634	30
    656	22
    667	11
    704	37
    730	26
    причем приращения не рандомные, повторение теста выдает точно то-же самое

  4. #3

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,248
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    Вот такой код заполняет относительно длинный буфер:
    Код:
    mov #12345, R0
    ash #0, R0
    В данном коде абсолютно не используется предвыборка, значит велико значение задержки при чтении из памяти. А чтение памяти идёт с разрешения арбитра видеоконтроллера. Попробуйте счётчик сдвига поместить в регистр R1 и для подсчета использовать только одну команду ASH R1,R0. Какие будут результаты?

  5. #4

    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    483
    Спасибо Благодарностей отдано 
    139
    Спасибо Благодарностей получено 
    391
    Поблагодарили
    146 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Попробуйте счётчик сдвига поместить в регистр R1 и для подсчета использовать только одну команду ASH R1,R0.
    Агааа.. Попробовал навроде такого:
    Код:
    mov	#X, R1
    clr	R0
    ash	R1, R0
    ash	R1, R0
    ash	R1, R0
    ... много раз ...
    ash	R1, R0
    return
    Вот теперь зависимость от количества сдвигов линейная. Времена выполнения стали навроде 600,700,800,900..

    Меняя буфер на ash #X, R0(много раз) получается нелинейность (с чего я и начал собственно).
    Так это что-ж такое? Процессор пока выполнял ash R1,R0 успел предвыбрать следующее за ней слово (поскольку инструкция ровно в слово лезет)?
    А если след. инструкция в слово не влезла (ash #X, R0) - то он не делает предвыборку и начинается какое-то ожидание? (причем не пойми точно какое).

  6. #5

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,248
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    Так это что-ж такое? Процессор пока выполнял ash R1,R0 успел предвыбрать следующее за ней слово (поскольку инструкция ровно в слово лезет)?
    А если след. инструкция в слово не влезла (ash #X, R0) - то он не делает предвыборку и начинается какое-то ожидание? (причем не пойми точно какое).
    Оно самое. Если предвыборка нарушается, следующее слово многословной команды может быть прочитано из регистра инструкций, либо заново из памяти. Почитайте тему про 1801ВМ2, посмотрите алгоритмы выполнения различных способов адресации, узнаете много нового.

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

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

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

Похожие темы

  1. Ответов: 234
    Последнее: 26.02.2021, 11:05
  2. Время выполнения команд CPI/CPD/CPIR/CPDR
    от ARTi в разделе Программирование
    Ответов: 27
    Последнее: 18.12.2007, 16:32

Ваши права

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