Pull to refresh
67
0
Егор @Nagg

Разработчик немобильных приложений

Send message

Зачем процессорам нужен кэш и чем отличаются уровни L1, L2, L3

Reading time10 min
Views127K


Во всех центральных процессорах любого компьютера, будь то дешёвый ноутбук или сервер за миллионы долларов, есть устройство под названием «кэш». И с очень большой вероятностью он обладает несколькими уровнями.

Наверно, он важен, иначе зачем бы его устанавливать? Но что же делает кэш, и для чего ему разные уровни? И что означает «12-канальный ассоциативный кэш» (12-way set associative)?
Читать дальше →
Total votes 35: ↑33 and ↓2+37
Comments40

Как Crash Bandicoot взламывал Playstation

Reading time19 min
Views33K

Энди Гэвин из Naughty Dog рассказывает об управлении памятью и 3D-анимациях 90-х.

«Памяти в Crash Bandicoot настолько не хватало, что мне приходилось красть небольшие кусочки лишней памяти из библиотек Sony. Я просто пробовал удалять те части, которые, как мне казалось, я не использую, и проверял, продолжает ли всё работать. Если всё работало, то я помечал их как свободные и делал хаки их кода, меняя байт-коды. Я думал: у меня получится, если Sony не хочет исправить это сама, то я просто изменю их код. Это была свободная память. [смеётся] Память была ограниченной. Но нам совершенно точно никто не разрешал этого делать».

Привет, я Энди Гэвин, сооснователь Naughty Dog Inc и ведущий программист Crash Bandicoot. Мы решили создать первый экшн-платформер с трёхмерным персонажем, и чтобы сделать всё правильно, нам в буквальном смысле пришлось взламывать оборудование.

Это было частью философии Naughty Dog — делать всё возможное, использовать каждый цикл ЦП или GPU, каждый байт памяти. Если в машине существовала такая возможность, то мы пытались разобраться, как выжать из неё максимум вне зависимости от того, пригодится ли это нам или нет, и будем ли мы использовать какие-то безумные трюки. Летом 1994 года мы с моим партнёром Джейсоном Рубином завершали файтинг для 3DO под названием Way of the Warrior и размышляли над тем, какую игру хотим сделать следующей. Самым популярным жанром на консолях в то время были экшн-платформеры, такие как Super Mario World и всевозможная другая классика 16-битных платформенных игр. В то же время на аркадных автоматах появилось новое 3D-оборудование и некоторые жанры начали переход из традиционного 2D в 3D.
Читать дальше →
Total votes 28: ↑27 and ↓1+41
Comments7

Кетогенная диета: от лечения эпилепсии до вредной моды

Reading time11 min
Views20K


Каждая эпоха человечества полнится своими кумирами. Люди, которые каким-то образом выделились из толпы, часто становятся примером для подражания, наследования и копирования. Так было всегда и так происходит сейчас. В наши дни социальные сети, доступ к котором можно получить из каждого второго устройства, доминируют в вопросах общественного мнения. В некоторых ситуациях это даже хорошо, если человек, к которому приковано внимание тысяч или миллионов его подписчиков, делится информацией полезной и точной. Однако чаще всего мы наблюдаем ситуацию, когда кто-то «известный» сказал что-то не совсем умное, а толпа его поддержала, ибо работает принцип «ну это же «Имя», он ерунды не скажет». Подобная ситуация сложилась и вокруг кетогенной диеты, используемой ранее в спорте и в лечении эпилепсии. Кетодиета, основанная на высоком содержании жиров и низком содержании углеводов в пище, стала популярна среди некоторых «селебритис» (уж простите за англицизм). Но так ли хороша, а главное, полезна ли такая диета для организма человека? Как выяснили ученые из Йельского университета, вреда от нее куда больше, чем пользы. Какие процессы протекают в организме во время кетодиеты, каковы ее последствия и стоит ли вообще сидеть на диете? Об этом мы узнаем из доклада исследовательской группы. Поехали.
Читать дальше →
Total votes 25: ↑22 and ↓3+33
Comments26

