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

User Tag List

Страница 7 из 14 ПерваяПервая ... 34567891011 ... ПоследняяПоследняя
Показано с 61 по 70 из 133

Тема: Ядро с 32 битами и виртуализацией

  1. #61
    Master
    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от blackmirror Посмотреть сообщение
    Нужно соблюдать баланс между возможностями аппаратуры и удобством программирования, последнее очень важный фактор для успеха любой архитектуры.
    Я не про то, не про удобство программирования.

    Можно нафантазировать любую систему команд, которая сможет считать вдоль, поперёк, а ещё по диагонали и стоя в гамаке Потом так же тупо "в лоб" описать это на HDL, не думая что там получится в "железе". А получится там 5000 cell-ов и частота 30 МГц.
    А можно, увидев такое непотребство, как-то переделать, что-то выкинуть, что-то добавить, и получить 1000 cell-ов и 100 МГц.

    И дело не столько в характеристиках, сколько вот в этой... неупорядоченности, что ли. Да тот же Z80. Номер регистра берётся и из битов 0..2, и из битов 3..5, и от префиксов зависит, и исключения из нумерации, и младший бит отбрасывается, и чего там только нет. По флагам картина такая же. Кто сможет коротко описать как меняются флаги Z80, даже документированные? Это играйте, это не играйте, а здесь рыбу заворачивали. Давайте напишем case на 100 строк, синтезатор разберётся.

    Поэтому я против аппаратных циклов. Они очень усложняют то, что уже есть. Дожать один такт, создав себе кучу проблем, и потом героически их решать? Нет, я сначала сделаю как могу, хоть 10 тактов на эту djnz, потом буду думать как ускорить.

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

    Цитата Сообщение от andrews Посмотреть сообщение
    а ядро сейчас в виде эмулятора или уже на fpga?
    В виде эмулятора, с некоторыми допущениями, кое-что написано именно как программа, не как эмулятор. Эмуляция эмуляции не знаю как объяснить.

    В FPGA только прикидываю отдельные блоки, сколько займут места и на какой частоте смогут работать.

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

    2 килобайта это тот самый микрокод, который для внутреннего ядра.

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

  3. #62
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,591
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    285
    Спасибо Благодарностей получено 
    238
    Поблагодарили
    187 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от andrews Посмотреть сообщение
    какой именно? 1-й, 4-й, 11-й.
    да практически любой, кроме микроконтроллеров-обрезков, лишь бы скорости хватило (с arm7* примерно?)

    Цитата Сообщение от andrews Посмотреть сообщение
    И разве разработчиков этих ядер волновала возможность реализации на них z80 и Spectrum-ов. Любое ненужное излишество это вентили, вентили, вентили.
    а какая разница, что их волновало и сколько вентилей? нас должна цена с доступностью волновать
    Прихожу без разрешения, сею смерть и разрушение...

  4. #63
    Member
    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Про банки памяти и чтение элементов массива с некоторым шагом...

    Допустим разрядность элемента массива равна разрядности слова банка, каждый банк имеет отдельную шину адреса и данных. Если мы поделим память на 4 банка и конкретный банк будут выбирать 2 младших бита адреса, то нет никаких проблем прочитать 4 подряд идущих элемента, начиная с любого банка. Если шаг между элементами будет кратен 2, к примеру в массиве лежат двумерные координаты, а обновить нам требуется только X, половина банков у нас будет простаивать, а другая трудиться в два раза дольше. Если в массиве лежат трёхмерные координаты, то обновить X можно без проблем задействуя все 4 банка, да и вообще проблем не будет со структурами из нечётного числа слов. А вот когда структура станет кратна 4м словам, то при обновлении X трудиться придётся одному банку, пока другие будут простаивать.

    Решений здесь существует несколько:
    1) Растащить поля структуры по отдельным массивам, в структуру поместить адреса этих массивов, чтобы по индексу можно было собрать нужную структуру из разных массивов.
    2) Дополнить структуру до нечётного числа слов, что несколько затратно по памяти для мелких структур.
    3) Самый интересный вариант - сделать больше банков, сохранив в целях совместимости количество шин.

    Для последнего варианта можно поделить каждый банк на 5 более мелких(всего 20 банков), и добавить 5 ортогональных шин. Если младший бит шага между элементами нечётный, запросы идут по 4м шинам как обычно, а если чётный, значит их нужно перенаправить на ортогональные шины. Здесь правда возникает проблема, если шаг будет кратен и тому и другому, к примеру 10 или 20. В этом случае придётся вернуться ко 2 варианту, но затраты памяти здесь уже будут 10% или 5%, а не 50% как в случае структур из двух слов. Можно рассмотреть и схемы разбиения 8x9 или 16x17, но для них всех нужен быстрый алгоритм вычисления остатка при делении на числа вида 2^n+1, у кого какие соображения по этому поводу? Скорее всего это будет что-то типа признака делимости на 11 для десятичной системы, но насколько сложная схема получится для железа?

    Есть еще вариант вычислить от адреса CRC, после чего делить его на номер банка и номер ячейки в нём, здесь конфликты будут возникать для любого шага, но в теории они они должны быть равномерны по всем банкам и очередь может помочь с ними справиться. Опять же вопрос насколько сложно это будет для железа?

    PS: В общем мысль про CRC пришла к выводу, что имеея 2^n банков достаточно разбить адрес на группы по n бит после чего их все проксорить. Таким образом можно будет параллельно обращаться к элементам с любым шагом и в среднем нагрузка на банки будет равномерной. Есть правда минус в том, что для каждого банка нужна очередь запросов, и при конфликтах время получения всех данных будет удлиняться. Плюс метода в том, что при изменении количества банков нужно только скорректировать количество параллельно обрабатываемых элементов, а переделывать размещение данных не потребуется.
    Последний раз редактировалось blackmirror; 02.02.2020 в 19:39.

  5. #64
    Master
    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    blackmirror, что-то я вообще не понял про что это.

  6. #65
    Member
    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Это про много ядер обновляющих поля структур в общем поле памяти из нескольких банков в случае если размер структур кратен суммарной ширине банков и конфликты которые при этом возникают. Правда рассуждать можно проще, если 2^n банков не позволяют эффективно разруливать конфликты при структурах кратных 2^s, значит банков нужно нечётное количество, к примеру 2^n+1. C crc связываться не стоит, там остаются размеры структур на которых всё будет плохо, самый действенный вариант это делать банков больше чем ядер, но очереди всё равно нужны.

  7. #66
    Activist Аватар для omercury
    Регистрация
    13.02.2016
    Адрес
    г. Королёв
    Сообщений
    493
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bolt Посмотреть сообщение
    плюшки типа 24-разрядной адресации.
    Цитата Сообщение от Bolt Посмотреть сообщение
    "add BC,0x12345678" занимает 8 байт.
    Как часто нужны числа более 16 миллионов? Для математики? А для индексов с 24-битной адресации не очень, посему они вполне могут быть одноцикловыми (4 байта) - например, старший байт - команда, а 3 младших - константа.

    Цитата Сообщение от blackmirror Посмотреть сообщение
    Инструкция запуска цикла адрес следующий инструкции записывает в LoopStat, а в LoopEnd и LoopCnt пишет переданные в параметрах значения. Когда PC становится равным LoopEnd мы уменьшаем счётчик и если еще не 0, то перезаписываем PC из LoopStart, иначе продолжаем выполнять код как обычно.
    Простите, а что в это время делает процессорное ядро? Ждёт освобождения PC, ведь это же ядра епархия?
    И какой тогда смысл в аппаратных циклах?
    Или всё-таки что-то делает?
    Тогда причём здесь PC ?
    В народе этот узел называется DMA и к процессорному ядру никакого отношения не имеет.
    Вот когда понадобится - тогда и добавится.

    Цитата Сообщение от Bolt Посмотреть сообщение
    Когда на выходе PC, на входе PC+4.
    Если прилетело прерывание - что сохранить в стек?
    Дык захват прерывания происходит в самом конце выполняемой в данный момент инструкции, посему, разумеется, PC+длина инструкции (или что там будет результатом её выполнения).

    Цитата Сообщение от Bolt Посмотреть сообщение
    А получится там 5000 cell-ов и частота 30 МГц.
    А можно, увидев такое непотребство, как-то переделать, что-то выкинуть, что-то добавить, и получить 1000 cell-ов и 100 МГц.
    Цитата Сообщение от Bolt Посмотреть сообщение
    Давайте напишем case на 100 строк, синтезатор разберётся.
    32-битная команда будет поболее 100 строк...
    Сииильно поболе..

    Но это тоже не тупик.
    Кейсов ведь может быть более одного и работать они могут вполне себе параллельно.
    Для примера потеоретизируем для однобитных сигналов.
    Упрощённо, каждый логический блок имеет 8 входов + входы расширения, на каждый вход/выход стоит свой ключ, + коммутация сигналов внутри блока - тоже ключи, пусть для простоты будет 2 последовательных ключа, итого 4. Пусть каждый имеет задержку в 0,5 наносекунды. Для того, чтоб построить мультиплексор на 100 входов, нам нужно задействовать 100/8=12,5 (13) последовательно включённых блока, получив в результате задержку в 13*4*0,5=26 условных наносекунд.
    Либо поставить, например, 5 двадцативходовых мультиплексоров впараллель и один, объединяющий их на выходе. Итого на круг получим 20/8=2,5 (3) + 1 = 4 последовательных ячейки по 4 ключа = 4*4*0,5=8 условных наносекунд или трёх с четвертью кратное ускорение мультиплексора... Расплата - "лишний" мультиплексор на выходе.
    Чисто теоретически.
    Усложнение не всегда ведёт к замедлению.
    Но это тоже не догма.
    Самым медленным устройством у нас является память (или УВВ, если угодно, не суть), она задаёт быстродействие, а внутрях оно может выполнять один МЦ и за несколько тактов, только небольшими кусочками, опять же по конвейеру, для пользователя это прозрачно. А это уже экономия ячеек.

  8. #67
    Member
    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от omercury Посмотреть сообщение
    Простите, а что в это время делает процессорное ядро? Ждёт освобождения PC, ведь это же ядра епархия?
    И какой тогда смысл в аппаратных циклах?
    Или всё-таки что-то делает?
    Тогда причём здесь PC ?
    Аппаратные циклы начинают свою работу на этапе выборки инструкции, когда PC выбираемой команды совпадает с последней командой цикла. Они работают параллельно с выполнением команд и не ждут окончания их выполнения, а сразу говорят, что далее выбирать команды следует с начала. Хотя для них могут быть ограничения в виде невозможности иметь последней командой цикла переход или вызов подпрограммы с непредсказуемым адресом. Иными словами который читается из памяти/вычисляется/зависит от вычисляемого условия. Смысл их в том, что для организации цикла не нужно выполнять декремент и переход, не нужно разворачивать циклы - можно писать максимально коротко не увеличивая нагрузку на кеш команд. С их помощью можно организовать цикл любой нужной длины, а не только в 1 команду из числа тех, что поддерживают такой префикс.

  9. #68
    Activist Аватар для omercury
    Регистрация
    13.02.2016
    Адрес
    г. Королёв
    Сообщений
    493
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от blackmirror Посмотреть сообщение
    для них могут быть ограничения в виде невозможности иметь последней командой цикла переход или вызов подпрограммы с непредсказуемым адресом. Иными словами который читается из памяти/вычисляется/зависит от вычисляемого условия. Смысл их в том, что для организации цикла не нужно выполнять декремент и переход, не нужно разворачивать циклы - можно писать максимально коротко не увеличивая нагрузку на кеш команд. С их помощью можно организовать цикл любой нужной длины, а не только в 1 команду из числа тех, что поддерживают такой префикс.
    Единственное "но" - неизвестно, сколько времени будет выполняться такой цикл, и, соответственно, почти гарантировано нарушение последовательности выполнения программы...
    Вроде бы и по-сути DMA, но с червоточинкой...

  10. #69
    Member
    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    omercury, выполняется это цикл столько, сколько в него засунули команд, а к dma он отношения не имеет.

  11. #70
    Master
    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от blackmirror Посмотреть сообщение
    Это про много ядер обновляющих поля структур в общем поле памяти
    А, понятно. То есть оптимизируем уже не ядро, и даже не два ядра, а МНОГО ядер

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

    Цитата Сообщение от omercury Посмотреть сообщение
    Как часто нужны числа более 16 миллионов? Для математики? А для индексов с 24-битной адресации не очень, посему они вполне могут быть одноцикловыми (4 байта) - например, старший байт - команда, а 3 младших - константа.
    А кто сказал, что циклы 4-байтовые? Про сокращённые константы и так понятно, просто указал предельный случай.

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

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

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

    omercury, говоря "аппаратные циклы" blackmirror имеет в виду такую штуку, которая добравшись до определённого адреса далее выбирает не PC+1, а некий другой адрес. Не какая-то djnz, а само, сразу. Да, похоже на DMA, но заталкивает байты он не в звуковую карту, а в блок выполнения команд. Но эта штука лично у меня вызывает много вопросов.

Страница 7 из 14 ПерваяПервая ... 34567891011 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 465
    Последнее: 03.01.2020, 07:15
  2. Ответов: 16
    Последнее: 02.08.2005, 12:20

Ваши права

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