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

Проблема: когда из-за «оптимизации» код замедляется

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

struct HeavyObject {
    std::string data;

    HeavyObject(HeavyObject&& other) : data(std::move(other.data)) {}

    HeavyObject(const HeavyObject& other) : data(other.data) {}
    
    HeavyObject(const char* s) : data(s) {}
};

std::vector<HeavyObject> createData() {
    std::vector<HeavyObject> data;
    // ... заполняем данными ...
    return data;
}

void processData() {
    auto result = createData();
}

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

Кратко

Black-White Array (BWA) — это упорядоченная структура данных с амортизированным временем операций вставки/поиска/удаления O(log N) и Читать полностью »

Ещё раз о ЦП для машинного обучения в эпоху дефицита мощностей GPU

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

Как то раз, школьница племянница спросила меня: а как собираются магические квадраты в математике?
Я конечно вспомнил и показал как собирается обычный квадрат Сатурна 3 на 3.

Но потом задал себе вопрос, а как собрать 4 на 4? И тут меня понесло... Нашел в интернете множество вариантов, формул.

Затем посмотрел на квадрат с другой точки зрения, в силу своей фантазии:

Мы, люди разных национальностей и вероисповеданий по разному воспринимаем порядок вещей и явлений.
Читать полностью »

Как я собрал семантический поиск по 17 миллионам картинок, не разорившись на AWS


Зачем это всё

Я занимаюсь визуальными искусствами и фронтендом более 10 лет. Для креативной работы мне постоянно нужны референсы, причём основанные на ощущении, визуальном стиле, том, что на английском (да и у нас зачастую) называют vibe.

Был замечательный проект same.energy, который решал именно эту задачу. Когда он перестал работать, я почувствовал себя без рук. И, как инженер, решил не ждать, а собрать свой инструмент.

Задача звучала амбициозно: проиндексировать датасет на Читать полностью »

Создатель, смотри как надо было!

Создатель, смотри как надо было!

Язык как средство коммуникации

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

Очень краткий рассказ про семь проектов, построенных одним инженером на унаследованной платформе

OpenCart 3. Много дополнительных модулей. Очень медленная загрузка страниц. Визуально сайт выглядит морально устаревшим. Мобильного приложения нет. Пользователи есть, пользуются, но страдают (с большими экранами очень страдают).

Хотелось не просто ускорить метрики, а выстроить полноценную систему, которая бы работала для пользователя как обычное SPA-приложение: быстро, плавно, визуально современно, а главное с уважением к пользователям.

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

Началось всё с того, что я смотрел ролик про оптимизацию и увидел знакомый по книжкам пример кода, который демонстрирует важность успеха предсказателя ветвлений (branch predictor). Суть в том, что в функции есть ветвление и если предсказатель предскажет неверно, то будет потрачено множество тактов процессора впустую. Оптимизированная версия функции всегда рассчитывает два результата, но не имеет ветвлений.

Так вот, делать было нечего и я решил проверить как это работает на самом деле.
Для этого я взял google benchmark и составил два одинаковых теста на каждую из функций.
BM_GetProduct1 - функция с ветвлением, BM_GetProduct2Читать полностью »


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