Мнемотехника: исследуем методы увеличения памяти мозга

Reading time6 min
Views38K


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

Действительно, строить, как Шерлок, дворцы памяти и визуализировать любую последовательность информации не каждому дано. Если вы перепробовали основные приемы, перечисленные в статье по мнемонике в Википедии, и у вас ничего не получилось, то ничего страшного в этом нет — техники запоминания для перегруженного работой мозга становятся сверхзадачей.

Однако не все так плохо. Научные исследования показывают[1], что некоторые мнемотехники буквально физически могут поменять структуру мозга и повысить скилл управления памятью. Многие из самых успешных в мире мнемонистов, участвующих в профессиональных соревнованиях по запоминанию, начинали учиться уже в зрелом возрасте, и им удалось значительно усилить возможности мозга.
Total votes 22: ↑18 and ↓4+23
Comments10

Кейс: Автосервис. Разработка рекламных кампаний и внедрение Битрикс24

Reading time6 min
Views8.9K
История сегодня пойдёт про автосервис в Москве и его продвижении в течении 8 месяцев.

image

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

Собственно первым этапом решили завести коннектор (ключ) в 1с для связи рекламной кампании с выручкой по сделке. Вся архитектура строилась вокруг 1с и это было требование заказчика.
Читать дальше →
Total votes 33: ↑27 and ↓6+21
Comments18

Инициализация и работа интерпретатора байткода в JVM HotSpot под x86

Reading time21 min
Views6.4K

Почти каждый Java разработчик знает, что программы, написанные на языке Java изначально компилируются в JVM-байткод и хранятся в виде class-файлов стандартизованного формата. После попадания таких class-файлов внутрь виртуальной машины и пока до них еще не успел добраться компилятор, JVM интерпретирует байткод, содержащийся в этих class-файлах. Данная статься содержит обзор принципов работы интерпретатора применительно к OpenJDK JVM HotSpot.

Читать дальше →
Total votes 32: ↑31 and ↓1+30
Comments6

Как рендерится кадр в Shadow Fight 3

Reading time7 min
Views8K


Технический 3D-художник Banzai Games Роман Терский рассказал о том, как происходит отрисовка кадра и устроены материалы для персонажей в мобильной игре Shadow Fight 3, а также раскрыл небольшие хитрости в настройке окружения

Shadow Fight 3 — игра в жанре файтинг/РПГ, разработанная на базе движка Unity3d. Релиз проекта состоялся на iOS/Android в ноябре 2017 года, и с тех пор суммарное количество установок игры превысило 80 млн. Для охвата столь широкой аудитории командой разработки была выполнена большая оптимизация игры, и в результате проект работает при 60 FPS на многих современных устройствах со средней производительностью.

Критики и игроки часто отмечают визуальную составляющую Shadow Fight 3. В этой статье мы предлагаем вам заглянуть “под капот” игры и узнать, как нам удалось достичь такого качества.
Читать дальше →
Total votes 14: ↑11 and ↓3+8
Comments4

TCP против UDP или будущее сетевых протоколов

Reading time27 min
Views174K
Перед каждым сервисом, генерирующим хотя бы 1 Мбит/сек трафика в интернете возникает вопрос: «Как? по TCP или по UDP?» В прикладных областях, в том числе и платформах доставки уже сложились предпочтения и традиции принятия подобных решений.

По идее, если бы, к примеру, однажды один ленивый разработчик не попробовал развернуть свой ML на Python (потому что только его и знал), мир скорее всего никогда не проникся бы такой любовью к презренному «супер-джава-кодерами» языку. А сегодня слабости этого языка в прошлом контексте применения безоговорочно обеспечивают ему первенство в развертывании и запуске многочисленных майнерских А/Б.

