Рубрика «высокая производительность» - 3

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

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

Если посмотреть на список правил «чистого» кода и вытащить из него правила, которые действительно влияют на структуру кода, то мы получим следующее:

  • Отдавайте предпочтение полиморфизму, а не «if/else» и «switch»
  • Код не должен знать о внутреннем устройстве объектов, с которыми он работает
  • Функции должны быть маленькими
  • Каждая функция должна выполнять одну задачу
  • Принцип «DRY» — Don’t Repeat Yourself («не повторяйся»)

Эти правила достаточно чётко формулируют то, как должен создаваться конкретный фрагмент кода, чтобы быть «чистым». Но я задам такой вопрос: если мы создадим фрагмент кода, соответствующий этим правилам, какова будет его производительность?
Читать полностью »

Основные аспекты наблюдаемости систем - 1


В современной разработке ПО наблюдаемость (observability) является важнейшей концепцией, которая относится к способности получать представление о внутренних процессах сложных систем. Она подразумевает сбор данных из разных источников, таких как журналы, метрики и трейсы, с последующим их использованием для лучшего понимания функционирования системы, выявления проблем и их устранения. И в этой статье мы подробно разберём все аспекты реализации этой концепции.Читать полностью »

ArrayPool<T>: подводные камни - 1

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

Для уменьшения аллокаций в современном .NET предусмотрены Span/Memory<T>, stackalloc с поддержкой Span, структуры и другие средства. Но если без объекта в куче не обойтись, например, если объект слишком большой для стека, или используется в асинхронном коде — этот объект можно переиспользовать. И для самых крупных объектов — массивов, в .NET встроены несколько реализаций ArrayPool<T>.

В этой статье я расскажу о внутреннем устройстве реализаций ArrayPool<T> в .NET, о подводных камнях, которые могут сделать пулинг неэффективным, о concurrent-структурах данных, а также о пулинге объектов, отличных от массивов.

Читать полностью »

Порой приходится слышать: «Отладчики бесполезны, гораздо целесообразнее иметь дело с логированием и модульными тестами». Подозреваю, что многие из разделяющих такое мнение думают, будто отладчик только и может, что расставлять точки останова на определённых строках, пошагово просматривать код и проверять значения переменных. Притом, что любой годный отладчик действительно всё это может, на самом деле это только верхушка айсберга. Задумайтесь: мы уже вполне можем наткнуться на код, которому около 40 лет – наверняка же с тех пор что-то изменилось?  

Tl;drЧитать полностью »

22 342 кратное ускорение загрузки геометрии в Unity - 1

Немного истории

Меня зовут Артем Толстогузов, и я вхожу в группу анонимных Unity‑программистов.

У меня:

  • навязчивое желание переложить всю работу с CPU на GPU;

  • небольшой фетиш в области оптимизаций всего что только возможно;

  • хронический интерес к шейдерам, графическому пайплайну и технологиям;

  • Читать полностью »

6 февраля пользователи могли заметить частичную недоступность сервисов Яндекса. Проблема возникла из-за каскадного сбоя в работе сетевого оборудования.

Основной пик пришёлся на период с 17:03 до 17:50, когда общие потери трафика достигали 40%. Кроме того, в период с 17:03 до 17:13 наблюдалась практически полная потеря IPv6 трафика. Инцидент удалось устранить к 21:30.

Как это произошло и какие выводы мы из этого извлекли — ответим на эти вопросы и поделимся нашим опытом.

О сетевой аварии в Яндексе - 1

Читать полностью »

CAMM — то, что должно сделать ноутбуки ещё тоньше и быстрее - 1

За последние два десятка лет появилось не так уж много инноваций в сфере дизайна памяти для ноутбуков. Уже как четверть века большой популярностью пользовались небольшие модули памяти с двухрядным расположением выводов, SO-DIMM (Small outline DIMM). В 2022 году Dell выпустила два ноутбука, Precision 7670 и 7770, которые дебютировали с новым форм-фактором для оперативной памяти, называемым CAMM (Compression Attached Memory Module).

После анонса ноутбуков Dell заявила, что Precision 7670 и 7770 будут самыми мощными среди профессиональных моделей. 16-дюймовый 7670 имеет толщину 0,98 дюйма, а 17-дюймовый 7700 — 1,13 дюйма, что является впечатляющими показателями для мобильных рабочих станций, оснащённых при этом выделенными графическими процессорами. И всё это стало возможным благодаря CAMM.

CAMM в настоящее время ратифицируется для общеотраслевого использования органом по стандартизации памяти, JEDEC. А окончательная спецификация должна быть опубликована позже в этом году. Розничные ноутбуки основанные на окончательной омологации CAMM появятся в 2024 году.

CAMM — то, что должно сделать ноутбуки ещё тоньше и быстрее - 2

Читать полностью »

Выжимаем максимум из логики — сверхбыстрый, но прожорливый сумматор - 1

ПЛИС-культ привет, FPGA хаб!

Давненько я не писал полноценных статей на хабре, всё больше как-то занимался организацией FPGA движа: всякими там новостными подборками, ютуб стримами по FPGA, организацией плисовых конференций и много чем другим.

Но всё новое — хорошо забытое старое, поэтому решил изложить в текстовом виде несколько идей, которые легли в основу стримов.

И в этой заметке предлагаю вам погрузиться в небольшое исследование c реализацией конвейеризованного многоразрядного сумматора всего с 1 уровнем логики, эдакого LUTа в сферическом вакууме, идеи которого, я уверен, найдут отклик в исследовательских работах начинающих адептов программируемой логики.

Читать полностью »

Js, трюки, наблюдения, бенчмарки и как Лиса уничтожает Хром. Я протестировал всё, что вам было лень - 1

Картинка, конечно, стронгли анрилейтед

Разные трюки я тестировал на Google Chrome 107.0.5304.107 и Mozilla Firefox 107.0 на Windows 10.

Чтобы результаты всегда были железно воспроизводимыми, я отключил все С-State’ы, ядра зафиксировал на 5 ГГц.

У меня 9900К, это Coffee Lake c AVX256, какие оптимизации применит Jit для вашего процессора — я не знаю, результат на вашем компьютере может отличаться от моего, в т.ч. из-за микроархитектуры процессора.

Скорость парсинга кода тоже входит в бенчмарк, поэтому браузер с быстрым парсером будет впереди.
Читать полностью »

Задача коммивояжера (TSP) точное решение — метод целочисленного линейного программирования (Integer programming) - 1

Все пути одинаковы: они ведут в никуда. Но у одних есть сердце, а у других — нет. Один путь дает тебе силы, другой — уничтожает тебя.

- Карлос Кастанеда

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js