Pull to refresh

Comments 23

Это всё очень сильно проявляется у процессоров с архитектурой Intel, и довольно слабо – на Apple Silicon, где память впаяна в процессор и кеш не является бутылочным горлышком.

Латентность памяти в эплах не меньше чем на х86.

Пропускная способность больше.

Да неважно, как считают. Эти вещи легко проверить на практике.

пропускная способность != латентность, время ожидания блока считается как `латентность+размер блока/пропускная способность`

вся запись все равно идет через L1 и если у вас промах по кешу то вам все равно сидеть и ждать пока данные приедут, даже если их приедет больше

Всё верно, но в итоге большой блок приедет быстрее.

Я проводил сравнения, и получилось, что если на процессоре Intel последовательный и непоследовательный доступ к ячейкам памяти различался по скорости примерно в два раза, то на Apple различие было в пределах 1%.

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

ЗЫ

Если говорить за х86, то там есть группа команд которая идёт как бы... "сквозь кэш". Позволяя писать в память на полной скорости, обычные обращения кэшируются и мне народ пишет "видите, скорость записи вертексов в 2 раза медленнее чем чтение!!! Нас обмануют!!!"

У эппла восемь каналов памяти, а не два как у интела, само-собой пропускная способность больше. Вон на эпиках те же восемь каналов и пропускная способность точно такая же. Архитектура тут не при делах совершенно.

Ну собственно это часть архитектуры (хотя вопрос не только в количестве каналов). Разумеется, система команд тут не причём.

Я думал что такого мифа на самом деле нет.
Но вы меня переубедили - первый комментарий подтверждает, что миф есть.

латентность разведённой памяти не сильно ниже DDR (и гораздо больше зависит от стратегии в контроллере памяти, чем от физической схемы).
Пропускная способность может быть выше, но приведённые примеры намного больше упираются в латентность (и prefetch / eviction кэшей).

Вроде дело не в расстоянии, оно не велико, дело в частотах.
Время обращения к кешу L1 на 2 порядка, и к L2 на один порядок меньше, чем к ОП потому что чтение из памяти завязано на частоту памяти и циклы чтения/записи.

Довольно странная рекомендация - для уменьшения промахов кэша использовать сортировку. Кажется что сама по себе сортировка каких-то не примитивных объектов создаст больше промахов кэша чем потенциальный выигрыш.

там идея в том что сам elements то как раз вектор и его сортировка не так уж плоха для кеша, а вот каждый element из elements указывает уже в разнобой и действительно может постоянно промахиваться по кешу

Если сортировать пузырьком, то обращение всегда будет к соседним элементам!

Кажется что сама по себе сортировка каких-то не примитивных объектов создаст больше промахов кэша чем потенциальный выигрыш.

Кажется.

Я как раз занимаюсь в своём хобби-проекте переносом стратегии "B-tree на HDD" на "B-tree в RAM". Мне там постоянно нужны три функции: Поиск, Вставка и Удаление. А данных там - 2^{32}. И скорость их обработки нужна максимальная. Так что подход, и алгоритм задачи, очень близок к этой статье. Пока я ещё не реализовал эту задачу в программе, но проектирую уже его детали и нюансы в прикладной области. Чувствую, что придётся тестировать по многообразию параметров - как исходных, так и промежуточных (в схеме разделения на непрерывные блоки, организации их связей между собой, и т.д). Ещё и память надо оптимизировать...

Хотелось бы сразу сделать идеально, но знаю, что так не бывает. Только практика (тесты) покажут, как оно на самом деле. Но вот по теоретической части, в которой я ещё только новичок, думаю можно избежать неявных косяков. Где бы о таком узнать, почитать?

Так в чем же заключается миф о RAM? Так за счет чего мы получили ускорение, даже если данные не помещаются в кэш? Статья не соответствует заголовку.

Миф о всемогуществе RAM. :)

Многие считают, что если [многочисленные] данные уже в оперативной памяти, то их обработка (последовательно, или в случайном порядке) пойдёт уже на максимальной скорости. Такая вот логическая связка, возникшая во времена, когда "640Кб хватало для всего".

Статья о том, что на гигантских объёмах информации требуется современная аппаратура специальная техника программирования, с учётом нюансов работы современной аппаратуры.

Sign up to leave a comment.

Articles