Сравнивать можно многое: ARM с Intel, iOS и Android, а Mortal Kombat с Injustice. И нарваться на космический холивар, поэтому вернемся к теме доставки огромных объемов разноформатного контента.

Десять лет назад все были абсолютно уверены, UDP — это что-то про негарантированную доставку. Если нужен надежный протокол — это TCP. И вопреки традициям в этой статье мы будем сравнивать такие, кажущиеся несравнимыми вещи, как TCP и UDP.


Осторожно, под катом 99 иллюстраций и схем и все важные.
Total votes 162: ↑159 and ↓3+156
Comments75

Легендарный Intel Core i7-2600K: тестирование Sandy Bridge в 2019 году (часть 1)

Reading time17 min
Views95K
Часть 1>> Часть 2 >> Часть 3



Одним из самых популярных процессоров уходящего десятилетия стал Intel Core i7-2600K. Дизайн был революционным, так как он предлагал значительный скачок в производительности и эффективности одноядерного процессора, а сам процессор еще и хорошо поддавался разгону. Следующие несколько поколений процессоров Intel выглядели уже не такими интересными, и часто не давали пользователям повода для апгрейда, поэтому фраза «Я останусь с моим 2600К» стала повсеместной на форумах и звучит даже сегодня. В этом обзоре мы стряхнули пыль с коробки со старыми процессорами и прогнали ветерана через набор бенчмарков 2019 года, как на заводских параметрах, так и в разгоне, чтобы убедиться, что он по-прежнему является чемпионом.
Читать дальше →
Total votes 61: ↑52 and ↓9+43
Comments91

Как компьютеры научились потрясающе хорошо распознавать изображения

Reading time21 min
Views7.5K

Знаковая научная работа от 2012 года преобразовала область программного распознавания изображений




Сегодня я могу, допустим, открыть Google Photos, написать «пляж», и увидеть кучу своих фотографий с различных пляжей, которые я посетил за последнее десятилетие. И я никогда не подписывал свои фотографии – Google распознаёт на них пляжи на основе их содержания. Эта, казалось бы, скучная особенность основывается на технологии под названием «глубокая свёрточная нейросеть», позволяющая программам понимать изображения при помощи сложного способа, недоступного технологиям предыдущих поколений.

В последние годы исследователи обнаружили, что точность ПО становится лучше по мере того, как они создают всё более глубокие нейросети (НС) и обучают их на всё более крупных наборах данных. Это создало ненасытную потребность в вычислительных мощностях, и обогатило производителей GPU, таких, как Nvidia и AMD. В Google несколько лет назад разработали собственные специальные чипы для НС, а другие компании пытаются угнаться за ней.
Читать дальше →
Total votes 23: ↑18 and ↓5+13
Comments3

Оптимизация сборки мусора в высоконагруженном .NET сервисе

Reading time16 min
Views31K
Ежедневно в сервисе Pyrus работают десятки тысяч сотрудников из нескольких тысяч организаций по всему миру. Отзывчивость сервиса (скорость обработки запросов) мы считаем важным конкурентным преимуществом, так как она напрямую влияет на впечатление пользователей. Ключевой метрикой для нас является «процент медленных запросов». Изучая ее поведение, мы заметили, что раз в минуту на серверах приложений возникают паузы длиной около 1000 мс. В эти промежутки сервер не отвечает и возникает очередь из нескольких десятков запросов. О поиске причин и устранении узких мест, вызванных сборкой мусора в приложении, пойдет речь в этой статье.


Читать дальше →
Total votes 54: ↑54 and ↓0+54
Comments28

Улучшения диагностики в .NET Core 3.0

Reading time5 min
Views12K
В .NET Core 3.0 мы представляем набор инструментов, которые используют новые возможности среды выполнения .NET, которые упрощают диагностику и решение проблем с производительностью.

