Рубрика «оптимизация» - 7

Тоссим руду: очень неочевидная ИТ-задача - 1
Дробилка с выдвигаемым конусом

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

Это чистая оптимизационная задача: надо дробить в заданном коридоре и всем будет счастье. Проблема в том, что мы не знаем, слишком мелко мы дробим или слишком крупно. Конвейер огромный, едет со скоростью 3,15 метра в секунду, глазами люди там ничего отличить не могут. А нужно знать фракционный состав руды.

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

И тут такие приходим мы из ИТ и говорим производству: а хотите в реальном времени? Производство сначала крутит пальцем у виска, а потом говорит, что хочет. Потому что цена эффекта — 115 миллионов рублей в год.
Читать полностью »

Про правильный кокс, ИТ и эксперименты с ним - 1

Наша планета состоит из железа на 34,6 %, но оно в основном спрятано довольно глубоко. Большая часть доступного — в рудах в виде оксидов. При обработке руды происходит два процесса: нагрев (который переводит металл в жидкое агрегатное состояние) и связывание кислорода чем-то с более сильной химической связью, например, углеродом. Для этих целей идеально подходит уголь: он позволяет получить в простой печи нужную температуру и сам по себе во многом состоит из углерода. Сжигая оксиды железа внутри кучи угля, мы можем выплавлять металл чуть ли не в ямах в земле.

Увы, но для промышленного применения просто уголь не подходит. Ямы в земле обладают очень низким КПД. Для того чтобы повысить КПД, нужно увеличивать геометрический размер печи, а при увеличении её размера растёт высота столба топлива-восстановителя. В современных доменных печах у нас она может достигать 18 метров. А это очень толстый слой, но если этот слой не будет газопроницаем, то нарушатся конвекционные процессы, позволяющие происходить нагреву и восстановлению железа. И нарушится ещё несколько процессов, в частности, не будет правильного горения из-за отсутствия отвода газов.

Важна способность топлива восстанавливать CO2. Если она станет высокой, то углерод будет восстанавливать не металл, а превращать перегоревшую CO2 в CO, что резко ухудшит процесс выплавки. Кокс помогает и горению и восстановлению. Он делается нагревом смеси углей при 1000+ °C без доступа кислорода, когда смесь сначала переходит в пластическое состояние, а потом частицы начинают спекаться между собой.

Проблема только в том, что кокс исторически готовился на основании экспертного мнения технологов (основанного на опыте и не всегда системного с точки зрения математики). Примерная формула есть, а точная — только в голове у технолога с 40-летним стажем в виде интуитивного понимания.

Мы придумали способ, как соединить экспертное знание с математикой.
Читать полностью »

Как я уже писал ранее, на FPS в Flame в основном влияют операции, производимые на CPU. Если в вашей игре достаточно много взаимодействующих объектов, то одной из самых дорогих операций будет определение столкновений. Настолько дорогой, что на экране performance-метрики она закроет собой любые другие неоптимизированные участки.

Сами авторы Flame отлично осознают, что их алгоритм – не идеальный, а просто «дающий достаточную производительность». Достаточна она, видимо, для случаев, когда у вас всего объектов 10, не более. Если же у вас что-то более сложное – тогда приятного чтения!

Проблемы алгоритма Flame

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

После написания первой статьи про FizzBuzz (которая неожиданно для меня стала выбором редакции на Технотексте 2021) у меня появлялись мысли о том, что можно бы еще ускорить, но все время было не до того. И тут мне прилетает перчатка.

Продолжаем разгонять FizzBuzz - 1

Так что пришлось расчехлить верный GCC, чтобы помериться кодом с @ChePeter.

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

Немного о «мертвом коде» - 1

А вдоль дороги мертвые с косами стоят

Термин «мертвый код» - это, скорее, жаргонное, чем научное название участков программы, на которые не может попасть управление и, таким образом, они никогда не выполняются. Разумеется, в нормальных программах таких участков быть не должно. Но поскольку языки программирования становятся все сложнее и сложнее (а программисты все тупее и тупее, шутка!Читать полностью »

В этом посте будет проанализировано, как каналы Unix реализуются в Linux. Для этого мы напишем и в несколько итераций оптимизируем тестовую программу, которая записывает и считывает данные через канал1.

Сноска 1

Стилистически эта работа будет напоминать исследование производительности на примере atan2fЧитать полностью »

Прим. перев.: автор данного исследования — Marc Richards, Solutions Architect и DevOps-инженер — продемонстрировал потрясающую настойчивость и тщательность в тотальной оптимизации производительности веб-приложения. Получившийся материал — кладезь полезных знаний для расширения своего кругозора в области оптимизации, особенностей сетевого стека в Linux и не только, даже вне зависимости от практической заинтересованности в конечном результате автора. Приготовьтесь к по-настоящему длинному техническому путешествию с обилием терминологии, увлекательных графиков и полезных ссылок.

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

Оптимизация инфраструктуры: снижаем счет за ресурсы без ущерба для бизнеса - 1

Аудит лишних подписок и участившихся походов в бар — первое, что делает человек, который хочет больше экономить. То же самое можно и нужно делать на уровне компании, когда речь идет о счетах за IT-инфраструктуру. Сегодня поговорим о ряде мер, которые помогут уменьшить ежемесячный платеж за аренду серверов и сопутствующих услуг. Разделим их на базовые, легкие, сложные в реализации и бесплатные.
Читать полностью »

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

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

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