powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Предварительные слушанья по Memory+Cache (Part-2)
9 сообщений из 9, страница 1 из 1
Предварительные слушанья по Memory+Cache (Part-2)
    #39981115
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет котаны-бротаны.

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

Тема 2015 года с бенчмарком ЯП и процессоров завершена. Де-факто. Мы получили
то что хотели. Дальше развивать ее нет смысла. Разве что появится новый революционный компиллятор
и мы что-то там соберем чтоб посмотреть.

Но мне не даёт покоя другая часть задачи которая связана с бенчмарком
memory + cache. Тема в нашем форуме уже нашла отклик и вызвала падение кирпичей
и некоторую долю гнева. В самом деле. Нам сложно придумать под нее кейс.

Понимая и осознавая что тема - скорее нужная. Считаю что нам стоит ее возобновить
не взирая на ее очевидную флеймовость и антинаучность. Если она - антинаучна,
давайте превнесем в нее ровно столько наукообразности чтоб сбить этот стереотип.

Я рассматриваю создание 2-й части темы Пятничных Бенчмарков Memory+Cache
в разрезе структур данных таких как.
- R&B tree
- B-Tree (произвольного порядка)

- Прочие виды деревьев. Тернарные. R-деревья пространственного поиска. M-деревья. Префиксные. HashArray.

Но основное сравнение будет идти между первыми двумя.

FAQ
Q: Почему в качестве структуры данных выбраны именно деревья?
A: Потому что только деревья имеют характерный (когеретный) доступ к памяти на чем
мы можем "сыграть" и провести оптимизацию структур таким образом чтобы access path
проходил по L1/L2/L3. Если-бы мы взяли хеш-таблицы - мы испортили-бы картину
доступа к памяти не только последовательной выборке ключей но даже на последовательном
insert.

Primary Goal
- разработать B-Tree для работы in-memory. Учитывать технологии и архитектуры
- типы данных и ключей - примитивы (int, long64, double, char[8] - короткие строки)
- строки более чем 8 символов - рассмотреть отдельно как невысокий процентиль от всех данных
- разработать экономные способы хранения (указатель/данные как union)

Secondary Goal
- Проверить насколько неэффективно R&B tree по памяти. Есть предположение что оно - расточительно использует
полезную память.
- Рассмотреть реализацию стандартных R&B trees в С++/STL/Boost. Учитывают ли они моё пожелание по эффективности
использования памяти? Какими гранулами аллоцируется память?
- Рассмотреть влияние страничной памяти Windows/Linux на структуры данных.



Некоторые хештеги по технологиям и просто записки чтоб не забыть
- cache line
- 4kb page size
- posix_memalign(..)
- https://stackoverflow.com/questions/48360238/how-can-the-l1-l2-l3-cpu-caches-be-turned-off-on-modern-x86-amd64-chips
- Ulrich Drepper - What Ever Programmer Should Know About Memory

В дальнейшем наше исследуемое дерево будем называть X-Tree.

FAQ
Q: Зачем нам обсуждать модификации R-Tree когда существует быстрый и проверенный R&B?
A: Я ищу оптимальное соотношение память/производительность. Даже условный проигрыш
X-Tree может быть зачтён как положительный результат если мы увидим или докажем
что мы теряем 20% скорости при 60% экономии памяти.
Q: На чем мы сэкономим?
A: Мы увеличим объём данных в узле. Фактически R+Tree (n-того порядка). Разумеется с сохранением
кратности кеш-линиям.

Тестовые сценарии
- создание экземпляра X-Tree
- вставка случайных ключей.
- загрузка серий последовательных ключей.
- полная загрузка (ETL) на максимальнйо пропускной способности
- те-же сценарии с чтением.
- те-же сценарии со смешанным подходом. Добавление + чтение.
- мультипоточность (опционально)

ЯП
С/C++/Assembler
ну можно и другие. Delphi.

На этом всё.

Это - черновой вариант. Прошу ваши комментарии.
...
Рейтинг: 0 / 0
Предварительные слушанья по Memory+Cache (Part-2)
    #39982107
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО непонятно что конкретно тестить. Одно и тоже дерево в зависимости от занятого объема может как целиком поместиться в кэш проца, так и быть огромным и постоянно вытесняться из кэша.

Как вариант, вместо деревьев взять любую встраиваемую СУБД, например SQLite. По сути там теже деревья, но уже оптимизированные для постраничного чтения.
...
Рейтинг: 0 / 0
Предварительные слушанья по Memory+Cache (Part-2)
    #39982122
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разумеется оно не поместится.
...
Рейтинг: 0 / 0
Предварительные слушанья по Memory+Cache (Part-2)
    #39982227
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу SQLite - идея хорошая но учитывая возраст этого продукта мне сложновато будет разбирать его исходный код.

Хотя.... его можно использовать в качестве некого эталона. Из таковых:

- C++/STL/Boost R&B trees
- SQLite
- BerkeleyDb
- LevelDb

И разумеется на одинаковых конфигурациях таблицы. Key + Value одного типа.
...
Рейтинг: 0 / 0
Предварительные слушанья по Memory+Cache (Part-2)
    #39982928
MX-9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

деревья растут в Cache ( IRIS ) Intersystems.

можно протестировать.

===========
...
Рейтинг: 0 / 0
Предварительные слушанья по Memory+Cache (Part-2)
    #39982929
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю что это мне не понадобится.
...
Рейтинг: 0 / 0
Предварительные слушанья по Memory+Cache (Part-2)
    #39990380
DOD тут не поможет? Data-Oriented-Design
...
Рейтинг: 0 / 0
Предварительные слушанья по Memory+Cache (Part-2)
    #39990619
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется без конкретных данных и кейса, топик не взлетит.

По поводу кеш линий интересно, не нужен ли тут ассемблер, или помолемся компилятору )
...
Рейтинг: 0 / 0
Предварительные слушанья по Memory+Cache (Part-2)
    #39990630
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Мне кажется без конкретных данных и кейса, топик не взлетит.

По поводу кеш линий интересно, не нужен ли тут ассемблер, или помолемся компилятору )

Роберт Лав в своей книге ссылается на функцию posix_memalign () которая укажет нам блок
кратный кеш-линии. Можно попробовать ее использовать.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Предварительные слушанья по Memory+Cache (Part-2)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]