Эти возможности помогут вам ответить на некоторые распространенные вопросы диагностики, которые могут у вас возникнуть:

  1. Является ли мое приложение работоспособным?
  2. Почему мое приложение имеет аномальное поведение?
  3. Почему мое приложение крашится?


Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments4

Swift under the hood: Generic implementation

Reading time6 min
Views9.4K
Generic code enables you to write flexible, reusable functions and types that can work with any type, subject to requirements that you define. You can write code that avoids duplication and expresses its intent in a clear, abstracted manner. — Swift docs

Каждый, кто писал на Swift использовал дженерики. Array, Dictionary, Set — самые базовые варианты использования дженериков из стандартной библиотеке. Как они представлены внутри? Расмотрим, как данная основополагающая возможность языка реализована инженерами Apple.

Читать дальше →
Total votes 6: ↑6 and ↓0+6
Comments0

Ищем свободное парковочное место с Python

Reading time14 min
Views64K
image

Меня зовут Рушан, и я автор Telegram‑канала Нейрон. Не забудьте поделиться с коллегами или просто с теми, кому интересны такие статьи.

Я живу в хорошем городе. Но, как и во многих других, поиск парковочного места всегда превращается в испытание. Свободные места быстро занимают, и даже если у вас есть своё собственное, друзьям будет сложно к вам заехать, ведь им будет негде припарковаться.

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

image

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

Поэтому давайте немного развлечёмся и напишем точную систему уведомлений о свободной парковке с помощью Python и глубокого обучения
Читать дальше →
Total votes 110: ↑107 and ↓3+104
Comments53

История первого GPU: Rendition Vérité 1000

Reading time10 min
Views24K
image

Есть много хорошей литературы о движке Quake: книги, бесчисленные статьи в Интернете, блоги и вики-страницы. Среди них всех моими любимыми остаются «Graphics Programming Black Book» Майкла Абраша, опубликованная в 1997 году, и «Rocket Jump: Quake and the Golden Age of First-Person Shooters» Дэвида Л. Крэддока (2018 год).

К сожалению, можно найти очень мало информации о разработанном примерно в 1996 году оборудовании, позволившем улучшить 3D-рендеринг и, в частности, графику революционной игры id Software. Внутри архитектуры и конструкции этих кусков кремния заключена история технологической дуэли между Rendition V1000 и 3dfx Interactive Voodoo.

После выпуска vQuake в начале декабря 1996 года казалось, что преимуществом завладела Rendition. V1000 была быстрой картой, способной запускать Quake с аппаратным ускорением, обеспечивающим, по заявлению разработчика, скорость заполнения 25 мегапикселей/с[1]. Прямо перед Рождеством Rendition захватила рынок, позволив игрокам запускать игру с высоким разрешением, частотой кадров и в 16-битном цвете[2]. Но, как показала история, изъян в конструкции Vérité 1000 оказался смертельным для инновационной компании.
Читать дальше →
Total votes 70: ↑70 and ↓0+70
Comments56

[в закладки] Bash для начинающих: 21 полезная команда

Reading time9 min
Views156K
Материал, перевод которого мы публикуем сегодня, предназначен для тех, кто хочет освоить командную строку Linux. Умение эффективно пользоваться этим инструментом позволяет экономить немало времени. В частности, речь здесь пойдёт о командной оболочке Bash и о 21 полезной команде. Также мы поговорим о том, как пользоваться флагами команд и псевдонимами Bash, которые позволяют ускорить ввод длинных инструкций.



Также читайте в нашем блоге цикл публикаций про bash-скрипты
Читать дальше →
Total votes 58: ↑34 and ↓24+10
Comments25

Распределение памяти в JVM

Reading time5 min
Views36K
Всем привет! Перевод сегодняшнего материала мы хотим приурочить к запуску нового потока по курсу «Разработчик Java», который стартует уже завтра. Что ж начнём.

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



Два вида памяти

