Как стать автором
Обновить

Комментарии 7

В целом статья интересная, но изложено очень сумбурно. Очень много терминологии специфичной для конкретной микроархитектурной реализации и обьяснение этой терминологии автор не дает. Т.е. статья будет понятна только узкому кругу специалистов имеющих дело с вычислительными ядрами Берклийской группы.

TileLink это весьма спорная реализация кросс-коннекта предложенная Берклийской группой (SiFive и иже с ними) вместо традиционной AXI4/5. Вот тут есть кратенький разбор TileLink, может кто-то возмётся перевести его и снабдить своими коментариями ? Короче, нужна хорошая статья по TileLink.

Без понимания работы TileLink рассматривать внутренние потроха берклийских ядер очень тяжело. Но далеко не все RISC-V ядра используют TileLink, поэтому часть из того, что написано в данной статье может быть не применимо к другим реализациям RISC-V.

Спасибо за отзыв! Моя первая статья. Грамотно излагать мысли оказалось не так просто, как я ожидал (. Буду учиться. И я совсем не эксперт по архитектурам CPU, разбирался с нуля. А про более интересный и детальный разбор различных интерконнектов и прокотолов я бы и сам почитал с удовольствием.

Ваш пример еще раз подчеркивает тот факт, что с появлением высокоуровневых HDL языков всё больше программистов приходит в тему разработки цифровой аппаратуры, порог вхождения понижается. Я сам из таких.

Ещё у вас какой то неявный переход от cache coherency (на примере false sharing) к собственно memory model (барьеры и т.д.). На мой взгляд эти вещи надо чётко разделять.

Для некэшируемой памяти по шине уходит сообщение со всеми необходимыми данными, какую операцию совершить с каким операндами и по какому адресу. Узел получает это сообщение и выполняет команду. В TileLink есть реализация логики атомиков прям на уровне протокола узла шины.

Интересное решение.

Да, volatile так же гарантирует атомарную запись и чтение переменных типа long независимо от разрядности архитектуры процессоры, где он не может атомарно работать с такими размерностями операндов.

Нет, volatile не гарантирует атомарность. Чтение/запись переменной с размером, не превышающим разрядность архитектуры, обычно обеспечивается на аппаратном уровне (это один цикл доступа к памяти). Чтение/запись long на архитектуре например AVR не будет атомарным даже при использовании ключевого слова volatile. Про заблуждения о volatile можно прочитать например здесь http://we.easyelectronics.ru/Soft/skolzkaya-dorozhka-dlya-poklonnikov-volatile.html

Я имел ввиду Java. А там подразумевается то, что другой поток увидит нормальное значение даже несмотря на то, что запись через 2 инструкции производится. просто порядки поменяет чтения/записи и барьер вставит (вероятно).

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации