1.83K subscribers
3.3K photos
131 videos
15 files
3.57K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Forwarded from Neural Machine
Бойтесь жить в одиночестве или вместе с людьми
👍3😁2🤮2😱1
Forwarded from Д їде дахом
🤣22👍81
Нечасто мне снится, что я кого-то целую.

Тем более мальчика.
🤮22❤‍🔥12🌚7🥰3🤔1
Хочу ходить в таких брюках и говорить "потрогай траву"
🍌18🤮5👍1
#meme философский
Forwarded from rothko's kimono
🤔4😱2
(#prog?) #meme 🌚
🍌1
Forwarded from χоρоший ☽☽☽ λисuчко
Простите
🤡5😁2
Блог*
А кстати, кто из подписчиков Блог*а сейчас в Армении?
Полгода прошло, так что повторю вопрос. Кто из подписчиков сейчас в Армении?

(Сова, про тебя я помню)
🤔2👍1😁1
Блог* pinned «Полгода прошло, так что повторю вопрос. Кто из подписчиков сейчас в Армении? (Сова, про тебя я помню)»
#prog #article

Biased reference counting: minimizing atomic operations in garbage collection (pdf)

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

Традиционные подходы к оптимизации RC полагались на оптимизации компилятора, которые позволяют убирать операции инкремента и декремента, соответствующие друг другу, или на разделение операций изменения счётчиков и освобождения мёртвых объектов. Авторы данной статьи предлагают новый подход. Именно, они подмечают, что в реальных программах доля объектов, разделяемых между потоками, крайне невелика, и потому предлагают разделить единый счётчик ссылок на два: один для подсчёта ссылок на потоке, которому объект принадлежит, и один для всех остальных потоков. Операции с первым счётчиком могут быть сделаны обычными, неатомарными операциями, что позволяет снизить долю времени исполнения на манипуляции со счётчиками.

Более подробно детали реализации — вместе с очередями объектов для обработки граничных случаев — описаны в папире. Авторы реализовали свой подход в рантайме языка Swift — который использует счётчики ссылок с оптимизациями компилятора и немедленным освобождением объектов — и замерили влияние на производительность программ. Результаты показали, что подход авторов заметно снижает общее время исполнения программ и увеличивает пропускную способность "серверных", многопоточных программ, при этом давая крайне небольшое увеличение пиковой потребляемой памяти.

We implemented BRC in the Swift programming language runtime and evaluated it with various client and server programs. We found that BRC accelerated non-deferred RC. Specifically, it reduced the average execution time of client programs by 22.5%, and improved the average throughput of server programs by 7.3%.

Авторы также сделали синтетический бенчмарк, который симулирует исполнение программы с большим количеством разделяемых между потоками объектов и обнаружили, что их подход становится хуже оригинального по производительности при доле разделяемых объектов около 75% от их общего числа.
🔥5👍2🤔1
Блог*
#prog #article Biased reference counting: minimizing atomic operations in garbage collection (pdf) Счётчики ссылок можно считать формой сборщика мусора. Как вариант сборки мусора этот подход привлекателен низким оверхедом по памяти и короткими паузами. Однако…
В 2019 году группа исследователей реализовала PCIe драйвера на широком наборе языков и выкатила папир по результатам исследования. Про Swift там было сказано следующее:

Swift increments a reference counter for each object passed into a function and decreases it when leaving the function. This is done for every single packet as they are wrapped in Swift-native wrappers for bounds checks. There is no good way to disable this behavior for the wrapper objects while maintaining an idiomatic API for applications using the driver. A total of 76% of the CPU time is spent incrementing and decrementing reference counters. This is the only language runtime evaluated here that incurs a large cost even for objects that are never free’d

Это, судя по всему, наихудший случай для ARC в Swift, ибо в реальных программа доля времени исполнения, занятая из изменениями счётчиков, меньше. Но даже в реальных программах эта доля нетривиальна.
1
Forwarded from Neural Machine
Если я тебе не нравлюсь, иди и плачь, пожалуйста
😁6🔥3🤮1
Forwarded from TrapsWorld
😐17😁8🤔1🤮1
Не хочется работать, но... Не хочется
👍7🤡2😢1
14👍1
Первые семь дней недели всегда самые тяжёлые
🌚8👍2