JVM разделяет память на две основные категории: «кучу» (heap) и «не кучу» (non-heap). Куча — это часть памяти JVM, с которой разработчики наиболее знакомы. Здесь хранятся объекты, созданные приложением. Они остаются там до тех пор, пока не будут убраны сборщиком мусора. Как правило, размер кучи, которую использует приложение, изменяется в зависимости от текущей нагрузки.
Читать дальше →
Total votes 14: ↑10 and ↓4+6
Comments6

Умножение матриц: эффективная реализация шаг за шагом

Reading time14 min
Views107K


Введение


Умножение матриц — это один из базовых алгоритмов, который широко применяется в различных численных методах, и в частности в алгоритмах машинного обучения. Многие реализации прямого и обратного распространения сигнала в сверточных слоях неронной сети базируются на этой операции. Так порой до 90-95% всего времени, затрачиваемого на машинное обучение, приходится именно на эту операцию. Почему так происходит? Ответ кроется в очень эффективной реализации этого алгоритма для процессоров, графических ускорителей (а в последнее время и специальных ускорителей матричного умножения). Матричное умножение — один из немногих алгоритмов, которые позволяет эффективно задействовать все вычислительные ресурсы современных процессоров и графических ускорителей. Поэтому не удивительно, что многие алгоритмы стараются свести к матричному умножению — дополнительная расходы, связанные с подготовкой данных, как правило с лихвой окупаются общим ускорением алгоритмов.

Так как реализован алгоритм матричного умножения? Хотя сейчас существуют множество реализаций данного алгоритма, в том числе и в открытых исходных кодах. Но к сожалению, код данных реализаций (большей частью на ассемблере) весьма сложен. Существует хорошая англоязычная статья, подробно описывающая эти алгоритмы. К моему удивлению, я не обнаружил аналогов на Хабре. Как по мне, этого повода вполне достаточно, чтобы написать собственную статью. С целью ограничить объем изложения, я ограничился описанием однопоточного алгоритма для обычных процессоров. Тема многопоточности и алгоритмов для графических ускорителей явно заслуживает отдельной статьи.

Процесс изложения будет вестись ввиде шагов с примерами по последовательному ускорению алгоритма. Я старался писать максимально упрощая задачу, но не более того. Надеюсь у меня получилось…
Читать дальше →
Total votes 90: ↑90 and ↓0+90
Comments49

Что такое Strict Aliasing и почему нас должно это волновать? Часть 2

Reading time9 min
Views12K
(ИЛИ каламбур типизации, неопределенное поведение и выравнивание, о мой Бог!)

Друзья, до запуска нового потока по курсу «Разработчик С++», остается совсем немного времени. Пришло время опубликовать перевод второй части материала, в которой рассказывается о том, что такое каламбур типизации.

Что такое каламбур типизации?

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



Иногда мы хотим обойти систему типов и интерпретировать объект как другой тип. Переинтерпретация сегмента памяти в качестве другого типа называется каламбуром типизации (type punning). Каламбуры типизации полезны для задач, которым требуется доступ к базовому представлению объекта для просмотра, транспортировки или манипулирования предоставленными данными. Типичные области, в которых мы можем встретить использование каламбуров типизации: компиляторы, сериализация, сетевой код и т.д.
Читать дальше →
Total votes 30: ↑27 and ↓3+24
Comments24

Интерпретаторы байт-кодов своими руками

Reading time14 min
Views41K


Виртуальные машины языков программирования в последние десятилетия получили весьма широкое распространение. С презентации Java Virtual Machine во второй половине 90-х прошло уже достаточно много времени, и можно с уверенностью сказать, что интерпретаторы байт-кодов — не будущее, а настоящее.


Но данная техника, на мой взгляд, практически универсальна, и понимание основных принципов разработки интерпретаторов пригодится не только создателю очередного претендента на звание "Язык года" по версии TIOBE, но вообще любому программисту.


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

Читать дальше →
Total votes 71: ↑71 and ↓0+71
Comments107
1
23 ...

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Registered
Activity