[Перевод] На сколько же медленнее произвольный доступ на самом деле?

Как вы, наверно, знаете, из-за наличия в компьютере различных кэшей (L1, L2, L3...) и того, что операции с памятью выполняются с линиями кэша размером примерно 64 байт каждая, для обеспечения максимальной производительности мы должны писать программы, обеспечивающие локальность . (Разумеется, диск здесь не показан) Но насколько хорошо вы это осознаёте? Допустим, у нас есть массив чисел с плавающей запятой и массив индексов первого массива. Есть программа, складывающая числа из первого массива в порядке, определяемом вторым массивом. То есть в этом примере мы будем складывать ε + α + δ + ζ + β + γ в таком порядке: Давайте рассмотрим всего два случая: индексы идут в порядке от первого до последнего или в произвольном порядке . До того, как я начал писать этот пост, я не мог ответить ни на один из следующих вопросов: 1. Насколько большим должен быть массив, чтобы разница производительности вычисления в двух порядках стала заметной? 2. Сколько в среднем тратится на каждый элемент в порядке от первого до последнего? 3. Насколько медленнее произвольный порядок последовательного в случае массивов, умещающихся в RAM? 4. Насколько медленнее произвольный порядок последовательного в случае массивов, не умещающихся в RAM? 5. Достаточно ли стандартного тасования Фишера-Йейтса для массивов перемешанных индексов для получения произвольного порядка? 6. Насколько медленнее порядок от первого до последнего в случае массивов, не умещающихся в RAM, при использовании файлов с отображением в память? 7. Максимально ли быстры файлы с отображением в память? Если вы уже знаете ответы на эти вопросы, то это замечательно! Если же нет, то делайте ваши предположения и проверьте их, прочитав пост.

https://habr.com/ru/articles/922800/

#кэш #memory_mapped_files #бенчмарки

На сколько же медленнее произвольный доступ на самом деле?

Как вы, наверно, знаете, из-за наличия в компьютере различных кэшей (L1, L2, L3...) и того, что операции с памятью выполняются с линиями кэша размером примерно 64 байт каждая, для обеспечения...

Хабр

[Перевод] Rust IPC Ping-Pong

На работе наша команда недавно столкнулась с необходимостью в высокопроизводительном IPC в Rust. Поиск привел нас к содержательной статье от 3tilley « IPC in Rust — a Ping Pong Comparison », что стало превосходной отправной точкой в нашем исследовании. Вдохновляясь этой работой, мы решили копнуть глубже и провести собственные замеры производительности, в особенности нас интересовал новый многообещающий фреймворк iceoryx2. Взяв за основу работу в исходной статье, мы будем использовать UNIX Domain Sockets (как stream, так и datagram), Memory Mapped Files и Shared Memory с использованием iceoryx2 для сравнения производительности IPC между процессами на одной машине для различных размеров пэйлоада.

https://habr.com/ru/companies/beget/articles/851788/

#ipc #UNIX_Domain_Stream_Socket #Unix_Datagram_Socket #Memory_Mapped_Files #shared_memory

Rust IPC Ping-Pong

На работе наша команда недавно столкнулась с необходимостью в высокопроизводительном IPC в Rust. Поиск привел нас к содержательной статье от 3tilley « IPC in Rust — a...

Хабр