impl Rust: One Billion Row Challenge

impl Rust: One Billion Row Challenge

Machine-readable: Markdown · JSON API · Site index

Поделиться Telegram VK Бот
Транскрипт Скачать .md
Анализ с AI

Оглавление (59 сегментов)

Segment 1 (00:00 - 05:00)

Привет всем, добро пожаловать обратно на ещё один... Ржавый поток. Это будет простое место, где мы садимся на несколько часы и просто набросать кучу кода на Rust код, который делает что-то, будем надеяться интересный. Эм, там есть, э-э, там есть Небольшая уборка перед тем, как мы начинать. Эм, номер один, этот канал. Только что достиг отметки в 100 000 подписчиков, что Очень-очень круто. Э-э, это значит YouTube. пришлет мне памятную табличку, так что в конце концов я это сделаю. У меня есть мемориальная доска, это здорово. Эм, это, э-э, это Это, по сути, ничего больше не значит. Но, думаю, это сделали мы. Мы создал большой YouTube-канал, посвященный людям, которые Интересуетесь написанием кода на Rust? Вот и всё. Очень весело. Эм, спасибо тем, кто Подпишитесь на тех, кто воплотит это в реальность. Это весело. Теперь у нас есть большое число. в канал Rust. Эм, ещё один момент: Я также создал код скидки. для станций Ruster без крахмала веб-сайт. Итак, это 100 тысяч подписчиков на YouTube. YouTube 100 000. Эм, что, как мне кажется, дает вам... Скидка 30% на книгу или 25% на саму книгу. Я... я не помню, но проверьте сами. вне. Эм, возможно, это неактивно. К тому времени, как вы это увидите, больше ничего не останется. впоследствии, в зависимости от того, насколько поздно вы относятся к видеороликам. Э-э, но для тех, кто смотрят прямую трансляцию, и для тех, кто посмотрите это вскоре после того, как это произойдет После публикации вы сможете это использовать. код, чтобы получить скидку на книгу отпраздновать. Эм, и в связи с этим, Эм, просто напоминаю, что у меня также есть Активно участвуют спонсоры GitHub. Итак, если вы Если вам нравятся эти трансляции и вы хотите, чтобы я сделал что-то подобное, Если их больше, вы можете стать их спонсором. а затем, э-э, знаете, надеюсь, что это даст мне возможность сделать больше подобных работ. Эм-м-м, А может быть, и другие виды ручьев тоже. Кто знает? Эм, круто. Думаю, пришло время. мы приступаем к тому, что собираемся сделать сегодня. Прошло уже некоторое время с тех пор, как мы сделал осуществил. И отчасти это так потому что я хотел найти правильный Тема, верно? Как будто это правильное решение. чтобы мы могли потратить семь часов кодирования. А потом я Наткнулся на такую ​​штуку, которая называется 1. Вызов миллиарда рядов. Эм, это что-то, что было опубликовано на Java сообщество вернется в начале 2024 года. Эм, и это было, по сути, так: вот что миллиард строк, по сути, CSV-файл метеорологические данные. Так что это, по сути, город и температура. И ваша цель — произвести программа, которая выдает минимальное значение, максимальная и средняя температура для каждого расположение. Таким образом, для каждой метеостанции в наборе данных и сделайте это как можно быстрее. насколько это возможно. Он был опубликован для Java. Так что, в частности, как и все остальные. инфраструктура вокруг него и вся окружающая его территория тестирование и все полученные результаты Все опубликованные материалы были написаны на языке Java. А если вы Посмотрите на официальный репозиторий этого проекта. Эмм, я добавлю ссылку в видео. описание. Эм, вы увидите это здесь, внизу. что существует своего рода рейтинг результаты, э-э, насколько быстро разные Люди это делали. и они сделали это, используя как будто существовало несколько правил для Как это нужно было сделать на Java и что именно? вы могли и не могли сделать это, и какой из них Виртуальные машины, которые можно использовать, и все такое, но В конечном итоге получается результат. которые были вычислены человеком, который Мы организовали это соревнование, и оно было организовано. оцениваться по очень специфическому признаку облачных экземпляров, и у вас их столько-то. ядра, и у всех было одинаковое количество Входной файл был случайным. Эм, А еще есть результаты по следующим вопросам: что, если вы дадите ему больше ядер, или что, если вы добавить больше типов локаций в миллиард строк, как у вас, больше уникальных ключей и так далее. Эм, но в конечном итоге вот так. Конкурс продолжался некоторое время. Эм, а затем Всё уже сделано, как будто ничего и не произошло. Добавление новых данных прекращено. По крайней мере, насколько мне известно. Эм, но Очевидно, что произошло следующее: люди Меня это очень заинтересовало, и я начал желание сделать это на других языках. Так в течение примерно на протяжении 2024 года Эм, вы увидите здесь что-то вроде страница обсуждений и в обсуждениях На этой странице люди делают это во многих местах. другие языки. Эм, и вы увидите здесь если вы посмотрите справа в комментариях Вы увидите, что у одного из них 61 комментарий. в ветке обсуждения, и вот оно что! Ржавчина. По всей видимости, это затронуло людей. В сообществе Rust тоже все очень рады. Отчасти потому, что людям нравятся такие люди. трудностей, и отчасти потому, что я По-моему, люди, работающие с Rust, просто любят писать. создайте высокопроизводительный код и посмотрите, насколько они можно вытолкнуться из него. Эм, и поэтому есть Там много интересных решений. Эм, Было довольно много итераций. экосистема и люди, пытающиеся найти Как мне на самом деле извлечь все это? в последнюю микросекунду от этот. Я ничего об этом не знала. Я нашел челлендж "1 миллиард строк". Не знаю, может, я его и нашел. год назад, а потом я просто это вставил. как будто где-то в бревне написано: «Может быть, я это сделаю» в этот день. А потом я смотрел вокруг темы для обсуждения в прямом эфире. Я подумал: "Подождите". Это отличная тема. А может, мы просто... сделать это? И одна из причин, почему я хотел Сосредоточиться на этом было потому, что Сама задача очень проста. И на самом деле, с чего мы начнём. Сегодняшний день — это просто писать как идиот. наивная реализация, которая просто делает это. И посмотрите, сколько времени это займет. Эм, типа Я думаю, что с версией Java... это включено как очевидно правильное но медленная версия просто для того, чтобы дать люди могут сравнить что-то с чем-то другим результаты получены из. И, как мне кажется, на это уходит столько времени. Примерно две-три минуты на бег. Это как однопоточный, как супер-супер, ммм Простой код. Эмм, и мы напишем

Segment 2 (05:00 - 10:00)

Попробуйте это на Rust 2 и посмотрите, как быстро это получится. то есть. А затем мы продолжим. Анализ причин замедления работы, выяснение причин Что мы можем сделать вместо этого, чтобы ускорить этот процесс? и посмотрим, насколько нам удастся это снизить. В самом соревновании победителем становится тот, кто... э-э, при запуске с восемью ядрами на конкретный пример, который используется... Выполняется за 1,5 секунды. Эм, теперь я тоже проверяю. Эти вещи можно посмотреть на месте, просто чтобы увидеть. Победитель здесь. Поэтому я взял выигрышное решение, которое победило в большинстве случаев категории. Так что не только тот, который был В тот конкретный момент времени он был самым быстрым, но Это был, пожалуй, самый высокий рейтинг в обоих случаях. восемь ядер, все ядра и многое другое отдельный случай, просто чтобы избежать своего рода сравнение с гипероптимизированным решение для данного набора задач. Э-э, и вы увидите, что это похоже на один из Проблемы, с которыми вы столкнетесь, заключаются в том, что Java должна компилироваться во что-то. Но если я Запустите его еще раз, это завершится через... знаю, в основном нет времени, 800 миллисекунды. И это потому, что это происходит использовать все ядра моего компьютера и все. Так что это будет быстрее, чем 1. 5. Но вот что вы увидите вверху. Здесь это даже не самый быстрый вариант. это вариант решения, потому что я используется в стандартной JVM, а не в Growl VM, потому что у меня его нет. установил, но не хочу устанавливать вся инфраструктура Java для управление SDK и JVM и все. Эм, но, очевидно, это так. Это можно сделать очень быстро. Я не Неизвестно, насколько близко мы к этому подойдем, но Мы проложим туда путь, используя наш профиль, и посмотрим. Э-э, посмотрим, к чему это приведет. Эм, круто. Давайте Перейдите сюда. Новый груз. Э-э, теперь мы Нужно выбрать имя. А теперь [фыркает] имя для этого. Мы могли бы просто назвать это миллиардом. Это дорожный вызов, но от этого нет никакого удовольствия. Что А что, если мы сделаем иначе? Давайте сделаем это Задача: 1 миллиард строк. Итак, логотип официального репозитория выглядит так: эмодзи для единицы, эмодзи для буквы B и затем эмодзи гоночного автомобиля, потому что это радиоуправляемая модель. дорожное испытание. Эм, чтобы мы могли сделать что-нибудь глупое, например... пчелиный воск, потому что он пытается стать вощеным. чтобы все происходило быстро, но Буква Б означает миллиард. В Формуле-1 мокрая тяга — это плохо. Не Мне это совсем не нравится. Эм-м-м Мне очень нравится br. Всё идёт хорошо. Это. Это замечательно. Эм хорошо. Теперь мы также собираемся довольно строго соблюдайте правила испытание. Так вот, я... я бегло просмотрел через обсуждение в ветке Rust И я увидел, что их много. решения, которые на самом деле не работают следуйте этим правилам, и я хочу, чтобы мы... действительно соблюдайте эти правила. Эм, так очевидно, что они используют эти версии Java. Это к нам не относится. Эм, но другой вещи, которым мы хотим следовать, без внешних ограничений Зависимости библиотек могут быть использованы. вне стандартной библиотеки. Эм-м-м Реализации должны быть предоставлены в виде единый исходный файл. Я не слишком Меня это беспокоит. ум вычисление Это должно происходить во время выполнения приложения. Так Вы не можете просто собрать RS, который это делает. Все вычислительные ресурсы используются по мере выполнения вашей программой. завершается за постоянное время um для входные значения. Итак, формат здесь будет следующим: Посмотрите на этот конкретный файл. Э-э, но это например, названия станций, а потом, кажется, это запятая, затем температура и затем новая строка, а затем много-много из них. Название станции ненулевое. Строка UTF8 минимальной длиной 10 символов. символов и максимальная длина 10 байты. Но обратите внимание, что это кодировка UTF8. нить. В нем нет точки с запятой или новая строка. Полагаю, точка с запятой — это... разделитель. Эм, и никаких гарантий нет. о том, какие персонажи из «Испытания силы» присутствуют в там. Нет никакой гарантии, что Все они совместимы с Asky или что-нибудь. Поэтому нам нужно убедиться, что мы фактически обрабатывать произвольные имена в кодировке Юникода. А значения температуры следующие: ненулевые удвоения между -99,9 и 99,9 всегда с одной дробной цифрой. Э-э, так мы хотим убедиться, что мы действительно соблюдать эти правила. Максимум 10 000 уникальных названий станций. Э-э, линия Завершающие строки на всех платформах отображаются как новые строки. Нам не разрешено полагаться на конкретные детали. из заданного набора данных. Поэтому мы не можем прописать список станций вручную или что-либо. Эмм, и округление результата Значения должны быть заданы с использованием семантики. направление округления iTle E 754 округление в позитивном направлении. Итак, это они. правила, которым мы должны следовать. Эм

Segment 3 (10:00 - 15:00)

Библиотеки отсутствуют, но стандартная библиотека вполне подходит. Очень несправедливо по отношению к языкам. Полностью истинный. Эм, это часть того, откуда я родом. Вот, как мне кажется, в Rust это выглядит так: осуществимо без внешних зависимостей и Поэтому я хотел бы просто следовать этому. правило. Это правда, что для некоторых это так. языки, которые просто были бы неразумно. Эм, но для нас это именно так. Мы поедем мимо. [фыркает] Эм хорошо Но давайте посмотрим, к чему это приведёт. Эм, так что... Вот входной файл, который я подготовил ранее. э-э, другие, один BRC, э-э, и это [фыркает] вызванные measurements. ext. Итак, если мы спросим Количество строк, которые вы увидите, следующее: Длина 1 миллиард строк. А если бы я спросил Вот что следует отметить в первых нескольких строках. Похоже, что так. Итак, это просто точка с запятой. столбцы, разделенные новой строкой ряды. Это же просто, правда? Например, если бы мы просто сделали это, например, с помощью Стандартный Rust, нет, ничего особенного. Здесь, понимаешь? Мы сделаем это, э-э, пусть заглушит f Открыт ли файл measurements. ext.? И это своего рода разворачивание. программа. А потом я принесу файл. Эмм, а потом я сделаю это. вероятно, сделают что-то вроде Эм-м-м На самом деле, я даже не буду использовать "нет". Мне нужен талантливый писатель, чтобы я мог это сделать. линии. Эмм, я сделаю... накачанного читателя э-э, новый из ф. Значит, мне это не нужно. Здесь можно отключить звук. А потом я это сделаю. строка в F. Строки. Эм, и мы сделаем что-то вроде Здесь находится хэш-карта. И, по сути, нам не помешает увеличение мощностей. 10 000. Мы знаем, что их никогда не будет больше. более 10 000 станций. Итак, давайте на самом деле Нет, это оптимизация. Мы не Выполняется ли в этом какая-либо оптимизация? круглый. Эм, и на каждую строку мы собираюсь сделать... линию точку ой-ой line is line. unwrap. Подождите, почему оно недовольно этим? Ах да. Потому что мне нужно принести бафф чтение хм строка здесь в результате, потому что чтение Возможно, возникнет ошибка при работе с файлом. Эм, а затем мы собираемся сделать станцию ​​и температура — это линия, разделенная точками один раз на точка с запятой снова. Распакуйте. Э-э, мы так и сделаем. Мы не будем проводить никакой оптимизации. Ладно, меня так и тянет заняться оптимизацией. Уже сейчас, но я постараюсь удержаться. это. Температура будет... температура. RS, и мы сделаем это как F64. unwrap. Эм, а затем мы собираемся сделать Эм-м-м статистика и мы собираемся ввести статистические данные. э-э, станция для струны Эм-м-м а потом или по умолчанию. Так что это будет статистика такова: хм Итак, статистика сейчас в порядке, она не знает Напишите здесь, что я собираюсь сказать. тип — это три F64, минимальное значение — среднее. и максимальные характеристики здесь будут следующими: изменяемая ссылка на один из них и Затем мы займемся статистикой. 0ero Z — это э-э, статистика. 0 0 мин с температурой э-э, один к э-э, Макс и вообще-то это придётся сделать быть Эм-м-м Я думаю, чтобы поддерживать работу, чтобы сохранить бег означает, что нам действительно нужно это сделать. И я знаю, что это может быть заблокировано. технически, но мы собираемся добавить еще равная температура и плюс = 1 для подсчёт [фыркает] Эм-м-м нам здесь нужен или по умолчанию, чтобы мы Вставьте станцию, если она не вставляется, если она вставляется. Там этого ещё нет. А потом после Мы все закончили со всеми этими очередями.

Segment 4 (15:00 - 20:00)

тогда мы... О, мы должны... Я думаю, мы... Нужно распечатать станции, например, в... в алфавитном порядке. Дайте-ка я посмотрю, так ли это. истинный. Итак, что же это выводит на экран? Ага, Они напечатаны в алфавитном порядке. в синтаксисе хэш-карт. Э-э, так вот, Это значит, что мы действительно собираемся это сделать. Это древовидная карта типа B. Повторюсь, мы не такие. Мы не занимаемся оптимизацией. Мы не Оптимизация еще не завершена. Эм, а потом мы пойдем сделать для станций э-э мин Сумма максимального значения в статистике. Эм-м-м, верно. И это действительно будет строковый ключ. И для каждого из них мы будем делать мы собираемся сделать печать открытый Фигурная скобка. из А какой здесь синтаксис? Просто нравиться э-э, станция равно мин/что-то/макс. Затем это будет сложено и разделено на части. по количеству. Эм, и тогда вот что на самом деле нужно сделать Нам нужно убедиться, что мы соответствуем этому типу. из разделенных синтаксис. Мы собираемся сделать... мы На самом деле, я скажу, что статистика есть статистика. в пикабельный, чтобы мы могли проверить не последний ли это. Опять же, нет. оптимизация. Нам это запрещено. Эм-м-м а пока давайте Поэтому мы выполним здесь итератор вручную. Эм-м-м is stats. next [фыркает] а затем, если статистика сделает пик сумма тогда мы напечатаем э-э, запятая пробел а затем мы напечатаем конец фигурных скобок. Нам это нужно удвоить, чтобы оно не подумало, что это Указатель формата. Мы не проводим никаких оптимизаций. Были Здесь никаких оптимизаций не проводится. Были Нет, нет возможности поставить лайк и изменить. Мы не занимаемся сортировкой чего-либо подобного. факт. Все это – оптимизации. Мы делаем глупость. Эмм, и я Думаю, нам следует добавить остальных. Здесь производятся замеры. Поэтому собирайте проект вместе с релизом. О, почему оно недовольно мной? Потому что Это должно быть именно так. и это нельзя разделить на это. Это Потому что это должна быть задница 64. А разве не было недавно... хм Я что, div или что-то в этом роде? Мне кажется, они Нет, всё наоборот. Хорошо. Э-э, это должно быть изменяемым, потому что Это итератор. И теперь это должно быть довольны нами. В этом нет необходимости Больше так не будет. Все в порядке. Ну и что произойдет, если я сейчас это сделаю Э-э, пора это сделать? Итак, повторюсь, это однопоточная программа. верно? Итак, если я выполню команду htop, то есть используется 100% одного ядра, что и является целью. Мы ожидаем, что это произойдет. Эм-м-м Давайте посмотрим и на этот момент. И оно просто будет бежать с той скоростью, с которой оно бежит. может. [фыркает] Ваш принцип минимизации и максимизации сбивается из-за... Значение по умолчанию равно нулю для произвольных данных. О, вы правы. Ты прав. Этот Было бы неправильно. Поэтому нам действительно нужно это изменить. Но даже в этом случае, как будто это действительно было бы нереально. Здесь это повлияет на время выполнения. Эм, Оно всё ещё продолжается. Теперь я думаю, что когда я запускал Java по умолчанию, это было именно так. На создание этой версии у меня ушло около 3 минут. Ну, посмотрим, так ли это... так ли это эквивалент. Прочитанное быстро запоминается. оптимизация. Да, но причина, по которой я использовал здесь программу Buff Reader, и мне кажется, что... не считается автоматической оптимизацией потому что это дает мне пунктирные линии, а это как очень идиоматический способ иметь возможность перебирать строки файла. Эм Минимальное значение должно начинаться с f64, максимальное — f64. Да, ты прав.

Segment 5 (20:00 - 25:00)

Сколько времени вам понадобится до прибытия грузового терминала? Таким образом, функция time отображает общее время, затраченное на выполнить команду. Что-то вроде оболочки встроенный. Э-э, думаю, мы могли бы это исправить, пока мы здесь. этим и занялись. Верно. Так что это будет или вставлять. Это должен быть f64 макс. Это может быть ноль. Это ноль и это f64 мин Технически верно. Хорошо. Поэтому программа выполнила следующее. На прохождение дистанции потребовалось 90 98 секунд. Кажется напечатать что-то вроде разумный. Давайте сравним это. здесь. Так, например, Исмир должен быть минус 37,1 - 37. 1 17,9, мы получили 17,89, 8, 9 и так далее, и 67,1 67. 1 Хорошо, похоже, это просто на основе случайной выборки с окончанием Один из вариантов кажется правильным, хм, мы добавим это. Нам также нужно сделать этот принт... только с точностью до одного знака после запятой и, собственно, то же самое и с этими, но Это не должно иметь значения, потому что это всегда значения, которые извлекаются из входные данные, и входные данные всегда имеют положение длины включено. Эм, но даже при этом, Ну, мы... мы это сохраним. Ой. Прохладный. Хорошо. Итак, теперь у нас есть возможность сравнения. примерно 100 секунд. Э-э, это уже быстрее, чем тупой-тупой Java-версия, но они на самом деле не такие уж и хорошие. Сравнимо, не так ли? Потому что нам предстоит компилировать И как будто у нас нет среды выполнения, всё, но это всё ещё как-то очень медленный. Эм, хорошо. Так, Эм, давайте сразу добавим. Я собираются игнорировать измерения. ext Потому что всё остальное было бы безумием. А затем мы добавим вот это. Э-э, глупая версия. А теперь давайте начнём кое-что делать. оптимизация. Мы это сделаем Сначала простые оптимизации, верно? Так что... Простые оптимизации здесь включают в себя следующее: например, э-э через э-э Поэтому карта B2 немного грустная. Э-э, мы Вместо этого можно использовать хэш-карту, которая обычно быстрее получить доступ, а затем просто Отсортируйте ключи в конце. Эм Это может немного ускорить процесс. Эм Здесь не так уж и плохо, правда? Вот, например, эти строки — это то, что вы читаете. из файла в буфер в памяти. вы ищете новые строки в памяти а затем вы получаете субсрезы соответственно. Эм, так что этот не слишком... плохой. Эм, те, что здесь разделены, просто ищет первую точку с запятой и затем дает вам ломтики для перемешивания на любом из двух вариантов. сторона. Эм, это, вероятно, довольно дорого. потому что это означает, что мы выделяем новая строка и копирование их для каждого станция, хотя большинство из них будут Оно уже было на карте, поэтому нам не понадобилось для осуществления распределения. Эм, Минакс здесь. Не должно быть слишком плохо. Э-э, и это только это случается один раз в конце, так что я не слишком С этим связаны большие затраты. Эм, Эмм, хорошо. Итак, существует какая-то форма Здесь есть интересные вещи, но что я На самом деле мы хотим, чтобы они посмотрели. при выполнении записи о выпуске груза Эм-м-м, и посмотрим, что получится Потому что иначе что? Ой. Эм-м-м График, возможно, теперь является вариантом по умолчанию. потому что может возникнуть соблазн в некотором роде Попробуйте угадать, где именно наблюдается замедление. Э-э, Портг Итак, мы получаем практически ничего полезного. не соответствует требованиям производительности. Есть пара таких. Причины этого есть, но главная из них такова: Мы компилируем в режиме выпуска, поэтому В режиме выпуска отладочная информация отсутствует. символы. Хорошо, похоже на проблема. Давайте это исправим. Итак, мы скажем... profile. release. Эм, мы будем считать, что LTO равно полному хотя это, вероятно, не имеет значения здесь. Итак, это похоже на соединение. оптимизация, чтобы вы стали лучше перекрывая, мы стояли и наш ящик для пример. Э-э, мы сейчас скажем «паника». равно борту, чтобы мы избавились от вся эта паническая техника, которая не работает Это важно для нас. Эм, мы также скажем, что нужно отлаживать. равно истине. И просто чтобы посмотреть, как это повлияет вещи. Ах да. Оно должно быть тонким или толстый. Все в порядке. Толстый. [фыркает]

Segment 6 (25:00 - 30:00)

Я просто хотел посмотреть, какое влияние это окажет. Это лишь начало. Возможно, это так. В принципе, ничего. Э-э, но просто чтобы мы сделали то, что делают люди потом скажет: "О, ты «Очевидно, это нужно сделать». ещё один, который похож на генератор кода. единиц равно 1, я думаю, это... ну, довольно неплохо. общий. [фыркает] Эм Я не думаю, что это имело бы какое-либо значение. Здесь много всего, потому что программа очень маленький. Мне не совсем понятно, что бы мы сделали. В итоге приходится использовать множество модулей генерации кода. Во всяком случае, на первом месте. Эм, но давайте посмотрим. так как в прошлый раз это было 98 секунд. [фыркает] И мы это сделали, но мы также предоставили возможности отладочные символы, которые, как мне кажется, есть в Linux. Они забыли, разделили ли они... отладочная информация. В итоге это может привести к... бинарный файл больше, и если есть отладочная информация, но Символ отладки вряд ли что-то изменит. Выступление имело такое уж большое значение. Эм, но я Думаю, скоро мы это узнаем. Цвета ваших грузовых отсеков какие-то странные. Они серые, а не зелёные. Я не Я знаю, что вам сказать. Они поседели Несколько месяцев назад, возможно. Я не уверен почему. Возможно, дело в моей цветовой гамме. где-то что-то пошло не так. Ой, [фыркает] Да. Целевой процессор — это нативный процессор. Это ещё один хороший вариант, который нам следует установить. Хорошо, это заняло 90 секунд. Эм, так вот что-то сделал. Давайте выберем целевой процессор. также является родным. О, что это? [вздыхает] Нужно ли мне это настраивать через Rust? флаги? Думаю, да. А разве нет... Как это можно установить прямо здесь? Я могу это сделать? Все в порядке. Ой-ой, оно не стабилизировалось. Неужели мне действительно нужно делать это через...? э-э, груз Целевой процессор (нативный)? Да, думаю, я смогу. Установите это значение самостоятельно, а не здесь. Я могу установить его Эм-м-м cargo config. toml. Я могу их установить Забудьте, что это было. Да, наверное, это меня огорчает, но всё это... верно. Эм, это тоже немного непонятно. Насколько это нам поможет, потому что Стандартная библиотека поставляется в предварительно скомпилированном виде. Эм, Поэтому я не уверен, что мы получим оптимизация, которую мы хотим здесь осуществить, заключается в следующем: для стандартной части библиотеки код, [фыркает] Но давайте посмотрим. Итак, мы сравниваем до 90 секунд, и теперь это будет с Целевой процессор соответствует нативному. посмотреть, что насколько это влияет на Тем, кто с этим не знаком, например: целевая цель ЦП обычно, когда Rust пытается выполнить сборку бинарные файлы [фыркает] он пытается собрать их для своего рода обобщенной версии вашего процессора, так что, если вы включены Например, для архитектуры x8664 будет создан бинарный файл. Это работает практически на большинстве современных операционных систем. Процессоры x8664... но, возможно, есть и такие, как мой. Процессор специально поддерживает некоторые более новые модели. наборы инструкций, чем своего рода отстаёт от общего целевого показателя из x8664. Так что в нем может быть что-то оптимизированные инструкции, которые, если мы сделаем Использование этого метода ускорит работу программы, но... Кроме того, если мы будем их использовать, то Программа не будет работать на чужих компьютерах. компьютеры. И поэтому это в некоторой степени зависит от обстоятельств. независимо от того, является ли вашей целью создание двоичного кода артефакты будут работать на других компьютеры, например, если вы отправляете распределение. В моем случае я этого не делаю. что. Я запускаю его только локально. Так, Меня устраивает, что Rust может принимать преимущество этих дополнительных сборок инструкции или дополнительные операции что именно поддерживает мой процессор. И Итак, это то, чему соответствует нативный процессор целевого назначения. Сделаю. Эм 92. Отлично. Поэтому он работает медленнее. Идеальный. Ага, это нормально. Мы все еще Живи так там. Э-э, ночные программы Думаю, они неплохие. Ага, портативный SIMD I Думаю, именно так мы и добьемся своего. СИМД. Эм, и — Нет, мы не можем построить. Эм, я думаю, давайте начнём. э-э, переопределение, установленное на ночь, просто чтобы получить Это уже позади. И тогда, конечно, почему? Не занимаетесь ли вы строительством усадьбы? О нет, это не так. Это...

Segment 7 (30:00 - 35:00)

Это сборка Z. [фыркает] Теперь они собираются построить весь комплекс. Стандартная библиотека также из исходного кода. Это функция ночной доставки грузов. О, оно этим недовольно, да? Эм-м-м целевая поставка груза Я верю тебе Давайте посмотрим [фыркает] Да, так что целевой процессор равен нативному. следует использовать все подобные методы. Стандарты MMX, SSE и AVX, которые мои Поддержка ЦП э-э, почему? это одна из многих причин, почему Buildstead еще не стандартизирован, но он есть. несчастный. Эм-м-м ага, Интересно, почему оно недовольно этим. Хорошо, мы можем просто проигнорировать это на некоторое время. сейчас. Я не думаю, что восстановление То, что он здесь стоит, действительно произведёт впечатление. Для нас это огромная разница. Эм, значит, мы будем мы останемся верны нашему старому доброму методу без строительства стояли, и мы могли Всегда делайте это позже. Эм, время покажет Укажите время сборки. Эм, но как вы Здесь можно увидеть время сборки. В принципе, ничего. Но это правда. Я имею в виду, я счастлив. Обычно я использую либо грузовую сборку. Сначала отпустите, или я просто отрежу после того, как... посмотрите, как он начнет работать, а затем запустится Запускаю снова. Да, я полагаю, это всё ещё так. Это займет примерно 90 секунд. Мы этого не сделали Это действительно ничего интересного не изменило. Эм, хорошо. Итак, теперь, если мы это сделаем, я добавлю... груз и добавить груз в формате TOML. Эм-м-м, а затем мы будем производить по каждому регистрируемому грузу запуск релиза. Итак, теперь мы просто собираемся создать запись производительности, которая будет записать множество статистических данных о производительности разберитесь с нашим кодом и выясните, где он находится. оно тратит свое время. Эм и поэтому мы позволим этому немного подлиться. а затем мы выполним отчет о производительности g to Посмотрите, на что теперь тратится время. Э-э, целая куча времени в библиотеке c. О, почему? что Почему это не работает? Символы библиотеки C? О, это потому что э-э, заголовки. Нет, библиотека C. Я забыл, как они называются. на арке. Я думал, у меня они уже есть. установлено. А как это называется? На арке. Что? Эм-м-м. О, это потому что мне это нужно. час Это Пак-Ман конф. Э-э, мне нужно это включить. Это тестирование ядра системы? Нет, это не так. Заголовки Arch DBC. Там что-то вроде альтернативный способ получить Эм-м-м Заголовки DBC. Почему я не могу его найти? Вам понадобится отдельный репозиторий. давать возможность. Да, это разработчик. Это не. Эм, Они находятся в отдельном репозитории, но где именно? Это раздражает. я Надо было проверить это заранее. Прошу прощения за это. Эм-м-м, нет, нет. Посмотрим, преуспеет ли Google в Cogi. чем это.

Segment 8 (35:00 - 40:00)

Я не думаю, что дело в заголовках Linux, потому что Мне кажется, у меня уже есть заголовочные файлы Linux. Ага. Эм-м-м Я в замешательстве. Я был почти уверен, что они у меня уже есть. Эм-м-м, libcdev. В архитектуре это обычно так не называют. Э-э, утверждение "incremental equals false" не должно быть таковым. Здесь рассматривается вопрос для сборки релизной версии. Эм, Это потому, что мне действительно нужно это сделать? этот? Вероятно. Нет. Это заголовочные файлы Linux. Я очень запутана, потому что я довольно красивая. Конечно, я уже делал это раньше. Эм-м-м Да, вы видите отладочные символы на своем устройстве. Оформление произведения искусства. Думаю, это просто что-то, что я... не установлен. О, если только это не... записывать. Эм, Да, это потому что мне это нужно. Назовите граф карликом, я думаю. Посмотрим, поможет ли это. Вот и всё. Посмотрите, сколько ещё данных оно записало. Прохладный. Ага. Да, это нормально. Все в порядке. Сейчас Мы разговариваем. Эм, хорошо. Итак, теперь вы узнаете Убедитесь, что это наш главный объект. А если... мы заходим в главный, э-э, нет, это не то, что нужно. Я хочу. Нет, это тоже не то, что я хотел сказать. хотеть. И вот что вы здесь увидите: Если вы ещё не видели результат, отчёт о производительности, прежде чем он отобразится сам собой. что и составляет стоимость этой функции. исключая своих детей, а дети — процент времени выполнения, который посетили это мероприятие и его дети. Итак, если функция A вызывает функцию B тогда стоимость, а также собственные затраты А, составляют время, затраченное на выполнение пункта А, минус время, необходимое для выполнения задания Б и детей это время, затраченное на выполнение пункта А. включая время, затраченное на выполнить B. Эм, как вы увидите, есть куча, типа, э-э, там куча, э-э... Здесь вы можете сделать множество важных вещей. Эм, в частности, плюс позволяет расширяться вниз. в него. Итак, если мы перейдем к основной части, Вы будете часто это здесь видеть. тратится на вход в дерево B. карта. эмм, который, в свою очередь, тратится здесь на переходя к дереву B, и в частности к операция сравнения для отображения B-дерева Что, впрочем, не так уж и удивительно, правда? Как и большая часть того, что мы делаем со всеми Эта запись выполняет поиск по данной карте. Мы немного потратим времени При синтаксическом анализе — примерно в 4% случаев. о нашем распределении и освобождении ресурсов струны. Верно? Итак, это оно. выделение памяти, а это — освобождение памяти. Таким образом, мы тратим почти 10% наших программа просто выделяет и освобождает ресурсы струны. Эм, а как насчет того, чтобы попробовать сделать Оба этих явления одновременно? Итак, мы уходим. чтобы попасть сюда. Мы собираемся... поменяться Преобразовать это в хэш-карту. Эм, тогда мы начнём матч. вместо этого. Э-э, мы собираемся подобрать подходящий вариант. Мы действительно будет соответствовать получать Мы собираемся включить звук. Эм-м-м, и если мы получим Сначала получим статистику, потом — статистику. Если мы у меня их не было. Тогда мы это сделаем. Мы проведём статистический анализ. точка вставка станция к этой цепочке. И на самом деле мы можем сделать это ага. Так вот, [фыркает] здесь рассуждают... мы собираемся выполнить поиск без Выделение строки. Эмм, а это... Вместо этого буду использовать хеширование и поиск. чем использовать фактическое сравнение строковый ключ. Эмм, а затем мы сделаем... Знаете, если оно там есть, то мы просто... вернуть эту запись. Если это не так, то мы

Segment 9 (40:00 - 45:00)

Вставит запись. А, давайте, есть ли... Нет, такого нет. Хорошо. Поэтому я думаю, самый простой способ — просто получить Изменяемая ссылка, полученная таким образом, предназначена для выполнения или вставьте это э-э, вот так по меньшеймере Да, потому что вставка возвращает один из вариантов. старое значение, тогда как то, что нам здесь нужно, является изменяемой ссылкой на статистические данные. Эм, это тот, который избавляет от... Выделение строк. Мы изменили это на хэш-карта, и теперь здесь мы можем... э-э, там Есть несколько способов это сделать. Мы могли либо разобраться со всем этим или мы могли бы просто перенести их в B древовидная карта. Эм В итоге они получаются примерно такими. Думаю, это эквивалентно, но мы можем сделать это и для вас. know keys is uh stat. keys. colct Тогда займемся ключами. И сортировка по стабильному состоянию вполне допустима. Эм-м-м Затем мы займемся ключами. Это хм На самом деле это займет немного больше времени. потому что нам нужно сделать... так что мы... Чтобы выбраться отсюда, нужны только ключи. а затем для каждой клавиши нам нужно будет сделать следующее: поиск по карте. Эм, я вообще-то думаю... Если мы здесь сделаем карту дерева B, исходя из этого статистика а затем просто оставьте всё как есть. был. Тогда мы сохраним все результаты поиска. верно? Потому что нам не нужно этого делать. поиск в карте B-дерева. Нам это не нужно искать в хэш-карте. Эм, мы просто так делаем. Строительство было завершено. Эм, И это не должно быть приемлемо. Итак, давайте выпустим груз. Итак, помните, с чем мы сравниваем? Вот примерно 90 секунд. Почему бы не использовать вектор из туполей, а затем сортировка по ключу нестабильна? Эм, Ага, понятно. Просто поверните, поверните хэш-карта в вектор, включающий ключи и значения. Это неплохо. Давайте попробуем. Э-э, я просто хочу посмотреть сколько. Итак, мы оптимизировали... выделение строки, строка Освобождение памяти. Мы отказались от использования сравнение строк с помощью простого метода сравнения строк хеширование. Так что это должно быть основано на нашем показателе PF. как минимум на 10% быстрее. Так что это было на 90% в нашу пользу. Это должно сократить время выполнения примерно на 10%. Так Оно должно быть где-то рядом, нас больше не должно быть. более 80 секунд И это 52. Хорошо, круто. Так что, эмм, по-другому... В этот раз выделено меньше ресурсов. и нет частичное комп. Хорошо. Эм, давайте попробуем Предложение здесь, которое заключалось в... статистике. э-э, собирать статистика. Поэтому я думаю, что в этом случае этого практически не произойдет. иметь значение. А причина этого в том, что э-э, верно. Причина в том, что вот что... Печать в конце. Почему? Ага, точно, э-э к А. 0 Эм-м-м сравните B. 0 ноль. Эм, да. Поэтому я не думаю, что это сработает. быть намного быстрее, и вот почему потому что Э-э, дело всего лишь в печати и... Печать — это печать очень небольшого количества записей. Э-э, сортировка по ключу против сортировки по ключу В итоге они оказываются примерно одинаковыми. Между ними нет существенной разницы. На самом деле, я думаю, что сортировка по — это... Предполагается, что это быстрее, чем сортировка по ключу. Эм Кажется, я это где-то читал. Возможно, это уже есть в стандарте. библиотечная документация. Но это лишь пример чего-либо. Если мы проведём здесь анализ, то получим следующее

Segment 10 (45:00 - 50:00)

даже не придем, потому что мы Прекратите процесс еще до того, как он начнет печать. верно? [фыркает] А что насчет того, что ключ — это кусочек? вместо выделенной строки? Эм, это может быть кусочек. э-э, в целях равенства сравнение, не в целях Заказ, верно? Поэтому вы не могли сделать заказ. их по их укусу, но мы могли бы Да, держите их в секрете. Итак, 53. То есть, получается, что... на самом деле он медленнее, но на данном этапе Разница между 52 и 53 — это как... В данном конкретном случае все иначе. Поэтому я оставлю всё как есть. было, и мы можем вернуться к оптимизации. если это окажется проблемой. [фыркает] Эм, карта B3, потому что это Всё очень просто, не правда ли? Эм, значит, я Буду и дальше придерживаться этого принципа. Эм, но так вот Известно, что анализ UTFA довольно прост. больно. Эм, мы уже это получаем. с линиями потому что строка возвращает нам строку. Эм, но В данном случае мы можем сказать, что это будет... быть вектором U8. Так что не стоит и беспокоиться. пытаюсь разобрать байты здесь. А потом мы это сделаем э-э, вместо строки, которые требуют от вас анализа как строка мы сделаем э-э Что мне нужно сделать, чтобы это изменилось? Хорошо, хорошо. Отлично, я сейчас разделю строки. Это уже сломано, но... ну, я... Я объясню почему через секунду, а теперь вот что Мы эвакуируемся, мы разделимся. посредством э-э, буквальная точка с запятой Э-э, чего пока нет в меню "Slices". Это весело. У нас есть Rsplit? Ага. Итак, теперь это должны быть поля. Это так, а затем, по сути, это разделено. n из двух ум по той же причине, что и новый Строка разорвана. Это нужно разделить. 2. Я сейчас же этим займусь. Э-э, так вот температура будет поля точка А это приводит к тому, что они попадают в обратном порядке? заказ? Начинается это в конце последнего матча. элемент, если он возвращается. То же самое относится и к этому. Эм-м-м Она возвращает их в прямом порядке. Хорошо. Так станция — это поля. следующий. развернуть и температурные поля. next. un распаковать вот так. И тогда возникает несчастье, потому что n это должно быть на первом месте. И это должно быть этот ой И теперь оно этим недовольно. потому что теперь это часть U8 и Функция parse ожидает работы со строками. Эм-м-м Итак, мы сделаем стоячее перемешивание из UTF8 температуры, э-э, развернуть, потому что мы знаем что это допустимый кодировка UTF8. Нам сказали что это так. Эмм, и вот Теперь это будет преобразовано в вектор. Итак, мы избегая анализа UTFA для всего. за исключением температуры. Только Температуру мы будем анализировать в кодировке UTF8. Эм и только здесь, когда мы нам нужно построить B-дерево. карта Итак, мы получим ключ и значение, и нам придётся составить карту строка из UTF8 ключ, а затем значение. И снова мы Собираюсь распаковать, потому что всё это в порядке. юникод. Эм-м-м Да, я объясню, почему это сломано. секунду. Я просто хочу начать забег. Ой, Ошибка при разборе недопустимого числа с плавающей запятой. Кажется, я напортачил. Этот вариант лучше.

Segment 11 (50:00 - 55:00)

Я думаю, возможно, это действительно так. перевернуто. Большой. Итак, проблема здесь в том, что при кодировке строк в UTF8, способ Это работает для всего, что задают вопросы. В кодировке UTF8 остается неизменным. Это сингл укус, и это всего лишь один укус. этот персонаж. Итак, новая строка для Например, ну, кажется, ноль в шестнадцатеричном формате. Эм, и если есть ноль, то, например, если в потоке байтов, как можно предположить, это означает новую строку, потому что новая строка I, если у вас есть новая строка от ASI, как и сам новый символ строки, Оно закодировано в UTF8 как hex0A. Он Проблема в том, что UTF8 имеет переменную длину. кодирование. И вот, есть один. укус в UTF, там есть один единственный укус в кодировке UTF8, который гласит следующее является многосимвольным или символом Неправильное слово, но в общем, э-э, то, то Проблема, с которой вы столкнетесь, заключается в том, что если у вас есть Тот персонаж, который это говорит, — это многобайтовый символ, а затем новая строка Тогда это означает, что речь идёт о другом персонаже. Это не означает новую строку. Так что, если вы Просто найдите 0 A в потоке байтов. Чтобы понять, нужно оглянуться назад, нужно посмотреть, так ли это. Предыдущий персонаж был средством побега. Он Аналогичная ситуация наблюдается и с UTF8. Достаточно всего двух персонажей. Он может также может быть три или четыре, в зависимости от Что представляет собой первый укус. И любой из Это может быть буквально ноль или шестнадцатеричное значение. И Это не будет новая линия. это было бы некоторая более длинная последовательность байтов, которая представляет собой уникальный код (unicode). персонаж, который по случайному совпадению обладает байты 0 a в них. И вот почему Этот код на самом деле не работает вот так. Это просто неверно в обоих случаях, касающихся новой строки. Если мы разделимся новой линией, то, возможно, теперь... разделение посередине юникода символ «ум» и точка с запятой, потому что Точка с запятой также состоит всего из двух шестнадцатеричных знаков. персонажей. Я забыл, что это такое. Эм Но если мы поищем этот уникальный код, то... персонаж, извините, если мы будем искать это укус, возможно, это просто тот самый укус отображается в другом юникоде характер. Теперь перейдём к этому конкретному входному сигналу. Я не думаю, что это действительно происходит, но Это не имеет значения. Нам сказали произвольный UTF8, и поэтому мы используем именно его. с этим приходится иметь дело. Эм, продолжение У проигравших всегда самая высокая цена. набор. Э-э, это что? истинный? Э-э, давайте посмотрим на UTF8. продолжение [фыркает] Или, может быть, Википедия. Эм-м-м ага. Так что это разные кодировки UTF8. кодировки. Эм чтобы у нас было верно. Таким образом, это будет всё, что Спросите, верно? Итак, первые 128 кодовых точек тогда, если верхняя часть укуса... один, э-э, тогда это значит, что это, э-э, ну, вы понимаете. Я кодирую биты в... кодирование частей кодовой точки в последующие байты. Ах, но все эти Начинать нужно с нуля. Интересный. Поэтому они не могут быть простыми. Хорошо. Таким образом, это избавляет нас от данной проблемы. Эта проблема не возникает. Хороший. Окей, круто. Не обращайте на меня внимания. У нас всё в порядке. Эм, Так что это может представлять опасность, но на самом деле это не так. Отличная находка, чат. Эм, все в порядке. [фыркает] Э-э, но интересно вот что это не сэкономило нам времени. Были всё ещё тратит около 50 секунд. Так что нет. Выполнение декодирования Юникода здесь не помогло. действительно спасти нас от чего-либо. Это нас спасает Как и в этом случае, нам все равно придется заниматься расшифровкой. Здесь, но делаю это не для станции. Имена не имели значения, что очаровательный. Эм Но даже несмотря на это, я думаю, нам следует его сохранить. потому что мы явно строго придерживаемся этих принципов. Меньше работы, правда? Нет, давайте лучше поленимся. юникод. О, не проверено. Ты прав. Эм, давайте начнём. И здесь то же самое. И тогда нам не понадобится распаковка. безопасность. Э-э, в файле "Readme" было обещано. Мы занимаемся оптимизацией производительности. Эм-м-м Всё в порядке. Хорошо, давайте посмотрим. Знаете, когда в файле readme обещают... Это всё, что нам нужно.

Segment 12 (55:00 - 60:00)

Мы знаем, что находимся в надежных руках. Таким образом, разница между неконтролируемым и проверенная здесь версия — это проверенная версия будет работать с укусом упорядочить и проверить, что оно корректно. unicode um перед и затем вернуть a в результате того, кем мы являемся, это значит, что это Продолжаю декодирование кода Unic. Так Чэд абсолютно прав. Это необходимо сделать непроверенный, что, по сути, просто означает Поверь мне, эти байты в кодировке UTF8, а ты нет. Нам нужно пойти проверить, вот что мы говорим. Это сейчас. И поэтому сейчас нам, по сути, не следует так поступать. Выполнение проверки уникального кода. Ты Теперь вы должны увидеть, как ускорится процесс. 47 секунд. Итак, мы сохранили три полных секунд на прогулку сюда. Ух ты, это же дикий. Вот это ускорение, чат! Мы это сделали. Нет, я не вижу никаких проблем. Отлично. Так, Эмм, мы сделаем поправку и внесем изменения. А потом кто-то сказал: «А как насчет того, чтобы мы... » Удалить проверки на переполнение? Давайте посмотрим. Сомневаюсь, что это принесет много пользы. Разница есть, но знаете, если Мы действительно настроены решительно. О, поверьте мне. Мы сейчас углубимся в... Поиск покуса с помощью Memcar и SIMD и мы перейдем ко всему самому хорошему. Да, конечно, но мы начинаем постепенно. Это, знаете ли, мягкое вступление. [фыркает] Итак, теперь мы собираемся сделать Эм-м-м Хорошо, значит, мы обходимся без переполнения. проверки. Думаю, это позволит сэкономить примерно столько-то долларов. Я не думаю, что это что-либо спасёт. на самом деле. Я думаю, это будет в то же время [фыркает] И да. Проверка на переполнение должна В режиме выпуска он всё равно будет отключен. Ага, ровно в то же самое время. Итак, мы собираемся Оставьте это без комментариев, потому что это уже в процессе выпуска. В любом случае, режим. Все в порядке. Эм, хорошо. Итак, давайте теперь подумаем о том, что мы хотим сделать дальше? Ну, вот что... Меня беспокоит вот это чтение. потому что мы берём файл и мы читать это небольшими фрагментами, но Мы знаем, что нам предстоит пройти весь путь пешком. вещь. Итак, что же мы на самом деле хотим сделать? нечто, называемое отображением памяти, которое скажи ядру: "Эй, можешь просто...? " Сделайте так, чтобы весь этот файл был доступен мне. в память. Э-э, как вы обычно это делаете. В Rust это делается с помощью чего-то подобного. например, ящик Memap, который позволяет вам сделать именно это. Это позволяет вам взять файл, который вы открыли в Linux, и затем отобразить это в нашей памяти в нашу... в нашу вещь. Технически это... внешняя зависимость, и я сказал «нет». внешние зависимости. Итак, я собираюсь запретить нам использовать это, даже несмотря на то, что это сэкономило бы нам много времени, потому что это позволяет нам поговорить. о том, что такое карты памяти и как вы можете используйте их. Э-э, то, что мы на самом деле собираемся сделать Вместо этого нам следует посмотреть, что бы... Что произойдёт, если мы это сделаем? Нет. Да. Как видите, здесь представлен MAPAP. Здесь находится необработанный стол, который на самом деле просто Реализовано для необработанных файловых дескрипторов. Мышление Здесь дело в том, что если у вас есть файл Это всё, что вам нужно: дескриптор файла. чтобы дать ядру указание сделать это операция. Итак, давайте посмотрим, что... Да, это происходит, когда вы составляете карту. Что означает м Новые параметры карты? Ладно, это бесполезно. А затем карта. Итак, давайте приступим к поиску. а э-э, варианты карты э-э, новый Это просто значение по умолчанию. Прохладный. Спасибо. А затем оно отображается на карте, что и является... то, чего мы хотим. Так вот, [фыркает] становится Сначала задается исходный дескриптор, а затем выполняется маппер. О боже. Хорошо, давайте посмотрим на это подробнее. Источник здесь. Э-э, источник Unix новый маппер. Хорошо, значит, он вас вычисляет. Здесь вы увидите, что длина составляет... файл, а затем он передает его дальше. какова длина здесь. файл будет дескриптор файла. Эм, флаги, мы поговорим. О флагах чуть позже. Эмм и затем укажите смещение в нужном файле. с чего начать чтение, это будет Здесь для нас это будет равно нулю. Эм, хорошо, значит, мы... Здесь выравнивание основано лишь на Смещение, которое нас не волнует. Э-э, отрегулируйте параметры карты памяти. Давайте посмотрим, что они там делают. Мы здесь просто чтобы посмотреть, есть ли что-нибудь, что мы можем предложить. Хочу сохранить. хм не беспокоюсь о том, где мы, где мы Здесь происходит гипероптимизация. Поэтому нам всё равно. о 32-битных целевых устройствах. Мы просто уходим сказать, для 64-битных целевых платформ. Поэтому этого быть не может. случаться. Эм Длина равна длине плюс выравнивание. Наш Здесь выравнивание всегда будет ноль, потому что наше смещение равно нулю. Эм, так Это может остаться неизменным. [фыркает] Э-э, это Размер не будет нулевым. Хорошо, это, по сути, всё, что оно делает. Эм-м-м и тогда вы увидите, что он вызывает mm mapap здесь. Карта взята из библиотеки. Теперь libc

Segment 13 (60:00 - 65:00)

Я думаю, это зависимость, которой мы должны быть. разрешено брать, потому что Это либерал. Я собираюсь, я собираюсь подать заявление. Использование библиотеки разрешено. Либби также используется стандартная библиотека. Поэтому мы не фактически брать дополнительную зависимость здесь. Потому что иначе у нас бы было делать что-то вроде звонков от сестры в сыром виде, и что-то в этом роде. кажется чрезмерным. Эм, так вот что это главное. То, что нам здесь нужно. Эм, и я Сделаю это немного лучше. Э-э, а карта. И для этого понадобится файл, э-э... какой из них. И это произойдет вернем вам, э-э, статический фрагмент U8. Может быть не статичен. Ну, мы это выясним. Ой. Нет. Что я сделал? О, я это сделал. Что-то глупое. Я не понимаю что я сделал. Хорошо. Команда `uh file` возвращает статический объект. нет, ломтик. Хорошо, lib cm map. Это будет указатель на null. Отключил звук, потому что мы не пытаемся составить карту. в определенную область памяти. Мы хочет, чтобы ядро ​​сообщило нам, где оно находится. Я это отобразил на карте. Эм, длина будет Эм-м-м fetadata. unwrap. length. Э-э, значит, это и будет длина. здесь. Э-э, защитные элементы. Итак, защитные элементы, э-э, вы скажете вверх, э-э здесь стол. 0 ноль что второй аргумент для отображения нового Да, это просто файл, который находится здесь, внизу. быть увлеченным Эм, защитные элементы — это то, что вы можете по сути, это определяет, является ли эта страница... Необходимо прочитать сопоставление файла. только, э-э, или разрешать права и так далее, э-э, так что Давайте посмотрим, чем мы занимаемся. для защитных элементов. В нашем случае, Всё, что нам нужно, это доступ для чтения. Эм, но Давайте посмотрим, что здесь установлено по умолчанию. self. pop populate. Э-э, позвольте мне продолжить. и посмотрите, какие значения по умолчанию они установили. Варианты MAPAP. Э-э, они это выводят. Итак, заполнение — это ЛОЖЬ. Таким образом, populate имеет значение false. Эм, хорошо. Ой, я же закрыл это, правда? Эм, хорошо. и внутренняя карта создать ОС где находится Ах, если заполнить карту, хорошо, значит, они установили... обнулить заполнение, поэтому нам нужна только защита. читать Да, и мы хотим, чтобы карта была доступна всем. Эм, нас не интересует отсутствие резерва и Нам всё равно на численность населения, потому что мы Не хочу предварительно читать весь файл. Эм, Однако мы хотим сделать еще кое-что. Которую я вам сейчас покажу. Эм, прохладный. А затем компенсация будет следующей ноль. Таким образом, это даст нам следующее: обратное отображение. Э-э, это вызовет панику. В противном случае... Они производятся из сырых частей. Эм-м-м что на самом деле является просто указателем, который имеет добавленное смещение и длина. Так, В нашем случае это просто будет указатель, и мы собираемся сделать стоя... ломтик из сырья. Сейчас их много. причины, по которым это не работает, но давайте разберемся. Давайте, э-э, давайте повеселимся! сейчас. Эм, прохладный. Этот указатель является указателем на C. пустота. Э-э, Лен, здесь мы будем переходить к U. размер. Э-э, это мы сейчас преобразуем в константу. u8 и это будет ошибка stand io

Segment 14 (65:00 - 70:00)

последняя ошибка. Технически это не статичное явление. Эм-м-м технически эта отсылка существует лишь... до эмм, пока этот файл не будет закрыт. Поэтому я думаю, что на самом деле я поступлю так: этот. Ага. Ага. Хорошо. Отлично. Я буду жить жизней. Всё в порядке. Это нормально. Хорошо. Все в порядке. Все в порядке. Прохладный. Эм, так что теперь Что мы можем сделать в этой ситуации, так это продолжить работу. это, но затем мы сделаем карту, которая будет картой М. из Ф. Хм, и есть еще пара других. Что интересного можно сделать в жизни? мм карта, по которой вы также можете указать ядро, как вы собираетесь его использовать. Так, Вы увидите здесь, э-э, не там, но по их типу mAP, хм, Как они это показывают в этой библиотеке? Ага. Итак, у вас есть такая вещь, которая называется... совет, э-э, где можно указать операционной системе Как это будет выглядеть так, как вы планируете использовать? этот. И в частности, есть один Здесь есть одна действительно интересная вещь, которая способность рассказать об этом Э-э, вот. Где их определение чего-либо? совет? Э-э, вот. Хорошо. Итак, вы можете сказать ему, что вы собираетесь прочитать файл последовательно. А это значит, что вы сообщить ядру: "Эй, для этого файла... " Когда я считываю показания при заданном смещении точки укуса, я... Буду продолжать читать в этом направлении. Так что смело берите ещё что-нибудь. за диск от меня, хм, заранее. И так мы собираемся сказать ему, что мы уходим Для этого используется последовательное чтение. И это делается посредством отдельного звонка. Здесь это называется советом от Либби. Эм, мы не будем делать смещение. здесь Эм-м-м потому что это относится ко всему файлу. На самом деле, что они делают и зачем они вообще это делают? Передать смещение? Да, смещение равно нулю. Хорошо, это нормально, потому что вы можете скажем, для этой части файла я сделаю следующее: Читайте последовательно и все такое. Не делает Это важно для нас. В нашем случае мы будем просто скажи здесь хм Мы сделаем это и здесь. рекомендации по использованию библиотеки C э-э, указателя и длины лен э-э Мы собираемся дать совет, посмотрим, что получится. в библиотеке C я задаюсь вопросом э-э, совет э-э, последовательный что составляет два почему ливей Хорошо. Ага, круто. Вот так. А потом мы действительно это сделаем. делать На самом деле ничего подобного не существует. Эм, хорошо. Итак, теперь мы получили карту обратно. Э-э, теперь нам не нужен накачанный читатель. больше. Эм, и мы действительно можем... Возможно, всё ещё будет доступен считыватель с улучшенными характеристиками. Если бы мы действительно захотели, мы бы разрезали. Эм, но В этом нет реальной необходимости. Эм-м-м, Теперь это будет просто поверх карты. Э-э, деление будет произведено на C. C равно новая строка. Теперь нет возможности распаковать упаковку. И это заслуживает звезды. Э-э, Ещё один приятный момент заключается в том, что теперь нам это не нужно. даже необходимо выделять векторы. Но давайте рассмотрим это отдельно. Путь оптимизации. Эм, хорошо, давайте посмотрим, но сначала давайте посмотрим. Не быстрее ли это. Так что помните Мы сравниваем с 48. Поэтому мы побежим. что. Эм, ладно, о чём спрашивает Чад? В чём разница между картографированием? А что насчет чтения всего файла в вектор U8? Разве это не одно и то же? Эм Это похоже, за исключением того, что вам это не нужно. хранить вектор всего содержимого Файл, верно? Так что, если вы это сделаете, вы Для этого потребуется прочитать все миллиард строк. память, а это значит, что ты Выделение такого объема памяти. Вы этого не делаете. необходимо. Эм, если вы просто знаете что вы читаете файл своего рода последовательно, затем вы сможете перераспределите переданные вам вещи. к. В то время как с вектором вы будете приходится постоянно выделять средства вектор удвоенного размера, скопировать

Segment 15 (70:00 - 75:00)

каждый раз, когда вы это превышаете, происходят вещи. приращение. Ооо, интересный. Паника. Что ж, мы рассмотрим Это произойдет через секунду. Эм, чтобы у вас не было увеличиться вдвое. Копировать ничего не нужно. Эм, вы можете освободить эм, более оперативно. и поэтому вам не нужно иметь... довольно не только большой объем используемой памяти, но и Вы даёте ядру подсказку о что вы собираетесь делать в будущем потому что ядро ​​теперь знает, что это представляет собой отображение памяти этого файла. это не работает, если вы делаете... просто увеличиваете читает и B с последовательным флагом мы указывая, где мы будем читать будущее. Итак, начинается загрузка. операции с диска выполняются в фоновом режиме, пока Наша программа работает. Итак, мы получаем фактически параллелизм ввода-вывода. Эм То есть MAPAP на самом деле не копирует. Всё в памяти. Это скорее как будто ядро ​​создает такое впечатление Это так, но ядро ​​отвечает за это. картографирование. Закрытие депозита ничего не меняет картографирование. Необходимо удалить карту памяти, если вы этого хотите. ушел. О, это еще лучше. Итак, вот что даже не обязательно привязывать к что-либо. Прохладный. Э-э, теперь это не сработает. здесь. Интересный. Почему? Э-э, я собираюсь это сделать. Я собираюсь сделать это просто для того, чтобы дать нам немного больше информация о том, что происходит. Эм-м-м это не контролируется из линия. Ага. Да, и с МАПАПом кто-то ещё как указано в MAP, вы могли бы даже отобразить файл, размер которого превышает указанный объем. вашей памяти, тогда как вы записать это в память, это не сработает работа. Эм, то есть оно не выделено в память ядра тоже. Чтобы было понятно, это отображение в память. Так что это еще не все если оно не хранится в памяти. Это ядро создает такое впечатление, э-э настройка системы виртуальной памяти в правильным способом. Эм, так вот как это Действительно ли это работает? Это только карты? по несколько страниц за раз. А, давайте посмотрим. Плохая фраза. Пустая строка. О, это потому что, ну, наверное, есть Новая строка в конце последней строки. Так Здесь мы сделаем это, если строка пустая. затем сломать. В самом задании предполагается, что файл находится в Поместите его в ОЗУ-диск, он уже там находится. память. даже тогда Вы бы так и поступили, если бы делали это с помощью Программа для чтения буферов, даже если она смонтирована в оперативной памяти. тогда вы все равно будете копировать все данные с диска. эти байты в вашу собственную память в отдельный вектор справа, тогда как с помощью карты M ядро ​​реализует что они одинаковы и не обязательно должны быть одинаковыми. Сделайте это... 32 секунды, хорошо, круто, это определенно быстрее... а что у нас есть? Итак, теперь нам нужно получить коммит, э-э, карту. 32. Хорошо, так намного лучше. И Помните, мы по-прежнему работаем в одиночку. основной. Мы не занимались многоядерными вычислениями. параллелизм. Одна из причин этого потому что как только вы это сделаете, оно станет Гораздо сложнее понять, где ты находишься. тратить свое время. Потому что все Потоки выполняют действия одновременно. Это сделано намеренно. Мы делаем это Сначала одноядерная версия. Эм, есть Здесь еще одна оптимизация, которая заключается в том, что мы может, и, по сути, давайте... запишем идеальный результат. просто чтобы продемонстрировать, что я руководствуюсь данными. здесь. [фыркает] Поэтому мы позволим этому продолжаться еще некоторое время. Отчет о производительности. Давайте посмотрим, что покажет команда perf. Эм, хорошо. Мы всё ещё в центре города. Э-э, я всё ещё не понимаю библиотеку C. символы, которые вызывают сильное беспокойство. Хорошо. А куда мы тратим наше время? Хорошо. Были тратить достаточно много времени, 10% Теперь настало время разобрать F64. 5% при разделении здесь, 2% при разделении здесь. Так что определенно потребуется некоторое время на это. разделение строкой и разделение с помощью точек с запятой. Хеш-карты. Ага, так вот, это и есть хеширование. а затем выполняется поиск в хэш-карта. Так что время идёт здесь

Segment 16 (75:00 - 80:00)

Но все равно только 70% попадут в основной состав. Так Куда же остальные? Похоже, Мы теряем часть нашего стека. информация. И поэтому я собираюсь сделать один. Ещё кое-что в конфигурации нашего грузового отсека. э-э, какой Я собираюсь сделать... Как это называется в Rust? конфигурация? Это называется... Это называется «излучающий указатель кадра»? Нет, Это называется force frame pointer equals да, Я считаю. Итак, мы немного поработаем с этим. Мы его уничтожим. Посмотрим, даст ли это нам больше Здесь представлен разумный отчет. Ага. Теперь у нас 99%. Хорошо. Итак, что же произошло? Я делаю? Эм, принудительные указатели кадров. Эм, так когда вы создаёте программы, Эм-м-м, Есть такая штука, которая называется "рамка" Указатель кадра. Не тогда, когда вы их строите. но когда вы запускаете свою программу, происходит следующее: нечто, называемое указателем кадра. Он Указатель кадра — это регистр в процессоре. э-э, который указывает на э-э Нет, это не так, там есть реестр. В процессоре это указатель кадра... но э-э Позвольте мне изменить здесь своё определение. Возможно, я сделаю это с помощью рисунка. Теперь, когда я об этом подумал, я так и сделаю. с рисунком. Мы не провели жеребьевку во время стриминга. Давайте так и сделаем. Эм, хорошо. Итак, когда вы вызываете функцию, Существует такое понятие, как стек. Это не то, это точно не то то, чего я хочу. Э-э, дайте мне чуть меньше Безумная кисть, пожалуйста. Эм-м-м, Безумная кисть, пожалуйста. Нет. Э-э, Почему мой селектор кистей не работает? работающий? Вернись. Почему? Хорошо, ладно. Я сделаю этот. Так, хорошо. Все в порядке. Успокойтесь, все успокойтесь вниз. Щетка. Я хочу, чтобы моя кисть мне нравилась. Хорошо. я Думаю, в этой программе могут быть некоторые беда. Хорошо. Возможно, я не буду рисовать. Итак, вот так. Я знаю, что эта программа этого не сделала. Его обновляли уже некоторое время, и это... показывается. Все в порядке. Отлично. Мы этого не сделаем Это с помощью рисунка. Эм, я постараюсь Объясните вместо этого. Итак, когда функция А вызывает функцию B, обычно в исполнение... хм, там куча всего. это происходит в прологе функции Б. Так вот, это было до... это было до Выполняется тело функции B. мы перейти в то, что называется функция пролога, а затем функция B выполняется, а затем мы переходим к функции. Эпилог Б, который представляет собой код, подобный... Пролог и эпилог вводятся посредством компилятор выполняет те действия, которые необходимы, например, для вызова функций и возврат из функций на уровне ЦП вот так, это что-то вроде этого, это вот так Соглашение о вызове: вот как это работает для например, функция знает, где она находится. Аргументы располагаются так, как будто это что-то вроде... когда А звонит В и передает кучу аргументы где эти аргументы комментарии идите и следуйте правилам телефонного соглашения. что некоторые из них помещаются в регистры процессора. некоторые из них попадают в стек, и они размещено там функцией пролога. В эпилоге также указывается, где Возвращаемое значение уходит, и также... делает инструкция, необходимая для возвращения к а, если а называется б. Итак, это красный цвет. например, инструкция. Теперь, в рамках своего рода функция пролога и Эпилог... хм, есть необязательный шаг. Эм, здесь необязательный шаг — это надеть. стек — это указатель на предыдущий элемент. стековая рамка. Итак, когда А звонит Б, Вопрос, который следует задать себе: вы также нажимаете на кнопку? указатель на местоположение стека A или сделать А вы разве нет? Эм... и этот шаг необязателен. потому что хм, если говорить технически, вы можете вы может, если вы находитесь на вершине из стека B, как B в данный момент выполнять, ну, технически, вы можете выяснить, где находится стек А, э-э, через отладочную информацию, потому что вы же понимаете. масштаб всех аргументов, понимаете? туда, где их положено передавать. ЧАС и поэтому вы можете просто быть у меня. Указатель на B находится здесь, и я сделал вычет. Вся информация, которой я обладаю, должна быть Согласно отладочной информации, находится в стеке. и, следовательно, рамка А должна начинаться здесь. Эм, это куча работы. хотя. Э-э, и эта система отслеживания не работает. Работает безупречно. И поэтому иногда вы Не понимаю, где начинается стековый кадр.

Segment 17 (80:00 - 85:00)

Или же это указывает не туда. И Поэтому это важно, когда вы начинаете расслабляться. стек. А разворачивание стека — это... Что именно происходит, когда вы пытаетесь... конструировать что-то подобное означает следующее: когда вы делаете... когда вы записываете... PF, например, это то, что вы знаете. образцы время от времени. И это проверяет вашу программу, что это такое? Выполняется ли в данный момент? И этот вопрос В данный момент выполняется следующая операция: К какому стеку функций относится эта тема? В данный момент нахожусь в... Чтобы выяснить... что ему нужно пройтись по стеку, чтобы выясните, какая цепочка вызовов функций Программа в данный момент находится внутри. Сейчас что ходить становится сложнее, если вы приходится полагаться на отладочные символы и С рамой гораздо проще. указатели. Эм, теперь причина, по которой люди не знаю, почему люди этого не делают имеют указатели кадров, как в современном стиле. программы или почему они часто дают сбои Причина по умолчанию заключается в том, что был период период, когда процессоры имели ограниченное количество Регистры ЦП. Так что каждый кассовый аппарат был... драгоценный. Вы хотели, чтобы они использовали это для вычислять, а не использовать для таких вещей, как Указатели кадров. Эм, но чтобы толкнуть указатель кадра на это место был необходим. Регистр для передачи указателя кадра. И здесь есть множество деталей, которые В большинстве случаев мы можем это игнорировать, но это возвращается. к тому факту, что был период время, особенно с 30 32-битными процессоры, где регистры были драгоценный. Поэтому мы не хотели использовать их. И потому что это обычно возможно чтобы размотать стек без этого, используя этот регистр используется для указателя кадра, Ну, тогда мы просто не будем это использовать. и использовать это для вычислений. это. Было проведено множество экспериментов. С тех пор это показывает, что на 64-битной системе процессоры, которые обладают гораздо большим регистры. Вам не нужно этого делать. оптимизация. Вы всегда можете просто положить указатель кадра внутри, а затем Расслабление всегда идеально, потому что Информация хранится там. Вы этого не делаете. Нужны ли какие-либо уристические средства? Вам это не нужно отладочная информация. Эм, но настройки по умолчанию не изменились. действительно наверстал упущенное. Теперь произошло усилие по изменению значений по умолчанию таким образом, чтобы Это нужно для того, чтобы мы получили вот это. указатели кадров и всегда добивайтесь идеального результата расслабляюсь. Эм, но, например, Rust, По умолчанию эта функция не включена. Э-э, я Думаю, так и должно быть. Там есть На самом деле, сейчас идёт обсуждение. в э-э, в системе отслеживания ошибок Rust для следует ли нам изменить значение по умолчанию здесь. И я думаю, что сейчас это стало нормой. было изменено на "стоял", но еще не изменилось. или это заменено на ящики? наоборот. Эм, но это что-то вроде То, что, как я предполагаю, вероятно, произойдет Изменение значительно упрощает отладку. лучше, и это на самом деле не делает программы работают медленнее, по крайней мере, в подавляющее большинство из них. У них нет Регистры с неограниченным количеством регистров, но у них есть гораздо больше. Эм, вот почему я выключил Включенная функция принудительного использования указателей кадров так Теперь в моем трассировочном стеке ничего нет. в нем пробелы. Э-э, и поэтому я могу на самом деле просмотрите все это, и теперь вы увидите весь вызов стека Цепочка в идеальном состоянии. [фыркает] Хорошо. Таким образом, мы будем тратить 10% нашего времени на разбор. Небольшое отклонение в максимальных и минимальных значениях. Эм, Здесь достаточно большой объем выделенных ресурсов, хеширование. э-э, поиск информации. Что меня здесь интересует, так это то, что... Здесь нет ничего, что указывало бы на необходимость этого. выполнить распределение для каждой клавиши. И я думаю, причина в том, что потому что мы выполняем это распределение только в том случае, если данной записи там ещё нет. Так только в этом случае мы превращаем это в вектор, и мы отбрасываем только число уникальные ключи. Но теперь мы можем Нет, не надо. Сделайте это, потому что это возможно. Эти объекты могут служить ссылками на карту m. Там ничего нет, там ничего нет Необходимо признать их существование. И вот теперь это может фактически вернуться к тому, что было раньше потому что у нас всегда было собственная версия вот так. И это довольно интересная вещь, которая делает код лучше. Эм-м-м и теперь это можно запустить из UTF8 потому что это не обязательно должна быть строка больше нет, потому что у нас уже есть ссылка. Эм, вот это уже что-то. где, я думаю, это на самом деле не произойдет Измените ситуацию к лучшему. [фыркает] Эм, а какой был наш предыдущий забег здесь? Если мы вернемся к началу, то наш предыдущий забег был... 32. Это, вероятно, не приведет к результату. разница, потому что нам все еще 32. секунд, а это довольно долго. И Большинству клавиш это делать не нужно. распределение. Эм, то же самое и с строки в конце. как распределение эти струны. Мы только распределяем что? Менее 10 000 струн, потому что Это просто количество ключей на карте. Количество уникальных ключей на карте. Так

Segment 18 (85:00 - 90:00)

Думаю, это не принесёт результатов. разница. Но это то, где Да, по сути, это одно и то же число. Но по мере оптимизации остальной части кода, Это важно. Поэтому я просто это сделаю. проявлять инициативу, хотя я знаю, что мы должны Принимайте решения, основанные на данных. Это преждевременно. оптимизация, но я собираюсь это сделать. в любом случае. Эм хорошо. Пожалуйста, выделите меньше средств. Разве это не нарушает последовательность? Прочитать предположение? Эм, нет. О, это интересный вопрос. Это действительно интересный вопрос. Ага. Нет, вы правы. Давайте это исправим. Я думаю Не знаю, правы ли вы, но я Согласен, я хочу это измерить. Э-э, так Давайте сделаем... может быть, вот это? может быть, сделать ключ, но измерить, поскольку мы ломаемся последовательный. Оно по-прежнему будет на странице полковника. кэш, но это означает, что мы держим по сути случайный набор страниц Потому что у нас случайно оказались к ним ключи. Эм, и мы будем получать к ним доступ каждый раз, когда мы смотрим на карту. Так, Полковнику придётся продолжать Запомните эти страницы. Вероятно, там Их не так много, поэтому они не используются. большая часть памяти, но учитывая, что это не так даже в рамках наших текущих квот, Думаю, лучше оставить всё как есть. Эм, хорошо. Итак, давайте начнём. Давайте сделаем рамку Пожалуйста, подскажите. Эм-м-м хорошо. Что у нас дальше? Так что в нашем Отчет PF, что мы получили? Что где Иначе куда бы мы тратили свое время? Ну, в здесь. Э-э, в основном, мы тратим приличные деньги. количество времени здесь, занимающееся разбором чисел с плавающей запятой числа. Эм, и это печально. Мы этого не делаем не хочется тратить столько времени на разбор Числа с плавающей запятой. Итак, как насчет того, чтобы мы... Сделали бы вы что-нибудь лучше? Ну, э-э, Помните, что это числа с плавающей запятой? Числа с одной десятичной точкой? Ну, это просто целые числа, сдвинутые на степень числа 10. Так что, давайте сделаем это. вместо того, чтобы интерпретировать их как F64, Эм, мы их интерпретируем следующим образом: э-э, i16s. Эм, так вот, это будет немного Интересно, потому что нам придётся пропустить точка. Эм, Теперь мы действительно можем это реализовать. анализируя самих себя э-э, говоря о температуре равно нулю. А затем мы собираемся сделать знак будет Эм-м-м температура ноль равен минус на самом деле Мы собираемся сделать температура будет скопированный Почему бы и нет? Это байты. А потом Пытаюсь решить, как я хочу это сделать. Есть что-то вроде глупости. Простой способ – это просто разветвление. Э-э, независимо от того, знак минус или нет. Эм Есть еще один способ, которым делать не следует. вообще никакой ветки. А как насчет того, чтобы мы это сделали? А как же начать с простого способа? Поэтому мы говорим, если нулевая температура равна этому значению, то она равна нулю. тогда температура - это температура, пропустить один еще а это значит, что мы можем это сделать Пропускать

Segment 19 (90:00 - 95:00)

кто-то другой ноль. А затем мы скажем Температура равна нулю. А затем еще четыре. Мы знаем, что всегда ровно три цифры. Итак, мы собираемся сделать 4 Я в 0 до трех. Эм, причина, по которой мы хочу использовать явный цикл "uh" Итерация здесь происходит потому, что тогда Компилятор ведь умеет разворачивать циклы, верно? Мы говорим, сколько, э-э, сколько Это персонажи. Мы знаем, что это не так. Нужно посчитать. А потом мы скажем... температура умножить на равно 10 Эм-м-м верно, потому что это умножить на 10, итого... Предыдущее число, которое у нас есть. Были сдвиг предыдущего числа влево. Эм-м-м а затем мы добавим температура на самом деле, для меня нам нужно быть немного Более конкретно, потому что это будет 0 э-э 1 2 нет 0 013 верно, потому что нам это нужно, мы стремимся к этому знак минус потенциально знак минус мы Главное, чтобы эти двое помнили, что это находится в диапазоне от -99,9. и положительный 999 9,9. Итак, мы хотим... две целые части числа и тогда мы хотим пропустить десятичную запятую. а затем мы хотим получить персонажа после запятой, и мы идём просто относиться к этому так, как будто это трехзначное целое число. Итак, плюс равен температуре 1. Э-э, здесь тоже нет никаких ограничений. Проверки, но это нормально. Мы внутри В любом случае, режим выпуска. Эм, верно. А теперь это будет I16 max, i16 мин. Э-э, i16. И, собственно говоря, Я думаю, это неправильно. Это... Здесь следует пропустить. Это похоже на смещение. И мы хотим Здесь пропустить плюс i. И это нужно сделать так, чтобы не возникало псевдонимов. ценить. Это модель U8. Э-э, которое мы сейчас и будем использовать для заклинания. Нет, Это персонаж. Итак, вот это будет равно -b 0, верно? Так мы собираемся вычесть слово «asky» значение нуля из значения asky цифра, которую мы рассматриваем. И это дает нам фактическое числовое значение. Эм а затем всё это мы собираемся состав 16. Теперь это фактически равно нулю. Это будет... Это будет из т. И это произойдет быть из т. Э-э, но здесь накопитель Вероятно, его должно быть больше, чем I6. Этот Вероятно, это должен быть i32. потому что если у вас достаточно строк и мы их складываем вместе, чтобы мы могли в конечном итоге взять среднее значение, а затем вот это нужно быть... Это может привести к переливу. I16, ​​что составляет всего 65 000. Так что, если вы Учитывая количество строк, которые у нас есть, я Если мыслить реалистично, это должно быть большего размера, как и должен быть аккумулятор. больше, ну, это нормально. Это может просто быть I32 из этот. Аналогичным образом может быть получен I16 из. Эмм, я как правило, предпочитают использовать от реализации, а не приведения типов. потому что для подобных вещей которые непогрешимы. Э-э, просто так Это выглядит как статика, если посмотреть на код безошибочен, тогда как Передача данных может быть с потерями. Это не так. Допускается наличие потерь. Эм, а затем вниз здесь, Эм, печать будет немного сложнее. Теперь это еще страннее, потому что Печать этого действительно приведет к повороту.

Segment 20 (95:00 - 100:00)

обратно в э-э, числа с плавающей запятой 164. [фыркает] Вы считаете, что это должно быть на трассе I64? Не уверен. Думаю, мы могли бы сделать 64. Не думаю. Нам понадобится 64, но ладно, хорошо. Эм, Теперь печать стала немного сложнее. потому что теперь у нас есть эти целочисленные значения что нам нужно вывести это в виде десятичных дробей. Эм, мы могли бы вернуть их обратно на поплавки и затем распечатайте их. Эм, учитывая, что печать недорогая, Возможно, именно этим мы и занимаемся. Итак, это будет, э-э, минимум f64 / 10. Эм, Макс макс. как f64 / 10. И вот что должно быть сумма как f64 э-э, разделить на 10, разделить на это. Ага. Ах да. И нам не хватает... Да, мы тоже здесь, нас нет. Эм-м-м точка. Э-э, если пропустить если равно 1, то t минус t. И вот здесь мы и доберемся в задачу предсказания ветвлений, но Об этом мы поговорим позже. Эм, Что я напутал? О, это необходимо иметь толстую кишку. Это должно иметь толстая кишка. Хорошо, давайте посмотрим, что у нас получится. здесь. [фыркает] Неа. L равно трём, но индекс равен три. Эм-м-м, интересный. в режиме выпуска. Интересный. Эм, Это интересно. О, это будет хорошо. Мы не можем этого гарантировать. потому что хм потому что Нет гарантии, что будет два целых цифр, верно? Девять 9 9,3° не равен нулю 9,3°. Оно не заполнено нулями. Эм так ага. Хорошо. Эм, Мы могли пройти с задней стороны. здесь. Я думаю, что идти отсюда с тыла — это... На самом деле будет проще. Фактически, Это поможет с прыжками. Здесь тоже. Итак, хорошо, так и будет. ноль. Затем мы сделаем 4 i в Эм-м-м от 0 до 4 в. Давайте рассмотрим только температуру. Давайте видеть. Давайте посмотрим, как справится компилятор. с этим. Итак, мы скажем... Мы пойдем с той стороны. Мы скажем, если я являюсь точка, затем мы пропустим. Да, и я знаю этот алгоритм предсказания ветвлений. Вероятно, будет грустно.

Segment 21 (100:00 - 105:00)

Эм, а затем мы добавим, что мы этого не делаем. Мусорный контейнер больше не нужен. Э-э, а это... Не я, теперь это D, то есть цифра. Эм, а затем вот что будет Эм-м-м Нам нужен крот. Итак, один маленькая кротовая крота моль, умноженный на 10, равен 10. Верно? Поэтому мы идём справа. Мы Возьмём имеющуюся у нас цифру. Мы умножаемся с множитель, который начинается с единицы и тогда станет 10, а затем станет 100. Итак, мы берем первую цифру и умножаем ее. это на единицу, что представляет собой просто сложение цифр. что к т. Затем мы снова обходим круг, мы Теперь перейдём к следующему персонажу, возвращаясь назад. Это необходимо пересмотреть. Эм, на самом деле это будет матч. на d, где если Эм-м-м Если мы нажмем на точку, то продолжим. Если мы ударил минус Затем мы делаем перерыв и говорим, что это минус т. Эм-м-м а в противном случае мы делаем вот что И вот так это должно выглядеть. И теперь всё это исчезнет. середина наружу. Да, это забавно. В данном случае, наоборот, можно поступить следующим образом: Найдите точку, преобразуйте в формат I64, используя... стандартная логика синтаксического анализа Rust, э-э, и затем разобрать дробную цифру, которая Мы знаем, что оно всегда там. Эм, я не... Убежден, что это быстрее. В некотором смысле это так. зависит от сложности синтаксического анализа Rust. Здесь присутствует логика. Эм, И было бы здорово, если бы мы могли сообщить компилятору, что нам известно о Эти цифры, верно? Температура всегда... э-э Всегда содержит не менее трех цифр. Но давайте посмотрим, что из этого получится. с этим, э-э, Б. Все цифры отмечены точкой. Да. [фыркает] Э-э, мы могли бы подобрать подходящую длину. ломтик, но это не указывает, есть ли там тире в виде отрицательной или пропущенной цифры, верно? Итак, 9,3 — это то же самое число. персонажей как 99. 3. Ага, круто. Теперь это занимало 30 секунд, так что На самом деле не быстрее. Эм, давайте сделаем Посмотрим, что получится. Посмотрим, что будет на этот раз. от. Очевидно, что многое из этого по-прежнему остается хэш-карта. хм разделение и R-разделение, но я не вижу, чтобы что-то было потрачено. при разборе. Таким образом, время обработки данных теперь составляет, по сути, Ушёл отсюда. И все же мы не быстрее. Интересный. Да, исчезло около 10%, но мы — нет. На 10% быстрее. Но это может быть просто удача. ничьей или её отсутствия, верно? О, есть вот этот итератор, что представляет собой итерацию, начиная с самого начала. температура, но это в сумме дает... 1% времени выполнения. Эм, это тоже из тех вещей, которые... вы можете извлечь это с помощью таких инструментов, как Сверхтонкий, верно? Которая его запустит несколько раз, попробуйте собрать что-нибудь... некоторая информация. О, это потому что это В линию, верно? Таким образом, стоимость по-прежнему там. Это просто не отображается как... Ага. Итак, если мы перейдем к главному меню О, вот. Что? Нет, Я вижу, что это стоимость, указанная в основном файле. поднялся. Ага. Все в порядке. Эм, есть Так что вы также можете подойти сюда и сказать: «Э-э».

Segment 22 (105:00 - 110:00)

Добавьте аннотацию br main, и тогда отобразится вам фактическую сборку для этого функция и какой именно конкретный Инструкции вызывают у вас это. расходы. Эм Теперь это должно также предоставить мне источник. аннотация, но почему её нет? Эм-м-м, О, это именно то, чего я хочу. Это полностью бесполезно. Почему мне это не отображается? Эм-м-м Не отображается номер строки исходного кода? Да Поехали. Хорошо. Итак, теперь у нас есть встроенная функция. весь код Rust, это... Меня действительно вызвали сюда. И если Теперь мы поднимаемся вверх. Где наш? Сбросить здесь? Это именно то, чего я хотел. Хорошо. Так что, если присмотреться, то получится, что вы будете читать между строк. Здесь вы увидите, что мы сейчас находимся в основной. Возможно, это трудно заметить, потому что... Всё встроено, верно? Эм, но вы... Видите несколько знакомых звонков? Нравиться Вот наш, вот наш I65, и так далее. на. Эм, и вы увидите, если предикат. Ага. здесь или 4d по температуре. И так вы можете видеть, где все время что-то вроде процент времени, затраченного на каждую сборку Инструкции поступают из... А вот это Сравнение здесь, на D, безусловно, является тем местом, где Часть времени поступает извне. Были Однако мы приближаемся к сути дела. где рассматривается сборка Инструкции несколько вводят в заблуждение. потому что также где находится процессор, например, какой часть процессора, которую вы в итоге фактически используете уделяя этому время. Эм, ну и что? то есть, это означает следующее: Этот прыжок дорогой, но почему? Резкий скачок цен? Что это такое? В данном случае, затраты ресурсов процессора на выполнение этой задачи высоки? И Вот тут-то вы и начинаете разбираться в таких вещах, как... ошибочное предсказание ветвления и предварительная выборка данных. и всё такое. И то, что вы можете делает это, э-э, идеально. Ой, я никогда не помню, что именно. Это называется. Это как идеально... производительность что-нибудь. Статистика производительности. Эм-м-м статистика производительности. Вот именно то, что мне нужно. Ах, может быть, я просто запущу это с помощью этого? и посмотрим, что из этого получится. Ага. Итак, здесь вы увидите, что это показывает... Это как если бы мы не давали ни строчки. Здесь можно просмотреть построчно, или по функциям. вид. Вместо этого мы получаем информацию. о том, как процессор распределял своё время, Куда же делось время? И вы Видите, мы выполняем три инструкции за цикл. эмм, некоторое количество застопорившихся циклов. Так Зависшие циклы — это когда процессор хочет запустить что-то, но это не удалось, потому что Данные еще не были доступны, потому что... Все равно пришлось восстанавливать из памяти. Эм Вы также увидите, что да, мы потратили примерно столько-то. Примерно 8% процессора простаивает, потому что Оно ждёт чего-то. Эм, число количество ветвей в секунду — это очень много. ветви прямо там, где мы ветвимся три миллиарда раз в секунду. ветви Они дорогие, потому что процессор в идеале... как будто оно знает, о чём эта программа. сделать, и поэтому это имеет множество там вычислительные единицы и тому подобное. может получить доступ к памяти и к тому, что... операции с плавающей запятой, и в идеале вы Держите все эти функции активными одновременно. Он Способ сделать это заключается в том, чтобы вместо просто выполняя следующую инструкцию вы Выполните следующие 10 инструкций. всё параллельно, потому что вы используете различные части центрального процессора. Но когда ты иметь ветку, то есть, как если бы это было так или иначе В таком случае процессор не будет знать, какой именно. Вы выбираете отделение. Поэтому оно не знает Какой код выполнить следующим? Так что же такое процессор? Обычно он пытается угадать. в каком направлении вы собираетесь учиться, исходя из... На каком направлении вы выбрали ветвь? прошлое. И если это, скажем, произошло в прошлом Вы выбрали отделение А. Так что это произойдет начать выполнение кода в A ветвь. К тому времени, как станет известен результат... Ветка известна, потому что, опять же, помните оно запускает несколько процессов одновременно. параллельно. когда известно о результате Если ветвь неправильно предсказала ситуацию, то и если она Предсказали вариант А, но на самом деле получилось вариант В. Придётся выбросить всё, что было сделано. в ветке A и теперь выполните Материалы находятся в ветке B. Итак, это ошибочный прогноз. Когда у вас есть ошибочные прогнозы, и в итоге получается следующее: Именно в этом сейчас и заключается проблема с процессором. Нужно, например, выбросить кучу работы, которая Да, так и было. Таким образом, эти циклы процессора были потрачены впустую. но также, возможно, придется подождать В это необходимо загрузить следующие данные другая ветка, потому что она их не загрузила потому что оно не думало, что так произойдет Необходимо это сделать. Эм, и вот что это такое где у вас есть такая штука, которая называется генератор предсказаний ветвлений, который пытается сохранить отслеживание этих ветвей и в каком направлении вы берете. Но обычно, если у вас есть

Segment 23 (110:00 - 115:00)

ветви, которые очень трудно предсказать, например, есть ли минус знак в начале этого температура, которая будет примерно такой 50/50, тогда хищник, питающийся ветвями, часто оказывается именно таким. Я ошибусь. И поэтому мы часто бываем Собираюсь выбросить это, это... это циклы. И вот, вы это увидите. Неверно спрогнозировано 2% всех филиалов. Но Это нам не очень поможет, потому что Проблема, с которой мы здесь сталкиваемся, заключается не в этом. Какой процент всех филиалов приходится на это, если На критическом пути имеется ответвление. подобно тому, как мы выполняем программу очень часто, а затем ошибочные прогнозы эта ветвь, даже если это всего лишь одна, может вызывает много заторов и много потраченные впустую циклы. Эм... и в чате указали Вы можете использовать комбинацию рывок-d, чтобы получить больше характеристик. Убирайся отсюда. Эм, тогда мы позволим этому продолжаться некоторое время. Вот и всё. Теперь мы получаем больше статистических данных. Эм, вы увидите, что это выглядит вот так. Как часто мы загружаем данные? Мы можем получить его из кэша. Это место находится ближе всего к процессору. Как часто это делается Мы что-то упустили в этой части процессора? Эм, На данный момент мы это проигнорируем. Это что-то вроде... всякой всячины вокруг... таблица страниц и когда вы совершаете ошибки и всё это. Я думаю, мы можем в большинстве случаев Не обращайте на это внимания прямо сейчас. Эм но ошибка прогноза на скамейке запасных здесь заключается в Немного грустно. Ещё один момент, который мы увидел это, и я думаю, что В основном это происходит из-за такого синтаксического анализа. Эм, то Еще кое-что, что мы увидели в ходе нашего исследования производительности. отчет дело в том, что мы тратим приличную сумму. нашего времени здесь, внизу, в период раскола. и Rsplit. Итак, разбор новые строки и точки с запятой. Эм, так Нам, по сути, предстоит выбрать, какой из них мы... Хочу сделать это в первую очередь. Мы хотим попытаться ускорьте... э-э, то, что происходит вокруг разбор, который, напомню, составлял около 10% и, вероятно, по-прежнему составляет около 10%. Это просто оно не отображается как подписка функция. На самом деле, может быть, давайте сделаем это так? Вспомогательная функция, чтобы она отобразилась. Эм-м-м Давайте так и сделаем. Итак, э-э, разобрать... анализ температуры э-э, какой вариант занимает температура, которая представляет собой срез u8 и Это вернет вам i16. А затем мы берём всё это Вот это. Это исчезнет. Сейчас мы это делаем Вставьте это туда. Теперь это возвращается Т. А затем мы говорим: пусть T — это парсер. температура температуры. Хорошо, давайте посмотрим, что из этого получится. этот. Эм-м-м, Поэтому мы позволим этому продолжаться некоторое время. А теперь мы это сделаем за порт. Вот, мы выбираемся. Ага. Хорошо. Таким образом, наша парсерная температура которая содержит полезную информацию, встроенную в текст. составляет примерно 8% времени выполнения. Итак, мы Сэкономили не так уж много по сравнению с 10%, которые были числами с плавающей запятой. хм, разбор. Мы немного сэкономили, но не так уж и много. А если мы заглянем внутрь Из этого она на самом деле не говорит нам, где именно. Это время уходит. Эм хотя мы могли бы здесь Нет, всё в порядке. Хорошо, это допустимо. Эм, Теперь я хочу О, почему бы и нет? О, потому что это вписано в текст. [вздыхает и задыхается] Ага. Могу ли я все еще? Да, именно этим я и занимаюсь. беспокоился о. Эм, мы можем здесь, если мы Очень хочется сделать... э-э, в линию, никогда. Это замедлит работу программы, но... Это также позволит нам заняться самоанализом. конкретно сборка этого функция для анализа того, куда расходуются средства Пришло время. Эм, это может быть не так. Очень полезно, но посмотрим, что получится. В любом случае, я вне игры. Эм... так если мы войдем сюда найти основной разбор температура, и я хочу это отметить. с указанием источника. Э-э, без источника, возможно, э-э с источником хм Посмотрим, чем всё закончится на этот раз. Так анализ температуры Эм-м-м добавляет, так что это просто сложение.

Segment 24 (115:00 - 120:00)

индексирование в массиве температур. Э-э, тогда эти... частичная неделя для указателя. Ага. Этот это проверка завершения цикла Неужели мы достигли предела температурного диапазона? Эм, я думаю, мы можем это опустить. исключительно потому, что вместо этого мы можем просто... циклом перебирает определённый набор чисел. Мы можем просто пройтись по индексам в цикле. напрямую. Эм... так что, вероятно, мы можем это сделать. полностью исключить, потому что мы уже Здесь будет явная пауза, когда мы ударить, ой-ой, нет, мы не узнаем, потому что В таком случае минусов может и не быть. так, как ты знаешь, как ты в конце или начало чего-то, но это кажется чем-то, что может быть оптимизировано. Эм, а потом Да, это версия из Вернитесь сюда, верно? Потому что мы Уменьшая значение указателя, мы движемся с конца. Эм, и вот наши прыжки для совпадение по D. А затем у нас есть Да, умножение и сложение. на это потребуется некоторое время, а затем у нас будет подскочить обратно. Итак, у нас есть Довольно много таких, как прыжки и Инструкции по ветвлению — это, к сожалению, неудачное решение. Этот прыжок вообще не должен быть необходим. потому что мы должны иметь возможность развернуть это цикл, по крайней мере, в теории. Эм Да, дайте мне подумать, как мы хотим это сделать. этот. Но я думаю, что вопрос всё ещё остаётся открытым. возникает, верно? Например, хотим ли мы потратить оптимизация времени анализа температуры первый? Как я думаю, мы и собираемся сделать. Оба варианта верны? Хотим ли мы потратить наши оптимизация времени анализа температуры или что-либо еще мы хотим потратить наше время на оптимизацию хм, разбор текста э-э, своего рода извлечение разделители. Эм, я думаю, может быть, давайте... Переключитесь на секунду и займитесь этим. э-э, разделители. Да, давайте так и сделаем. Хорошо, Поэтому оставим обработку температуры на этом этапе. Мы вернёмся к этому позже. Эм, [прочищает горло] температура как внутренняя. А теперь давайте выясним, что мы можем сделать. Что делать с этим расставанием? Итак, один из Что раздражает в Split: что он проходит путь от персонажа к персонажу и Сравнивает их с помощью замыкания. Эм, это Хорошо, если вас это не волнует. производительность, но если вас это волнует выступление в итоге оказывается очень-очень медленный. Итак, каковы же способы, которыми мы можем... Сделать это лучше? Ну, их несколько. Так что один из вариантов — использовать что-нибудь называли э-э, мёр. Так что меур Это, по сути, супероптимизированный вариант. функция для поиска первого появление символа в каком-либо последовательность байтов. И вот что это делает со всеми этими симуляторами и прочим. Так что это очень-очень быстро. Эм, теперь есть и другие. способы сделать это, например, в основном внедрить memcar самостоятельно. Эмм, я забыл. Пойдёт ли со мной Либби. Да, это делает. Хорошо. Так что давайте сделаем это вместе со мной. Сначала посмотрим, что получится. к. Итак, мы будем делать это следующим образом: мы будем следить за тем, где мы находимся. в. Эм... и мы будем следить за Вполне возможно, этого нам и не нужно. Эм и тогда это станет петля. А внутри этого цикла мы будем... позвонить в Memcar, на что уходит три часа. вещи. Она берет строку, которая Мы пытаемся это разобрать. Итак, в данном случае, Это будет... ну, или кусочек. Мы пытаемся это разобрать. Это произойдет Это будет карта, но она будет конкретно... Карта начинается с этого места, верно? Потому что Вот на каком этапе мы сейчас находимся. Мы не хочу начинать поиск с самого начала файл. Эм тогда, э-э, это тот персонаж, который укусил. то, что мы хотим искать. В нашем случае Это будет новая линейка продукции. А затем Здесь указана длина карты. Э-э, так Остальное здесь будет на карте. Таким образом, здесь мы можем сказать, что это Будет отдых, и это будет остаточная длина. а то, что оно возвращает, это... а указатель на то место, где, как мне кажется, это находится Появляется персонаж. Итак, дальше будет пусть будет это следующая строка, или это действительно следующая новая линия. А если мы посмотрим на документацию, то... Здесь, для Мекара, вы увидите, что... Здесь, внизу, сканируются начальные конечные байты область памяти, э-э, как C, так и байты интерпретатор памяти unzended car

Segment 25 (120:00 - 125:00)

Вы также можете выполнить поиск в обратном порядке. В итоге мы добьемся совсем не того, чего хотим. здесь. Она возвращает указатель на соответствующий укус или null, если символ не происходит. И чего же мы хотим? Наша задача здесь — найти следующее: следующая новая строка. Мы хотим сказать, что линия, хм, на самом деле мы хотим сказать Эм-м-м Есть несколько способов это сделать. я думаю, мы собираемся сказать хм линия будет хм Пытаюсь решить, как я хочу это сделать. потому что если следующая новая строка является нулевой указатель, и мне кажется, это именно он. указатель, так что мы можем просто сказать, что нулевой, если это нулевой, то я думаю, мы хотим, чтобы вы нам нравились мы собираемся осуществить своего рода инверсию петли что здесь нужно сделать. Итак, очередь идет быть всем остальным. В противном случае, но мы также им придется помнить о том, чтобы Перерыв после этого правого поворота. Итак, есть чуть больше, чем это. Эм, остальное В данном случае дело будет следующим. э-э, вообще-то Нет, мы можем оставить это как перерыв, потому что мы знаем, что после этого есть новая строка каждая строка означает, что мы должны всегда находим новую линию, пока не дойдем до Пустая линия, которая заставляет нас сломаться. Так что нам не нужно помнить об этом. перерыв с момента следующей итерации Мы найдем пустую строку. Эм, а в случае else линия продолжается быть На самом деле, это даже не отдых. верно? Это отдых. Эм, Да, нет, всё верно. Эм, и здесь, в будет добавлено к линия плюс линия + один. Итак, пропустив найденную нами строку, мы обнаружили следующее: новая линия. Хорошо. Итак, суть в том, что если мы найден символ новой строки, затем сама строка Нет, если мы не найдем новую линию. характер, линия — это всё от где мы находимся до конца файла. В противном случае это с по и вот где это будет немного Раздражает, потому что, э-э, следующая новая строка дает нам обратно указатель. [фыркает] Э-э, так вот Так что в этом случае, возможно, мы пойдем пешком. Вместо того чтобы использовать индекс, мы просто проходим по нему. по указателю. Мне это не нравится. Но, возможно, именно этим мы и занимаемся, но вот так. будет на самом деле хм Нам нужно вычислить длину, используя следующий алгоритм. новая строка э-э смещение от и это должно быть так же э-э, констатировать нам нужна компенсация от э-э, отдых аспинтер Итак, это расстояние между где вернулась программа памяти и где она Начал поиск, вот такая длина. из линии э-э а затем мы хотим, чтобы отдых был Эм-м-м Нет, это неправильно. Это смещение. от Ага. Нет, это смещение. Что мы хотим отсюда? Э-э, но это тогда будет включать в себя тот Ага. И это не символ новой строки, потому что это дает нам указатель на новую линию персонаж, которого мы игнорируем. И Вот почему он собирается добавить оба длина линии и один. Эм

Segment 26 (125:00 - 130:00)

Итак, вот почему это происходит. небезопасно? Что означает «смещение от небезопасного состояния»? Все впорядке. Эм-м-м безопасность uh mear возвращает указатели в rest. В REST всегда возвращается указатель, который является действительный. Эм, здесь несчастливо, потому что это должно быть CC int. Эм, и тогда оно становится несчастным, потому что это... безопасность Э-э, остальное справедливо, по крайней мере, для отдыха. лен байты, и это должно быть в виде указателя. и как C пустота и на самом деле это должно быть c инт. Нам действительно следует просто импортировать. их, потому что мы будем их использовать в множество мест. Эм, а затем это недовольны мной здесь потому что отсюда возвращается... размер глаз. Э-э, и нам это известно. хм Нам известно, что следующая новая линия — это всегда больше, чем указатель, который мы проходим Как мы знаем, это положительный результат. Так мы знаем, что это... Мы можем просто представить это как себя. И еще, просто для пущей здравомыслия, вот еще один момент. Я собираюсь это сделать. хм потому что это кажется очень хрупким что делает всё это ещё веселее. Э-э, не проверено. Ага. Ага. Ага. Это отлично. Опасно. Это выглядит довольно многообещающе. верно? Я вижу одну точку после десятичная дробь. Я не вижу новой строки. внутри строки. Итак, я думаю, я думаю Мы в этом правы. Эм, это просто убрало новую строку. Мы ведь проводим именно это сканирование, верно? Так, Теперь мы выполним новое линейное сканирование с помощью Memcar. Посмотрим, что из этого получится. И, теоретически, каким должно быть это? На 8% быстрее или около того. Хорошо, 28. Сложно. сказать, были ли мы такими же, как и раньше в 30. Эм, значит, 10% от 30 — это три. Итак, мы Должно быть примерно на 3 секунды быстрее. верно? Чуть меньше трех. 8%, кажется, было поиск новой линии, если мы полностью его устранили, что мы и сделали. не сделал этого. Таким образом, экономия двух секунд составляет В общем, примерно то, чего мы здесь ожидаем. Давайте проведём второй запуск, просто чтобы Увидеть это в действии еще раз. 28. Хорошо, значит, довольно стабильно несколько на секунды быстрее. Эм, это здорово. Так что, поменяйтесь местами. Эм, давайте посмотрим. Я хочу избавиться от О, Так и должно быть. Просто хотел посмотреть если бы я мог избавиться от некоторых из них импорт, а может быть, и нет. Эм-м-м, Э-э, новые линии для моей машины. Хорошо, это один из поисковых запросов. Он А вот в чём дело? Ищите точку с запятой, верно? Таким образом, точка с запятой — это тоже то, что мы используем. Пытаюсь найти это очень быстро. Эм Здесь мы могли бы также использовать U-Memcar, но... Мы также могли бы использовать SIMD, потому что это Кажется, это весело, почему бы и нет? Думаю, я... Думаю, здесь я воспользуюсь simd. то, что мы делаем, это то, что, знаете ли, мы знаем. что эта строка Мы знаем, что линия составляет максимум 100. Символы для названия станции были следующими: максимальное название станции плюс один для

Segment 27 (130:00 - 135:00)

точка с запятой плюс максимум минус два цифры десятичная точка дробь так что плюс 5 составляет 106 байт прямо сейчас 106 байт, если считать В U8 это, ну, это 106, это длина 106, теперь, если мы перейдем к... Посмотрите, что у нас есть в стандартная библиотека в окрестностях, вы увидите что существует U8* 64, это самый большой мы У меня здесь есть. Таким образом, SIMD-вектор с 64 элементы типа U8. Эм, теперь я думаю... Ага, значит, мы не можем использовать портативные SIMD-модули. Это было бы очень печально. Тогда нам, возможно, придётся использовать арочные. потому что я думаю, что есть Эм-м-м О нет, мне нужно посмотреть на внутренние характеристики. СИМД. Э-э, кажется, мне нужен SIMD. Где SIMD? Сим. Это бесполезно. А что, если я просто посмотрю на SIMD-библиотеку? Посмотрим, так ли это. Ага. Хорошо. Его Хорошо. Хорошо. Потому что я почти уверен, что так и должно быть. Возможно выполнить 128 операций U8. верно? Почему здесь ограничение только до 64? Это очень прискорбно. Эм, кажется, там было написано... кажется, инструкции здесь были Да, максимальная длина — 100 байт, а не... 100 символов, 100 байт. Эм, 64 — это действительно максимальный возраст для Синди в данном случае? Это очень печально. Эм, то, на что я надеялся. Задача состояла в том, чтобы разобрать всю строку, используя один SIMD. Да, максимум — 512 бит. хм? Нет, но у них есть. Так что есть U16*. 64. Значит, не должно быть и U8? * 128? И, чтобы было понятно, их В таких местах очередей действительно нет. сгенерированный объект. Дело скорее в том, что Согласно спецификации, это возможно. И нам, возможно, придётся сделать две SIMD-процедуры. инструкции, Это меня немного огорчает. Но пусть будет так. Хорошо. Эм, а как работает SIMD? работа? Итак, на самом деле давайте... Начнём с того, что такое SIMD? Таким образом, SIMD означает для одной инструкции, нескольких данных. Идея заключается в том, что вы используете один процессор. инструкция, и она выполняет вычисления над несколько элементов данных одновременно время. Таким образом, это обычно означает, что внутри Процессор состоит из нескольких компонентов. вычислительные единицы, которые вы можете им передать Допустим, это 64 элемента, и это может выполнить вычисления по всем 64 элементам в параллельно с одной инструкцией в ЦП вместо того, чтобы делать это для первого элемента затем для элемента два, затем для элемента три и так далее. Эм, и вот как Если вы работаете в режиме SIMD, вы можете например, экстремальная версия SIMD — это Графические процессоры. Мы можем делать это параллельно, как в параллельно. В основном это очень-очень много всего. очень маленькие ядра, которые все могут выполнять та же операция одновременно, но на различные подмножества данных. И Именно это нам и нужно. верно? Мы действительно хотим добиться равенства. проверьте с помощью точки с запятой для Являются ли какие-либо из этих байтов точкой с запятой? А если Итак, скажите, какой именно? А затем SIMD можно делать побитовые операции например, между двумя очень длинными списками элементов. А у вас ещё есть сократить операции и уменьшить количество операций. несколько различных операций редукции которые принимают результат одного из этих SIMD-операции, такие как равенство двух SIMD-векторы дают один результат. как U64 обратно от них для Примером может служить битовая маска, из которых Они были равны. Итак, вот что мы собираемся сделать. Эм, Мы собираемся создать U8x 64. Итак, мы хотим назвать это маской. Его

Segment 28 (135:00 - 140:00)

В терминах SIMD это не совсем маска, но назовем это а Давайте просто назовем его разделителем. Эм ограничитель это U8 * 64. Эм-м-м И я забыл, для чего нужен конструктор. этот. Это как Разве это не называется распространением? разброс? Есть один, где можно подарить один. значение и сказать, что это должно быть значение для всех них. Эм, но я думаю, это просто подразумевает это тоже. инструменты точно такие же, как из Возможно, это указано в описании. Это нет. Хорошо. Эм-м-м, изменить размер. Нет, это не то, чего я хочу. Где мой конструктор? Splat создает новый вектор CD с помощью всем элементам присвоено заданное значение. Именно этого я и добиваюсь. Эм, значит, я хочу поставить точку с запятой. Таким образом, это создаст единое целое из 64 элементов. Все U8-файлы настроены на точку с запятой. И я думаю, что мы поступим следующим образом: длина линии превышает 64 мкм затем мы перейдем к Тогда мы пойдем по медленному пути. Его Это будет непросто. Эм, но в остальном мы возьмем это. sd1. Допустим, разделителем является точка с запятой. А затем мы хотим получить текущая линия также является одной из этих... SIMD-функции. А затем мы хотим сделать следующее: одновременное, как параллельное, э-э, равенство между этими двумя. Итак, SIMD, А где мой? Да, это вызовет недовольство. Это потому, что очередь может быть короче. Поэтому нам придётся его немного расширить. Эм, но Я думаю, что есть Эм-м-м Есть способ сделать такой, который будет иметь подкладку. верно? Эм, загрузить или установить по умолчанию. Да, мне нужен вариант с загрузкой или по умолчанию. Эмм, значит, мне нужна строка размером U8x64. умная нагрузка или по умолчанию линии а затем я хочу использовать разделитель а потом я хочу сделать... Нет, я хочу сделать симулятор. линии. Ага. Ага. Я хочу, я хочу использовать Нет функций портативного CD. Да. Пожалуйста, предоставьте портативную командную строку. Благодарить ты. Эм... и что это дает? Я вернусь? Ну, это мне возвращает маска. А что такое маска? Ну, маска По сути, у нас здесь 64 UAT-теста. Мы U8, и в ответ мы получаем следующее: маска, которая говорит нам, какой именно сохраняет результат выполнения этой SIMD-функции. операции по всем этим направлениям. И в На самом деле, если мы сюда пойдем, посмотрим, где мой... Да, элемент SIMD — это тот признак, который мы используем. после. Эм, вы увидите, что маска здесь предназначена для... U8 Тип маски — I8. Итак, это оно. Результатом выполнения операций через u8s является Вы получите обратно i8. Итак, i8 в процессе выполнения равные поэлементно попарно равенство — это равенство каждого, и это равенство будет В итоге получится i8. А теперь что мы хотим? Исходя из этого, мы хотим узнать следующее: смещение, по которому ставится точка с запятой. Итак, как же? Мы бы так поступили? Ну, э-э Что вы можете сделать, это поискать... Как это называется? Нули. Почему я не могу найти нули? Эм-м-м ага. Итак, мне нужно узнать количество. ведущие нули. Но я думаю, может быть, мне стоит уменьшить... первый.

Segment 29 (140:00 - 145:00)

Нет, я не хочу сокращать. Я хочу Есть ли у меня AVX 512? Это хорошо. вопрос. Эм, это не информация о процессоре. Эм, а что такое тест для, э-э, AVX 512? Есть же приказ, верно? Да, вот это. один. Акс2. Ура. Так что мне следует получить... получить что. Эм, я думал, что первый сет, возможно. Ага. Итак, первый набор находит индекс первый элемент набора в маске. Эм, какой Это именно то, чего мы добиваемся, верно? Так мы и сделали. мы добились равенства, и теперь мы хочу найти первый, где Всё было готово. А это указатель. Разделитель — это вот это сейчас. вариант размера. Это вариант, потому что он Возможно, я никогда не найду точку с запятой. Эм, Но ведь так быть не должно, правда? Потому что Эмм... нам обещали, что у каждой строки есть... э-э, точка с запятой. И на самом деле многие из этих экспертов могли бы стать... на самом деле мы очень хотим пойти Ведь это необходимо, верно? Мы могли бы сделать... развернуть не проверено. Есть ли вероятность, что есть вероятность не проверено? Потому что я хочу, я хочу Напишите, почему, верно? Но здесь мы можем сделать... обещанная безопасность В каждой строке есть буква ". Эм, мы всегда можем провести проверку позже. а также посмотреть, ну, вы знаете, если мы будем использовать Безопасный вариант: сколько это нам будет стоить? с точки зрения производительности. Эм, так вот индекс Вот какой это персонаж. точка с запятой. А теперь что мы получим? Из этого... Давайте, собственно, сделаем это здесь. Позволять температура станция № станция и температура Они выйдут из этого. Эм и вот мы медленно движемся [фыркает] Собираюсь сделать это и передать станцию. температура. А еще в быстрый путь мы собираемся вернуть индекс до тех пор, пока разделителем не станет станция, верно? Так что вот так и будет линия к индексу разделителя. Э-э, и Температура будет индексом. разделителя плюс один в конец струна. Почему оно на меня злится? Оно злится на меня, потому что я забыл написать. строка здесь. Эм-м-м ой. [вздыхает] Давайте сделаем так. Есть ли причина, по которой я не использовал rsplit? один раз? Да, нет, э-э, нет разделить один раз на ломтики, или, скорее, есть но оно нестабильно. Эмм, но я думаю, что... Нам нужно будет подключить библиотеку. особенности, э-э, нарезка, разделение один раз, потому что это Ещё не добавлено. Эмм, я только что сделал вместо этого — расщепленный конец. Но я думаю, что в интересах того, что мы используем Во всяком случае, каждую ночь. Эм, так что мы можем и так всё-таки... просто сделай... слайд. Неа. Ломтик. Разделение происходит только один раз. Эм, а затем мы сделаем следующее: На самом деле, мы просто распакуем товар. В каком порядке это их возвращает? хотя? Эм-м-м оно возвращает их обратно прямой заказ. Хорошо. Так что это будет температура и станция

Segment 30 (145:00 - 150:00)

в каких точках станция отсутствует температура. Таким образом, это просто уменьшает что-то вроде что. Прохладный. А потом, может быть, давайте сделаем Просто чтобы убедиться в своей адекватности. ум линия станция и мы сделаем это, э-э, с разных 8 и потому что это скоро исчезнет Я просто воспользуюсь безопасной версией. линейная станция температура. Это выглядит весьма многообещающе. Да, выглядит очень хорошо. Хорошо, теперь... Эти полосы на отпечатке могут исчезнуть. Этот ветвь, хотя это и ветвь, она всё же... Филиал никогда не возьмётся, потому что мы только использовать его для очень длинных станций, которые В этом наборе данных такого даже не происходит. Так Эта ветвь является примером ветви. Это практически бесплатно, потому что филиал Программа-предиктор идеально для этого подойдёт. А теперь давайте посмотрим, сколько у нас в итоге получилось. резка. Давайте сделаем приблизительную оценку. здесь. Он Э-э, я думаю, это было примерно 5% от время выполнения. Итак, у нас 28. То есть 5%. это как... что 1. 4 четыре. Так, Да, мы не сможем много сэкономить. Мы сэкономим чуть больше... второй, верно? Хм? Не быстрее. Да, строки с текстом там нет. больше. Попробуйте ещё раз. Мы уже осуществляем сборку с использованием целевого процессора. родной 29. Интересно. Поэтому этот способ медленнее. Почему Это медленнее? Хм? Эм, хорошо. Давайте сделаем предпочтительное шнур. Посмотрим, что из этого получится. Я также хочу посмотреть на факты. Сборка здесь. Согласно отчету. Что теперь показывает Perf? Неа. Это не то, чего я хотел. Э-э, я Хочу сюда зайти. Основной. О, наверное, нам стоит это сделать а также для того, чтобы мы могли узнать хм Эм-м-м к станции и температуре. э-э, U8 Разделите полуприцеп, и это даст вам Верните U8 и U8, чтобы мы это получили. Разборка по отдельности. Эм Разделенная полупрямая линии. О да, этот шлепок нам нужно всего лишь... построить один раз. Это константа? Ага. Отлично. Эм, давайте приступим и ду-ум постоянный полу U8x64 А теперь это должно быть примерно вот это. [фыркает] То есть, пятно нужно вытащить. компилятором. Я согласен. Так вот, это ощущение Кажется, это отвлекающий маневр, но мы В любом случае его можно вытащить.

Segment 31 (150:00 - 155:00)

27. Хорошо. Идеальный аккорд. На самом деле, 27 — это примерно правильно. Возможно, он не поднял это. Эм, так вот, мы сейчас находимся в... Примерно 28,5 и мы рассчитываем сэкономить от 1 и 1,4 секунды. Так что, в общем, всё верно. О, мне нужно это убить, верно? Я не Жду, когда это закончится. согласно отчету. Посмотрим, что из этого получится. Это разделённый полуприцеп, очень маленький. затраченное время, меньше, чем мы использовали иметь. О, похоже, произошло разделение линий. его еще не вывезли. Эм, так давайте же Возможно, стоит также выделить это отдельно. Эм Итак, мы сделаем так, чтобы линия была следующая строка, которая займет хм карта изменяемая ссылка на Думаю, это всё. Эм, Для этого понадобится самолет U8. И вот мы это делаем. На самом деле нужны аннотации, отражающие весь срок службы, потому что мы не хотим, чтобы это было связано с изменяемая ссылка ум из в и это возвращает U8 шнур. Давайте остановимся. Посмотрим, что получится. согласно отчету для порта G 5%, а раньше в сумме составляло 10%. Так Здесь не так уж много экономии. Я Полагаю, это всё... мекар. Эм-м-м Неясно, сможем ли мы сделать лучше, чем Мекар. Мы Можно попробовать и это смоделировать, верно? Потому что новая строка тоже должна быть в рамках того же самого. Так может быть, мы действительно так и поступаем? что. Давайте... давайте оставим это на потом чуть позже. Эм СИМД. Эм, меня. Нет, в этом случае используется только SIMD-код. Эм все в порядке. Меня очень тянет сыграть в симулятор. и этот тоже. Есть ещё и забавное то, что мы могли бы смоделировать искать их обоих одновременно время. Так, Думаю, здесь вся загвоздка в том, чтобы О, это довольно заманчиво. Вот что я думаю. Ты Вы берете следующие 64 байта. Вы вычитаете значение новая строка. А теперь всё, что ноль Что-либо Это ноль, ваша новая линия. и всё, что равно разница между новой строкой и разделитель, который мы можем вычислить постоянно э-э, это место, где стоит точка с запятой. Интересно, это быстрее, чем...? делая каждый из этих шагов по отдельности, но Возможно, это одно и то же. Это означало бы, что вам нужно будет только загрузить SIMD один раз.

Segment 32 (155:00 - 160:00)

Хорошо, думаю, мы оставим это. вот так, время от времени Мы вернёмся позже. Эм, хорошо. Итак, когда мы смотрим отчет о производительности, В этом есть некий очевидный «слон». Комната, верно? Очевидная проблема, которую все игнорируют, заключается в следующем: Конечно, Макс и М. Нет, я шучу. Из конечно же, хэш-карта. Хеш-карта здесь Это как будто занимает почти всё время. Эмм и хотя их относительно немного записей, как будто их максимум 10 000. разные станции, ммм, такое ощущение нелепый. Мы, безусловно, можем это сделать. лучше. И особенно потому, что большинство В этот раз речь пойдёт о хешировании, и большая часть В это время используется хеширование, то есть применяется... стандартный хешер из Rust, который пытается быть похожим на ударопрочный и все. Таким образом, он вводит данные случайным образом. Данные также интегрируются в процесс ввода. Это вещи, которые имеют значение для Настоящие программы на Rust, и это не стоит нам денег. Хочу оплатить здесь. Так что на самом деле есть Интересный вопрос: а что же мы делаем? Хотите здесь что-нибудь сделать? потому что мы можем либо переключите это на карту типа B-дерева. избегайте хеша, но мы все еще делаем равенство но мы не используем код Unic, поэтому... Возможно, это будет значительно быстрее. А карты B-деревьев — это, э-э, B3 выглядят вот так. они выделяют, кажется, пять элементов на каждого. узел, э-э, так что вы получите что-то Здесь тоже амортизация, но давайте сначала... начнём с чего-то очевидного, очевидного улучшение здесь, верно, которое связано с вместимость 10 000 Эм, Итак, вспомните, что мы здесь обсуждали ранее. было что-то вроде 27 Я не думаю, что это произведёт большой фурор. разница. Я был бы очень удивлен потому что мы только расширяем хэш-карту. Я думаю, на начальном этапе мы его выращиваем. Довольно много, но, как говорится, рекламируйте это. будет содержать более миллиарда строк. Я не Думаю, это важно. Но я могу ошибаться. Э-э, 25. Хорошо. Итак, предварительное распределение помогает. Предварительное распределение карты. Это не довольно предварительно распределено, но знаете что? иметь в виду. Эм Но мне любопытно, скажем ли мы вместо этого так? Мы создадим на основе этого B-деревовидную карту. Я просто хочу увидеть Я просто хочу посмотреть, что из этого получится. это. также означает Э-э, на самом деле нам это еще нужно. хотя это и довольно глупо. потому что вы должны иметь возможность сравнить очень быстро теперь, когда они есть что клавиши — это U8 э-э, откусываем кусочки, верно? потому что вам не нужно этого делать дорогое сравнение символов UTF8 Затем Таким образом, мы соревнуемся с 25 участниками. Да, сравнение с UTF8 также включает в себя компенсацию памяти. Хорошо, значит, это не должно, это должно Вероятно, тогда скорость всё равно будет ниже. Хорошо, это намного медленнее. Прохладный. Все Хорошо, вернёмся к хэш-карте. Это... Хорошо, давайте также внесем это изменение. Мы говорили об этом совсем недавно. назад. Нет, мы решили этого не делать. Потому что мы можем сохранить эти страницы. Да, я хочу оптимизировать. Вот схема расположения элементов, прежде чем мы начнём играть. покопаться в процессе создания этих указателей. Итак, следующий очевидный шаг — это... алгоритм хеширования. Таким образом, в настоящее время Используемый нами алгоритм хеширования выглядит следующим образом: и т SIP-хешер, входящий в стандартную комплектацию библиотека, в которой используется рандомизация. и всё такое. Э-э, мы хотим этого избежать. Итак, есть несколько способов, которыми мы мог бы это сделать. Мы могли бы привезти ящик. как FX hash или aash, но опять же нет Внешние зависимости — это правило. Э-э, мы могли бы иметь свои собственные. Так что их примерно так

Segment 33 (160:00 - 165:00)

торнадо, хм, или нет, процент торнадо, но эмм, мы могли бы просто реализовать хешер. самих себя. Есть ещё и глупцы. Хашер, который просто складывает все смыкают зубы. Эм, давайте просто... просто давайте, давайте Просто посмотри. Хорошо. Э-э, я хочу гашиш. Тупой бродяга. Простите, я имею в виду быстрого бега. Эм, и это будет быстрый забег там. Почему так? Сейчас становится грустно. Почему это значит, что это грустно? Эм-м-м, Это грустно, потому что Это должно быть именно так. Эм-м-м, большой. Хорошо. Хешеру нужно как можно быстрее внедрить эту функцию. построить хешер что создает быстрый хешер хашер который возвращает быстрый хешер. Отлично. Э-э, используйте 64 Быстрее. Быстрый конструктор хэшеров Я строитель, потому что всегда, когда вам это нужно. Чтобы что-то хешировать, нужно это создать. из них. Итак, вам нужен строитель, который Вы можете позвонить, чтобы заказать хэшер. Эм, и Тогда это будет равно нулю, потому что мы Здесь случайность не имеет значения. Э-э, и Тогда мы хотим это реализовать, нам всё равно. о борьбе со вредоносным хешем Здесь происходят столкновения и тому подобное. Итак, мы Собираюсь внедрить хешер для быстрой обработки данных. Хашер. Да. Итак, ноль, э-э, 4b в байтах э-э, себя. 0 ноль плюс равно байтам. На самом деле, U32. И мы на самом деле хотим, чтобы это было завершением. объявление. Ага. Ага. Все в порядке. Self. 0 — это вот это. Итак, это очень глупый участник забега, который просто складывает байты всех своих входных данных И это и есть хэш. Эм, и мы могли бы Даже если сделать это с помощью, например, SIMD-добавки. Эм Но я думаю, нам это может и не понадобиться. Эм Интересно, а есть ли... э-э, да? верно, потому что мы знаем, что хешер Нет, вот название станции, которую мы называем "Хэшер". которые, по сути, представляют собой всего лишь байты U8. Эм, мы это делаем. Однако знайте, что их не более 100. персонажей. Так что мы могли бы имитировать здесь. Итак, э-э, что нужно сделать сим, если меньше 6 эээ, если меньше или равно 64b. Ага. Да, здесь можно выполнить операцию редукции суммы. Эм [прочищает горло] Но давайте просто посмотрим, что получится. такое случается. Нет, в данном случае SIMD-функция нужна для выполнения следующего действия: добавление. Если хешер сейчас просто сложение байтов можно сделать следующим образом. сложение байтов по SIMD-методу. Это же очевидно глупо, правда? Обычно так не делают. Добавьте гашиш, потому что... это слишком много. Чем выше вероятность столкновений, тем больше вероятность их возникновения. Да, по правде говоря, мы делаем хуже, правда? Нам было 25, а сейчас нам 35, и я Думаю, это потому, что в итоге мы получаем гораздо больше. больше столкновений, потому что помнишь тебя? Возьмите это число, а затем вы э-э, например, реализация Хэш-карта берет значение по модулю числа ведра, и, по сути, чего мы хотим, это генерировать числа, которые широко распространены но на самом деле мы просто сложение чисел, где их много примерно одинаковой длины и много их Они просты в использовании, поэтому вам не придется распределять стоимость.

Segment 34 (165:00 - 170:00)

Вполне возможно. Эмм, вот почему ты часто хотят сделать это, используя то, что есть. Кто-то предложил здесь U64* U64 умножьте, а затем удалите два 64-битных числа. половинки вместе. Хорошо, давайте... Давайте попробуем. Почему нет? Эм, значит, U28, а мы сделаем self. 0. Есть ли расколоть? Есть ли Полагаю, дело просто в этом… U64 по модулю, где это U64. А затем мы делаем это здесь. куски э-э фрагменты участков восемь на самом деле. Есть ли... э-э... Да, именно этого я и хочу, чтобы "немые куски" были это 8-го размера, а потом я хочу потому что 8 здесь равно 64, поэтому мы делаем Нет, на самом деле мы можем просто оставить себе U64. не нужно хранить 128, так что вот это... вот это становится self. 0 равным нулю. А здесь мы делать для фрагмента, нет, мы делаем, пока пусть сумма «Блок» — это блок, потому что нам это нужно. остаток в конце. Эмм, а затем мы делаем ум само. 0 ноль как U128 умножить на э-э, кусок, который здесь будет э-э, U64 от байты коренных индейцев Как и следовало ожидать. Э-э, смешанные, а затем мы сделаем это здесь. смешанное это self. 0 равен этому. А затем на оставшуюся часть Эм-м-м В остальное время, думаю, мы просто будем... сделать то же самое, но будет U8, поэтому мы Их нелегко превратить в U6. Хорошо, Думаю, мы могли бы. Ах да. И вам нужно, этого быть не может. ноль. Это может быть... существует некоторое оптимальное число, подобное этому. Начать следует с простого числа или чего-то подобного. верно? Э-э, оно должно быть взаимно простым с большинство чисел, которые вы можете выбрать, или что-нибудь. Эм, давайте просто сделаем это. Семь. Почему это вызывает у него расстройство? Ах да. Следующий. А потом для укуса оставшиеся части. Полагаю, мы могли бы просто добавить обертку. эти Просто выберите случайным образом 64-байтовый файл. 64-битная строка где, о, здесь, да, мм семь — это случайность, верно? ничего не случайный, около семи fv — смещение смещения Отлично, спасибо! Почему бы и нет? А потом я думаю: да, я думал о 1337 году. Хм, но ладно, давайте... использовать значение, выбранное кем-то, выбранное с помощью Справедливый случайный бросок. Д1. Да, именно так. Эм, И почему же оно недовольно этим? Ой, почему же фрагмент не получается точным?

Segment 35 (170:00 - 175:00)

Ага. в виде фрагментов. Это именно то, чего я хочу. Ага. Ага. Вот что я хотеть. Мне нужны куски и остаток. Сейчас Мы разговариваем. А потом я хочу сделать это для разбить на части, потому что сейчас разбить на части is um is an array будущее. Меня не волнует будущее. Его а) это массив фиксированных длин. Итак, теперь Мы действительно можем это сделать. Эм-м-м Да, да, всё в порядке. Эм, хорошо. Что я сделал? Почему оно на меня обижено? Ах, вот так это должно выглядеть. Эмм, а затем 4 В остатке. Что я хочу сделать с оставшейся суммой? Думаю, я могу просто добавить их. Кажется, всё в порядке. Наверное, следовало бы выступить лучше. О, это необходимо. Да, это должно быть константа А потом мы можем просто сделать... мы можем просто добавьте их. Думаю, мы могли бы смешивать ингредиенты таким же образом. но это кажется чрезмерным для Остальная часть здесь. Давайте посмотрим. Итак, помните, что нам 25 лет. пытается победить. 25 — это значение по умолчанию в Rust. Хашер. Здесь возникает интересный вопрос. Стоит ли вообще считать это хэш-картой? верно? Потому что мы знаем, что их максимум 10 000 станций и так мы могли бы просто сохранить это как вектор хотя вы бы использовали логарифмические сравнения. Это не идеальный вариант. Поэтому этот способ работает медленнее. Интересный. Да, я хочу, я думаю, я хочу сим этот. И я думаю, что способ хотя это становится сложнее, потому что теперь, если Мы пытаемся сделать это вот таким образом. Это более болезненно, потому что час Мне любопытно, куда уйдёт это время. Да, это почти как вариант по умолчанию. почти наверняка имеет множество оптимизация для векторизации и Так ведь? Вот что мы и делаем. конкурирует с. А почему? Почему же сейчас все так огорчаются по этому поводу? Что Меня это сбивает с толку. Эм, что? Почему оно потеряно? Почему? В результате произошла потеря одного из кадров стека. между. То есть, это как разделить их. Это печально. Эквивалентный ключ. Это могло бы а также потому, что мы производим много Больше столкновений. Как будто это не так. Необязательно, что это связано с хешированием. Например, если я делаю пометки. этот. О, оно было в линию. Я не могу Эм-м-м А как насчет того, чтобы сказать... хм inline never here. Вот и всё. Теперь трассировка стека в порядке. снова. Почему? Очень странно. Эм, да. Так 80% направляется туда, что составляет примерно... то, что было раньше. Меньше времени уходит на беговую дорожку. Так Это наводит меня на мысль, что это На самом деле, столкновений стало больше. Итак, что же происходит с нашим хешем здесь?

Segment 36 (175:00 - 180:00)

записать префикс длины. Ах да. Он также вычисляет длину ломтик. Это интересно. Поэтому мне интересно, а что если мы можно было бы обойтись и без излучения нуля. в качестве хеша, используя только длину. Но давайте посмотрим, что произойдет, если мы Сделайте пометку. Верно? Так Куда уходит это время? Хорошо. Свежая прелюдия. Затем загружаются байсы. прыжки. Почему? О, это петля и вращение. интересный. ЧАС Я пытаюсь разобраться. Да, здесь происходит векторизация. Интересный. Давайте удалим исходный код отсюда. второй. Мне любопытно, на самом деле есть один момент. Я хочу провести тест. Я думаю, кто-то Он тоже это предложил. Что произойдет, если... мы добавляем хм Э-э, например, здесь хеш? Эм а затем мы пытаемся использовать хэш Хашер. Что? Хэш. Кто их строитель? Случайное состояние. Мне не нужно случайное состояние. Я хочу Мне, честно говоря, всё равно, что это случайность. Но я думаю, что все в порядке, потому что Случайность, созданная при создании строительный хашер. И я просто хочу посмотреть, так ли это. нравиться А где мы вообще делаем что-то глупое? здесь 16 секунд. Хорошо. Так что мы определенно совершив глупость. Но это столкновения или это Скорость хеширования? Мы должны иметь возможность провести тестирование. Это довольно легко, правда? Потому что, э-э, если мы здесь говорим Избавиться от остатка Как это происходит? Просто пытаюсь сузить круг поиска, где это находится. Время идёт.

Segment 37 (180:00 - 185:00)

Итак, у нас было 25, а потом мы дошли до 16. А что будет дальше с этой реализацией? Мы поняли? Это определенно больше 16 секунд. Этого не произойдёт. так, как и должно быть, согласно имя 52. Хорошо. А что, если я просто укажу нулевой байт? Послушайте меня внимательно! знать? Значит, это должны быть столкновения, верно? Ой, мне нужно удалить свой номер телефона, указанный в тексте. [фыркает] множество массивов длиной меньше восемь. Вполне возможно, что так и есть, не правда ли? Например, взглянув на результат работы Список станций. Есть немало таких, которые менее чем восемь, и они бы просто закончили просто выполняя остаток и, думаю, остальное мы могли бы сделать Здесь используется SIMD. И да, верно? Так что мы могли бы просто добавить их. с использованием SIMD. Но меня беспокоит то, что если мы просто добавим их, затем мы увеличиваем их количество Снова столкновения. Если проблема действительно в столкновениях, то я Посмотрим, что из этого получится. Здесь, верно? Если скорость по-прежнему низкая, то очевидно, что Проблема в столкновениях, потому что мы По сути, сейчас ничего не вычисляется. в самом хэшере. и его второй фрагмент состоит всего из восьми байтов. Вот что здесь интересно. И мы могли бы сделать гораздо больше, чем... что. В общем, я думаю, мы что-то делаем. В этом и заключается компромисс, не так ли? между нами Можно использовать, например, U8x64. Пожалуй, нам бы пригодилось больше, чем это. но мы ожидаем, что они будут короткими В любом случае, это строки. Таким образом, U8x64 будет Зафиксируйте все названия станций. И мы можем Просто добавьте их. Проблема в том, что тогда мы... не обеспечивается устойчивость к столкновениям потому что мы просто добавляем их, и Вот так в итоге и получается... столкновения в первую очередь. 112. Хорошо. Ага. Поэтому столкновения здесь очень частые. дорогой. Похоже, нужно приложить больше усилий, чтобы этого избежать. Столкновения, вероятно, того стоят. Итак, если мы сделаем что-то вроде U8 8, поэтому это тоже будет фрагмент из 8 частей. И тогда мы это сделаем последняя точка скопировать из фрагмента остатка а затем мы будем работать по частям цепь Э-э, я думаю, что да. цепь последний, и это, пожалуй, вот этот. Получается остаток, но это нормально. Эм-м-м верно один из последних последнего Не следует Мы используем vec вместо hashmap? Я не Думаю, так потому что...

Segment 38 (185:00 - 190:00)

если вы используете вектор вместо этого, то вы... Придётся использовать логарифм и строку. сравнений. Так что вы собираетесь сделать вот что где-то в районе шести струнных инструментов, если сравнивать. Хотя, я думаю, это максимум 10 000. станции, верно? Их могло бы быть гораздо меньше. На самом деле, я думаю, что в стандартном наборе данных... Их гораздо меньше. И вот тогда-то вектор, вероятно, был бы довольно быстрый. Да, я думаю, это всё ещё будет Быстрее. Эм, источник, верно? Я не могу. Это Мне это не позволит. Разве нет копии? Думаю, я смогу выступить в режиме "без звука" в последнюю очередь. Сделайте это ломтик. Что? Безусловно, это можно сделать. Я совершенно запутана. Разве не так, если вы скопируете? из ломтика на ломтик. Длина источника должна быть равна То же самое, что и L. Есть То есть, хорошо, мы можем сделать остаток. Только Это меня огорчает так. В этом месте это кажется излишним. Я почти уверен, что есть, ну, вы понимаете, Скопируйте как можно больше. Эм, Или же, есть ли... множество Или же имеется массив, содержащий остаток от деления на две части? Хорошо, ладно. Ну, мы это сохраним. Вот так. Эм-м-м, и это похоже на остаток пусто. Нет, вам разрешено обрезать до нуля. Я думаю. Если значение равно нулю, то хеш становится таким: ноль. Эм-м-м ой. Ага, это правда. Это хорошо. Это очень хорошо. наблюдение. Но мы могли бы сделать вот это. верно? Главное, чтобы оно не было равно нулю, тогда оно будет равно нулю. отлично. Если только нам не повезет. Можно представить, что это случайно станет ноль. прямо с эксорами 21. Ладно, это лучше, чем 25. Хуже. чем 16. Все в порядке. Скопировано из остаток в качестве указателя последний как не заглушить указатель остаточная длина. Но именно это и следует скопировать из среза. Получается, правда?

Segment 39 (190:00 - 195:00)

Сделайте его безветвистым. Ага. [фыркает] Где находится филиал? Ветка, я полагаю... Это, по сути, лишь случай прекращения действия для петля, что, как мне кажется, вам в любом случае нужно, потому что Здесь входными данными для укуса является фрагмент неизвестная длина. Ага. Итак, мне по-прежнему 21 год. Так что, это Разве это нас на самом деле не спасло? что угодно, что мне бы тоже понравилось. Удивлён, если это так. Эм, хорошо. Ну, 21 — это неплохо. Эм, это могло бы возможно, что смешивание здесь неоптимальное. где например, вместо того, чтобы умножать это вместе мы должны добавить это умножить на некоторую константу. Есть ещё один вариант, который мы можем здесь использовать. верно? Это все равно что бросить еще больше Проблема в памяти. Например, если у нас вдвое больше таких случаев. ведра, у нас также должны быть Меньше столкновений. 21 то, что у нас уже было. Я имею в виду, это было немного лучше. Мне всё ещё интересно, можно ли просто симулировать этот. Эм-м-м, Позвольте мне... Хорошо, давайте попробуем. Я просто Хочу увидеть. О, но потом мы вернемся к Столкновения, верно? Но я, в общем-то, Просто хочу посмотреть, стоит ли мне это делать. этот, верно? Итак, мы возвращаемся сюда. Мы говорим что хешер будет, если байты Если длина больше 64, то мы переходим к следующему шагу. чтобы заниматься текущими делами, верно? Но иначе мы просто сделаем Эм-м-м В итоге получается довольно странная ситуация, но... потерпите меня. А что, если это будет оценка "А"? U8 X 64? Я знаю, но послушайте меня. Эм, и это ноль. Я знаю. Выслушайте меня. Эм-м-м, это уменьшение. Нет, потому что тогда это будет U8, а это в этом нет необходимости продукт. Это будет Что? Нет. Некоторые, вероятно что? Ага. Отлично. Так что Это приводит к тому, что двигатель разгоняется до U8, а это нам не нужно. Итак, нам нужно будет сделать Здесь что-то есть, но потерпите немного. А затем в этом случае мы делаем следующее: хм мы делаем себя. 0 сим добавлять некоторый Да, это правда. Мы могли бы просто сделать... как использовать 64x8, верно? Какой из них того же типа или нет? Скорее, того же размера. А затем уменьшить

Segment 40 (195:00 - 200:00)

продукт или уменьшить сумму или уменьшить продукт. Конечно, почему бы и нет? А почему это происходит? Не позволяете мне это сделать? Да, это не так. примитивный тип. Да, его нужно отдать под актеров. U648 не относится к SIMD-типу. Почему? Ложь, ложь, ложь, ложь. О, неужели этому нужно только это? Окей, круто. Эм, но здесь мы делаем сумма по объему байтов. Нам не нужно этого делать, и мы просто говорим self. 0 ноль. Это Разве это не так, разве не так, Синди? Нет, мы оптимизируем систему для количества элементов менее 64. верно? Итак, u x64. Итак, я пытаюсь одновременно сложите их все вместе. Вы понимаете, к чему я клоню, верно? Нравиться Я хочу Можно я их просто добавлю? Прохладный. Эм-м-м Это пока что лишь временное решение. Теперь это будет Хуже перемешивание. Эм, это будет просто шлепок по тебе. Эм-м-м И, конечно же, это будет постоянным явлением. Эм-м-м u8x64. No u8 x64 splat of 42. Почему бы и нет? На самом деле это не имеет значения. и это плюс равно этому. Теперь я хочу понять следующее: это, очевидно, будет быстрее вычислить. Оно учитывает все кусается, но столкновений будет больше. потому что мы не проводим это достаточно тщательно. смешивание. Вы считаете, что сокращение ассортимента здесь хуже? Думаю, мы скоро это узнаем. Эм, это не 64-битная система. Его 64 байта. 64 бита — это всего восемь символов. Да, это определенно хуже. Это, безусловно, больше 20 секунд. О, вы правы. Нет, это ты Абсолютно верно. что его нельзя уменьшить продукт, потому что если хотя бы один из них равен нулю Результат равен нулю. Чтобы было ясно, я не думаю, что мы... Цель должна заключаться в создании самого быстрого хеша. Эта функция когда-либо была создана, верно? Наша цель должна заключаться лишь в том, чтобы сравнять счет. достаточно для того, что, как мы знаем, достижимо.

Segment 41 (200:00 - 205:00)

с Аашем. И мы можем попробовать это И здесь тоже одержали победу. 40 секунд. Так что дело действительно в столкновениях. потому что эти вычисления должны быть реальными быстрый. Поэтому я искренне считаю, что это У нас была старая версия. Ой. эта версия у нас была Он неплохо сводит, потому что мы дошли до 21 года. А что, если мы просто... ну, я знаю Парадокс дня рождения и все такое, верно? Да, мы могли бы также использовать этот цикл моделирования. мог бы начать номер по-разному для каждого персонажа, так что вы занимаете позицию персонажа принять во внимание. Все в порядке. Случай с блоком данных в четыре байта вместо восьми так. А это U32. ЧАС У меня возникает соблазн пока оставить этот вариант. потому что я думаю, что мы можем сами управлять автомобилем. сумасшедший пытаюсь придумать более эффективный способ хеширования. Здесь алгоритм. Хотя я полагаю Да, многие из наших струн такие. У многих из нас струн шесть. персонажей. В итоге они окажутся в числе остальных. Но это будет просто копия, и тогда... Это был бы кусок. Ага. Хорошо. Тогда пусть это само собой исчезнет. А мы... скажем, что на данный момент этого достаточно. Так заманчиво сделать это с помощью SIMD. Хорошо, я уйду. Пока что будем использовать хеширование, иначе потратим... Буквально всё время на нём. Эм-м-м, Где мы сейчас находимся? Так, Хашер. Эм, хорошо. Кто-то сказал: «Пожалуйста, пожалуйста, сделайте вектор вместо "Хэш-карта. " Давайте попробуем. Итак, мы собираюсь сделать из этого вектор. эти ребята. Э-э, мы скажем, что вместимость — это Теперь вернусь к 10 000. Э-э, мы собираемся это сделать мы собираемся выполнить бинарный поиск по клавишам. И мы хотим искать станция, где происходит добыча этот. Эм-м-м

Segment 42 (205:00 - 210:00)

если мы получим обратно букву I, Тогда это статистика I. В противном случае мы делаем вставка точки статистики на уровне I, а затем, я думаю, возможно, это становится Вполне возможно, что это приведёт к дисквалификации, но давайте... Давайте пока оставим это как «ve». Э-э, так вставить в точку i. Эм-м-м, станция там. я а потом stats — добавить или отключить статистику. На самом деле, мы можем получить неконтролируемое отключение звука. из I. Почему оно несчастно? станция? О, это должно быть Вот вам подборка U8. Да. О, это нужно взять за образец. к ключевому типу или чему-то подобному. Хорошо, прохладный. Эм-м-м Это ни к чему не приводит. Так вот что будет, если выпустить в эфир Для упрощения, I равно этому. немного. Эм-м-м, О нет, нам нужно убрать букву «I». На самом деле, нам нужно, пусть I есть Э-э, это я, и это тоже я. А потом Правильная статистика — это немая статистика. Давайте посмотрим. [фыркает] Теперь мы пытаемся обойтись без хеширования. все вместе. Мы пытаемся использовать вектор вместо И это будет отсортированный вектор ключей. А затем мы выполняем бинарный поиск по этому результату. вектор для станций. Моё предположение таково: что это сработает довольно хорошо, если будет станций немного, но станций много. Это будет значительно медленнее. Да, это определенно медленнее. Помните, мы стремимся достичь 21-летнего возраста. [фыркает] Это намного медленнее. Ага, [фыркает] грубо. Ладно, вернёмся к хэш-карта. Но мы же пытались. Хорошо. Это приведет к слишком большому количеству столкновений. Ага. Эм, хорошо. Что нас ждёт дальше? Эм-м-м, Давайте запишем результат. А затем мы проведем анализ по каждому отчету, чтобы посмотреть, что получится. Мы поняли. [фыркает] Неа. Почему? Хорошо

Segment 43 (210:00 - 215:00)

отлично. Эм-м-м Почему здесь всё время уходит? Я это сделал? Оставить здесь где-нибудь встроенную строку? Нет. Может, я не дал ему поработать достаточно долго? Да, думаю, я не затянул с этим надолго. достаточно. Посмотрим, что из этого получится. Всё дело в функции «заглушить звук» хэш-карта. Как и все остальные вещи, они даже не равны. регистрация, хм? Хорошо, давайте подумаем. Что мы можем сделать? Это здесь разумнее? Поэтому мы используем конструкцию try, но try кажется неправильным. здесь. Кроме того, вам нужно знать, что вам нужно знать. следите за тем, что вам нужно пересечь дерево, которое уходит на такую ​​же глубину длина струн. Хм. Я знаю, что параллелизм — это своего рода правильный путь. В конце концов, я сюда доберусь, но я просто Попытка мыслить таким образом вызывает определенные ощущения, потому что еще раз помните, что самое главное Мы сравниваем с тем, что... этот который Ой, почему же сейчас всё так медленно? Хорошо. Ага. Это 800 миллисекунд, верно? Именно с этим мы и проводим сравнение. Эм-м-м Так почему же этот работает так медленно? Ну что ж, давайте видеть. Если вы перейдете к проверке исходного кода, нет источника основной Java дев. О боже. Где это? Просто скажите мне, где это. является. Эм-м-м, хорошо. Это есть в исходном коде. О, я играю за другого персонажа. java утро разработчика рассчитать этот. Ладно, это было примерно так. Победившая работа, давайте посмотрим, что они предложат. делать. [фыркает] Хорошо, магический множитель. Мне это очень нравится. Опасно. Эм-м-м, хорошо. Так что, очевидно, они сталкиваются друг с другом. параллельно. Давайте проигнорируем параллелизм. здесь. Они также составляют карту памяти. Это делает смысл. Это всё, что касается разделения карты. параллелизм. Об этом мы поговорим позже. Конструктор текста. Это для печати. агрегаты. Таким образом, они выделяют память. Хорошо. Итак, я думают, что у них есть находить. Что это? Хорошо, у них есть два длинных. О, интересно, так ли это на самом деле. Хорошо, позвольте мне найти их. Это для слияния. Это строитель. Нет, я думаю, они просто здесь держатся. статистика потому что они также используют древовидную карту из строки в агрегат.

Segment 44 (215:00 - 220:00)

Да, смотрите, они упаковывают... агрегаты. Это нормально. Таков уж их стиль. Объедините агрегаты. Мне нужна их поисковая система. агрегатор. Ладно, беги. Вот так. Так, Они получают свой сегмент. Это в пределах одного нить. Они делают большую часть работы. Хорошо. Они разделили кусок, который каждый Ветка попадает в три. Хорошо. Почему? И пока это так, Зачем они это делают? Интересный. Вероятно, это относится к процессору. параллелизм. И поэтому они пытаются сохранить они пытаются занять центральный процессор. достаточно к Я думаю, они... я думаю, что... Они здесь полагаются на тот факт, что один процессор мог иметь несколько выдающиеся объемы памяти одновременно время. И так Вы хотите, чтобы процессор запустил все три компонента. грузы. Обычно это не обязательно три, но как будто вы хотите, чтобы он запускал несколько Память загружается, а затем вы хотите выполнить следующее: вычислить для всех этих трех областей памяти грузы. В противном случае, вы просто делаете это Процессору вы выполняется одна загрузка данных в память. а затем выполнить вычисления, а затем один Загрузка памяти и выполнение вычислений. верно? Поэтому я думаю, что именно поэтому они... делая это. Почему? Что это за слово? Эм-м-м, слово, которое относительно бесполезно в качестве берет адрес и получает длинный адрес этот адрес. Хорошо, значит, они прочитали U64. для первых восьми байтов имени. Затем они читали текст U64 в течение следующих восьми минут. байты имени. Поэтому они прочитали первые 16 символов каждой станции имя. Что делает разделитель? Сепаратор. Итак, экзор с использованием запятой, я думаю, запятая Здесь схема просто... да, 3b, кажется. запятая поэтому они изгоняют все это с помощью запятые байты. Значит, они делают это правильно, и вот что происходит. позволяет им сделать это в одном регистре а не с SIMD и поэтому вы сканируете восемь Эм-м-м Да, вы сканируете восемь символов. время для запятой и вы вычитаете по одному от каждого из них, и в итоге вы получите 80. Это связано с этим должно быть затем связаны с двоичным значением каждого характер. Ой ага. Там. Ага. Это SIMD-функция в регистре. Э-э, но они сделали это специально или нет? потому что у них не было SIMD — это Интересный вопрос. Эм, хорошо. Итак, они... Но что это значит? Вернуть тебе? Это просто даёт тебе это

Segment 45 (220:00 - 225:00)

Видимо, она даёт тебе маску. Ага. А затем они ищут номер. нулей в конце. Хорошо. Итак, мы, мы вернуться сюда. Таким образом, это дает им маска и помните, это так важно Слово один и слово четыре — это первые восемь байты и вторые восемь байтов первый фрагмент того, что ищет этот файл в. Второе и пятое слова одинаковы для Вторая, третья и шестая части одинаковы. для третьего места. Хорошо. А затем они отлично работают с агрегатами. Первый фрагмент, первое слово. Ага. Слово первое, слово четыре, разделитель один, разделитель четыре. Так что, да. Итак, хорошо. Интересно. Мы тоже могли бы это сделать. верно? Мы могли бы… Мы вполне могли бы сделать что-то подобное. развертывание попытки получить доступ к процессору Чем активнее загрузка памяти процессора, тем выше её объём. выполняя все загрузки, а затем все вычисляет. Это действительно Интересное наблюдение. Хорошо, давайте начнём. Посмотрите на находку. Так в чём же их суть? реализация функции find? Такое ощущение, что Это же главная магия, верно? хм маленький Это их экспресс-проверка маршрута. Итак, если Разделитель находится в первых 16 байтах. Именно это они здесь и ищут, потому что Разделитель один — это битовая маска, вот что это такое. Это именно то, что они и делают. с помощью маскировки. Маскировка — это испытание. чтобы повернуть... Поэтому они проводят обряд экзорцизма и... хотят повернуть они хотят обнулить все значения. за исключением первой части сопоставления экзорцист В итоге вы получаете следующее: разделитель, где у вас все нули путь до места, где находится разделитель. Если Оба значения равны нулю, это означает, что Разделитель отсутствует в первых 16 строках. байты. Это также похоже на SIMD. Позаботьтесь об этом за вас. Эм, да. И если оно не маленькое, то... они так и делают затем они пропускают 16 байтов а затем они что-то здесь делают. Давайте Посмотрите на быстрый путь. Здесь важна длина. Длина здесь определяет количество ведущих символов. нули. Я почти уверен, что мы это уже видели. А потом они надевают маски. верно? И им нужно носить здесь маски. разделитель, чтобы э-э Ага. Чтобы вы сохранили только части то слово, которое не следует за артиклем разделитель. Интересный. Что здесь означает слово «маска»? Ага. Так они и есть. в зависимости от того, где находится море, есть ли... разделитель находится внутри В первом слове они решают, следует ли чтобы предотвратить появление второго слова или нет. Так Вот почему, если вы посмотрите на маска слов [фыркает] Давайте посмотрим 0 1 2 3 4 5 6 7. Ага. Итак, это восемь записей. Итак, если длина разделителя Ага. Если это так, то это означает, что если разделитель находится в слово один тогда вы используете один из этих индексов. Это значит, что ваша маска равна нулю. В противном случае Ваша маска вот такая. А если ваша маска ноль означает, что вы поворачиваете все символов во втором слове. Итак, второй набор из восьми байтов, вы превращая все их в нулевые байты, так что вы их игнорируете. В противном случае, Вы вычитаете единицу, то есть все единицы. Так вы заканчиваете единицами, а это значит... В итоге вы получаете тот же самый битовый шаблон, что и раньше. имел. Это умно. А затем их гашиш удаляются только первые восемь байтов.

Segment 46 (225:00 - 230:00)

со вторыми восемью байтами. Ага. Мне любопытно, что они... Какова их функция смешивания. Забавно. Да, это хэш-карта, созданная вручную. Таким образом, они удаляют первые восемь байтов с помощью операции эксорр. вторые восемь байтов. Они его умножают относительно случайным числом. Затем они изгоняют это сами собой. сдвинут вправо на 35 а затем они возвращают это значение. Замечательно. Да, это действительно очень похоже на... они очень стараются этого избежать ветви, верно? потому что они не хотят разветвляться например, знаете ли, это меньше, чем восемь символов — это меньше 16? персонажи и так далее. Интересный. Это не похоже на сдвиг бита на 35. Здесь всё как будто сверхоптимизировано, не так ли? И посмотрите, как они Также проанализируйте значение. Они достают цифры. Э-э, я вернусь сюда. На самом деле нам также нужно посмотреть на aggregates. find Найти это просто что? Я думаю, они просто исходят из предположения, что Итак, каждый контейнер начинается с... первые 16 байт или включают 16 байт и они приходят к выводу, что находка является успешный если первые 16 байтов совпадают. Таким образом, они предполагают, что первый 16 байт всегда уникальны. Это чувство Это выглядит подозрительно. Не знаю, нравится ли мне это. Ой, нет. Если указатель не равен обнулить, затем вернуть указатель. в противном случае Нет, они с этим не справляются. Они не обрабатывают столкновения. Они просто совершенно не справляются. столкновения потому что здесь находят просто переносит указатель на корзины добавляет смещение относительно хеша проверьте, действительно ли это так, проверьте, что слова соответствуют действительности. одинаковый. Но если это не так, он вернется. ноль. И это может иметь место в следующих случаях: Одна из двух причин. Одна из них — это Слово пока не нанесено на карту. Другой — У вас произошло столкновение с препятствием, а у них нет. Разграничить эти два понятия. Ага. И причина, по которой они, в общем-то, понимают Прочь от этого, верно? Потому что А как это называется? Эм-м-м, Как называется генератор? Создание измерений в Java.

Segment 47 (230:00 - 235:00)

Эм-м-м, ага. Итак, существует фиксированный набор города, и поэтому все, что вам нужно, это хеш. функция, которая гарантирует, что все они получить уникальные хеши. Итак, вы делаете все идеально. хеширование. Это похоже на жульничество. Я не готов это делать. Я не думаю, что это противоречит правилам. Потому что ничего подобного не существовало. Итак, здесь две части. верно? Один из них — если вы... медленнее, если не совпадает, если Хэши не идеальны, это я считаю. Было бы неплохо. Но это всего лишь Неверно. Если хеши не в порядке. Да, мне это не нравится. Мне не нравится что. Мне это совсем не нравится. Эм, хорошо. Таким образом, это отвечает на наш вопрос о хешировании. сейчас. Хорошо. Таким образом, мы могли бы использовать тот же хеш. фактически это работает. Ну да, это смешно. Потому что для нас это не обман, потому что Если конфликты продолжатся, то у нас всё ещё будут Урегулирование конфликтов. Так, все в порядке. Смешивание. Где наш? смешивание? Эм-м-м, неа. интересный. Интересно, есть ли такое? У нас по-прежнему есть этот префикс правильной длины. что мне вроде как хочется Почему это так называется? Мне кажется, я просто хочу Пусть это будет аннулировано. А потом здесь, Так как же им удается избежать этого? разветвлённый? Они избегают разветвления этого процесса. потому что они просто считывают данные в инициализацию неинициализированную память, верно? Так оно и должно быть. Представьте, что вы сидите в последнем ряду. и вы считываете 16 байт. Если последний ряд имеет станцию, где всего три таких четыре буквы в имени или что-то подобное, верно? Хуже всего то, что нас было четверо. имена из четырех букв плюс точка с запятой плюс теоретически всего три цифры 0. 00. 0 плюс новая строка. Это намного меньше, чем 16. Если бы вы продолжили читать, вы бы читать дальше конца карты памяти которая представляет собой нераспределенную память. Это недопустимо. Как же им удаётся избежать этой проблемы? Java разрешает чтение за пределы допустимого диапазона. Эм-м-м Ну ладно, есть вариант вот этого. Помните, мы выяснили, что стоимость Проблема не в правильности, так как же... о том, что мы делаем, мы говорим этот если э-э Нам даже проверять не нужно. Мы можем просто сказать Чем они занимаются? Они смешиваются

Segment 48 (235:00 - 240:00)

первое они изго Эм-м-м Они удаляют первые восемь байтов. Итак, как я хочу это сделать? Я просто пытаюсь понять, можем ли мы это сделать. Также сделайте так, чтобы у него не было ветвей. Одно из правил — не полагаться на Специфика входных данных. Поэтому я так не думаю. Всё в порядке. Вот что это такое делает. Я не знаю, что тебе сказать. Может, они не прочитали код, да? Эм, но это, безусловно, вызывает скептицизм. Проблема здесь в том, как нам осуществить ветвление. когда количество байтов может быть меньше 16. Эм-м-м Я не могу отобразить это как дополнительную память, потому что Это файл, отображаемый в память. Поэтому я этого не делаю. контролировать то, что произойдет в конце карта памяти, и я не контролирую ввод. файл и это называется достаточно, чтобы ветвь Ошибочный прогноз в данном случае был бы печальным. Эм, Но давайте, пожалуй, просто сделаем это. 16 и сказать: «Хорошо, может быть, именно так мы и будем развиваться». Мы говорим если bytes. len Длина больше 16 тогда сделайте это. В противном случае последний байты. лен копировать из среза байтов с нулями а затем позволить слева — U64 из любых байтов а потом Эм, я думаю, я могу это сделать, но мне придётся это сделать. Сюда? Это кажется неправильным. Верно. Наверняка есть и так далее. Верно. И было бы правильно то же самое, но начиная с 8 9 10 11, а затем пусть h — это умножить на это влево x или вправо Но они длинные, поэтому это i64. Ага. Да, это нормально. Это отлично. Всё в порядке. Эм-м-м, нет. Ах, я испортил свой Vim. Я всё испортил мой вимфу. Здесь должно быть три. Этот Следует сказать три. Тогда я могу пойти сюда. я этот. А потом я смогу сделать четыре. Контрольная точка А. Что? Почему это не суммирует их все? Ну ладно, хорошо. Я сделаю это по инструкции. способ. О боже. Эм, хорошо. Отлично. 8 9 10 11 12 13

Segment 49 (240:00 - 245:00)

14 и 15. Эм-м-м self. 064. Хорошо. Ага. И это ни к чему не приводит. О, мне нельзя этого делать. Отлично. Эм, вы можете использовать try into. Да, но мне не нужно сюда залезать. Потому что я знаю длину. Давайте посмотрим. В данном случае, зачем вообще нужно выполнять хеширование? Просто скопируйте массив городов. Эм, нет. Есть разница, верно? Цель здесь состоит в том, чтобы это всё ещё работает, даже если есть столкновений. Разница здесь в следующем. просто предоставляет нам хеш-функцию, которая Так уж получилось, что это хорошо. Верно? Так что, если но в отличие от оригинала, если есть Если произойдут столкновения, мы ими займемся. правильно. Хотя, как ни странно, это работает медленнее, чем то, что у нас было. Эм-м-м [вздыхает] О, держу пари, это происходит медленнее, потому что принадлежащий Мы занимаемся копированием. Эм, но это также наводит меня на мысль, что вы Они знают, что отчасти именно от этого зависит их победа. from — это не просто идеальное хеширование, но также и то, что их реализация может Это будет намного проще, потому что можно предположить... столкновений нет, или потому что оно игнорирует... игнорирует столкновения. Так что, честно говоря, я думаю, что хочу вернуться. Именно так, потому что это правильно. Вполне разумно. Теперь у нас было разговор о том, может быть, это следует э-э, давайте, может быть, просто потому что Это весело, давай... этот времена просто чтобы сохранить сохраняйте тот постоянный уровень, который они нам дали, вы знать. Эм-м-м, сделать плюс здесь. Давайте посмотрим. Комментариев по поводу столкновений нет. этот файл. Ложь Зависит от того, какую реализацию вы рассматриваете. Вероятно, так и есть, верно? Если и это будет медленнее, то это будет забавно. потому что это значит, что мы действительно прибыли с довольно хорошей хеш-функцией. У нас неплохо обстоят дела с авариями. Итак, кто-то действительно провел сравнительный анализ. количество столкновений, и наше составляет примерно одинаковый. Так что, возможно, есть и другие варианты. профилирование. Ага. Хорошо. Э-э, 27. Поэтому этот способ медленнее. Я, знаете ли, Я просто сохраню то, что у нас было. А затем часть представленного здесь выступления заключается в следующем: В конечном итоге всё сведётся к... Карта, верно? Они могут просто иметь гораздо больше Карта проще, чем наша, но они всё равно... намного быстрее и мы проводим все свое время в карта. Ах, [вздыхает]

Segment 50 (245:00 - 250:00)

Это расстраивает, потому что это означает... нет ничего подобного... Это нетривиальный способ для нас улучшиться. Вот именно, верно? потому что мы могли бы реализовать наша собственная хэш-карта разработанная с нуля система обработки столкновений. но мы вряд ли чтобы улучшить это чем то, на что способен Хэш Браун. Это как если бы вы либо реализовали карту Это просто не имеет отношения к... столкновений, например, Вы храните полные векторные ключи и Выполнение косвенного сравнения ключей. А, понятно. Итак, вот оно. Хорошо, вот оно. этот. Хорошо, это правда. Хорошо. Эм Позвольте мне спросить, что, извините, хорошо, я удалю этот комментарий, вот он. Это очень хорошее, очень хорошее наблюдение. что, если Давайте перейдём сюда, вниз, так что мы собираемся иметь структуру, которая будет... Собираюсь вызвать arrayvec, потому что это... В общем, что это такое? и вот что из этого получится: хм На самом деле, всё даже лучше. Верно? Это стурве. И что оно будет содержать является указатель. Потерпите немного. и длина Размер U. А затем мне нужен ключ здесь. быть занудой. А теперь начинается хитрость с использованием подставки для булав. быть что мы будем действительно-действительно хитрый. Э-э, новый паб. Эм, значит, это займет фрагмент u8, представляющий собой персонажей. Это даст вам представление о себе. Мы хотим сделать так, чтобы строка была короче. строки, потому что таким образом мы избегаем Указатель постоянно гонится за кучей или это на самом деле не куча, а... память, но даже так Нет, это будет куча, потому что мы сохраняя раздражение. Итак, если мы сохраним их в линия затем мы можем упаковать в указатель и длина, что здесь делать. Итак, вот что... Мне это кажется. Мне кажется, что мы собираюсь упаковать их таким образом, чтобы, если Э-э, старший бит длины установлен. затем О, это еще лучше. Мы можем, возможно, использовать выравнивание указателя Но допустим, если установлен гибридный объектив Len. затем вставлено в указатель, затем длина Именно к этому я и стремлюсь, иначе... указатель — это указатель эвакуации Я думаю, может быть, так? если э-э, с. лен меньше, чем сколько мы можем Подойдет ли это? Ну, вообще-то, давайте сделаем Это же не размер U, верно? Это U64. Указатель на самом деле состоит из них обоих. Размер U. Эм Итак, предположим, что мы находимся на

Segment 51 (250:00 - 255:00)

64-битная платформа. тогда мы можем хранить восемь байтов в указатель и семь байтов в длину. Мы не можем хранить восемь байтов в длине. потому что нам нужно где-то хранить встраивается ли строка в текст. или нет. Причина, по которой я этого хотел, заключалась в следующем: Использование строкового вектора вместо вектора массива — это... Следует знать, что в них не может быть нулевых байтов. строка потому что это тоже то, что они сказал, что там были ненулевые Байты юникода. И поэтому в результате мы можем кое-что сделать. Довольно круто. Если это длина меньше 16 тогда э-э Здесь разветвление выглядит немного печально. Но я думаю, что это того стоит. Большинство наших струн будут... Меньше 16, так что с этой частью всё просто. Затем мы хотим самодостаточность где указатель будет Эм-м-м Вот где нам нужно быть немного ближе. осторожный. Э-э, я думаю, мы можем сделать это без разветвлений, говоря, что указатель будет 0 u8 длиной 8. Эм-м-м, а затем это будет скопировано из ломтик из с и длина будет аналогичной. восемь, но мне нужна длина к [вздыхает] Эм-м-м два, верно? Потому что первый укус нам нужен использовать для чего-то особенного. На самом деле, мы Здесь можно добавить еще немного еды, верно? Мы можем упаковать вещи. Ага. Итак, это может быть один из них. только. Первый укус необходим, чтобы… с. лен минус 8. Таким образом, это будет минимум из этого и восемь. Эм, нам может понадобиться здесь разветвиться в зависимости от того, нужно ли нам использовать длина или нет. Верно. Итак, чего я здесь добиваюсь, так это... продемонстрировать, не будучи при этом правильным однако, э-э это как сух 8 нулевая длина. будет 0x FF а затем указатель здесь будет U64 из любых байтов указатель а потом размер U как контуат И с Леном будет то же самое. Я просто пытаюсь показать, кто я такой. Я собираюсь сделать именно это. Верно? Итак, мы собираем вещи. символы из S напрямую в указатель и длина. В противном случае... мы скажем, что значение будет Эм-м-м а будет просто сувек в коробку, нарезанную ломтиками. А затем мы скажем

Segment 52 (255:00 - 260:00)

Эм-м-м указатель — это v точка в качестве указателя э-э, себя указатель — это v, а длина — это v. len len и до тех пор, пока эта длина меньше как U64 с установленным старшим битом, который именно это представление и будет никогда не будет отличаться от этого. хм в качестве немого указателя, конечно, почему бы и нет? И это также может быть беззвучным, это нормально. И это может просто остаться в прошлом, ребята. И это нормально. Это может быть вот это. Э-э, это на самом деле не сработает, так как... написано. Но есть еще один момент. Нам придётся это сделать, а именно, если Мы будем использовать это в качестве ключа. У нас тут возникнут проблемы. с функцией отключения звука, потому что функция отключения звука ожидает то, что мы внедряем eek и хеширование а еще мы можем одолжить ключ. Мы предоставляем данные того типа, который указан на карте. К счастью, мы можем это сделать. Так, мы можем реализовать, э-э, мы можем реализовать Э-э, это просто если self. length Эм-м-м и Эм-м-м Так чего же мы хотим добиться? Мы стремимся восемь байтов, верно? Нет, это U64. Ага. И на самом деле это должно быть так должно И это тоже не так. Так должно быть Эм-м-м Почему я никак не могу понять, что означает старший бит? является? Восемь. Эм, Ой, я совсем забыл пролить свет на коробку. Ты верно. Нет, нам не нужно раскрывать содержимое коробки. На самом деле, здесь можно реализовать перетаскивание. Эм-м-м которая будет иметь схожую логику. для восстановления коробки. О, вы правы. Но мы делаем то, что делаем Это значит, что мы должны сделать... мы должны сделать это. Э-э, это не утечка. Это... в сырой этого Что? Нет, я хочу как в качестве указателя отключения звука. Почему это нестабильно? Отлично. Почему как мутировать? Эм-м-м, Оно недовольно этим. Хорошо. Если установлен старший бит по длине, то мы Знайте, что это один из них. Ой-ой, мы Нельзя же спрашивать про U8, правда? Потому что Они не примыкают друг к другу. Поэтому нам нужно взять с собой ещё больше вещей. Нам нужно, чтобы это было длина и указатель. Хорошо, это сейчас, сейчас это будет быть объединением длины и указателя, которое Это будет лодка U8 длиной 16 футов. Эм-м-м встроенный или это будет куча, которая Будет вот это и вот это.

Segment 53 (260:00 - 265:00)

Подождите, я что, забыл? Синтаксис для объединения? Ой, Встроенный — это вот что куча — это отлично. Это вот что такое куча. и, скажем, себя На самом деле, Это несколько упрощает ситуацию, потому что Это значит, что общая длина составляет 16. s. len cop. На самом деле, вот так это и есть. Полегче. э-э, объединенные Эм-м-м из одного медь размера S и объединение нуля Всё будет хорошо, ладно? а затем мы это сделаем стурвек новый. Нет. Э-э, сам встроенный. Как создать тип объединения? снова? Ах да. Вы строите его с помощью структурный синтаксис. Э-э, вписанный будет объединено. В противном случае, это будет выглядеть так: куча как pointer. len и этот большой. И теперь мы можем сделать, если самоточка вписанный ноль. По сути, мы можем просто сказать 0xf Мы же всё равно установили режим FF, верно? Итак, мы Можно просто проверить это, и всё в порядке. Это небезопасно. Большое спасибо. Потому что это всегда устанавливается автоматически. Так что, если это так э-э, тогда мы знаем, что текст вписан в строку. Так что это так. э-э, самовстроенный. И это опять же небезопасно. Эм, это не совсем все из них, потому что Дальше — один шаг. Что здесь нужно сделать? верно? Потому что нам действительно нужно выяснить, э-э, найти первый нулевой укус. В противном случае, В остальном это легко. В противном случае мы знаем, что находимся в другом месте. случай. Э-э, значит, мы просто позволяем... pointer no let len ​​is unsafe э-э, self. heap. 0 и указатель равен self. heap one. Э-э, и это стоящий ломтик из сырья. И всё это вместе взятое Вся эта история на самом деле просто не имеет смысла. безопасный. Эм-м-м, из необработанных частей указателя Эндлина. А затем, что интересно, падение... На самом деле довольно легко, потому что если это не 0x FFF Только в этом случае нас это волнует. А еще в этом случае мы можем сделать это здесь, в коробке.

Segment 54 (265:00 - 270:00)

из сырого указатель и мы можем от этого отказаться Было довольно легко. Э-э, это похоже на Этот вопрос на самом деле простой, правда? Это только Эм-м-м Мы могли бы сделать это, просто посчитав прокладывая новые пути. Извините, вставка нули. Нет, добавление нулей в конце не сработает, потому что У вас есть... возможно, у вас есть персонаж. В итоге остаются нулевые биты. Поэтому я тогда подумайте, что это просто self. inlined Эм-м-м хорошая библиотека мер из Полагаю, это встраивание self. in. Здесь n — 16. Э-э, и мы ищем ноль. И э-э, если конец равно нулю Тогда это будет весь кусок целиком. В противном случае... это в противном случае длина равна конец смещение от А вот ещё что. Э-э, технически это минус один. я думать Мне здесь нравится, я думаю, что... Э-э, опасно. Не делайте этого дома, дети. А почему оно несчастное? О, наверное, технически это должно быть этот на самом деле. Полагаю, это просто может быть э-э, указатель cvoid. и удалите мою рекомендацию. А что здесь не так? Вот что это такое. несчастен, потому что это должно быть пустотой. что не соответствует действительности. Вместо этого следует быть контуат. Эм, Это будет длина, и это нормально. отлить в форме буквы U, потому что мы знаем, что Конец наступает после начала. Э-э, и это должно соответствовать длине. Прохладный. И оно несчастно, потому что ему нужно Ой и хаш. Теперь мы можем это реализовать. частичная неделя для Стурве теперь очень легко верно, что просто... э-э, что просто срез u8 как частичный eek e о себе и других И это печально, потому что нам нужно это сделать. это или это. Как мне это сделать? Думаю, я могу использовать это в качестве референса. в этом случае я даже не могу это объяснить. Мне это нужно. Я могу сделать так, чтобы самосправедливая ссылка была равной. к другим asref. А ещё я могу реализовать хеширование. для шурта и аналогично Хэширование здесь — это просто эгоизм. штата

Segment 55 (270:00 - 275:00)

а потом оно начнет жаловаться на что-то еще, а именно, да, что мы Также нужно, ну ладно, это нормально, реализация. А ваша система большая, как у индийца, иначе... Это приведет к сбою при наличии строк кода. размер 255. Почему моя индийская идентичность перевернута с ног на голову? Где-то здесь? Да, конечно, я это делаю, не так ли? Эм-м-м потому что длина здесь было бы Эм-м-м Да, если длина здесь небольшая индийский затем Самая высокая точка по длине будет FF. если э-э если длина составляла 255. Так, [фыркает] Ладно. Тогда возникает соблазн сделать это. большой индиец а затем сюда снова большой. Да, давайте так и сделаем. Эм, хорошо. Итак, я Обладают всеми необходимыми качествами, и теперь это жаловались, потому что ожидали найти отсылка к sturve. Но отключите звук Всё должно быть в порядке, если ключ реализует заимствование Q. Итак, чего мы хотим, так это В нашем случае ключевой тип — это... реализовать заимствование u8 для sturve и что мы обещаем, внедряя занимать В принципе, то же самое, что и раньше, но мы также... обещание, что реализация Хэш и реализация eek — это равный. э-э, к типу базового ключа. И теперь можно использовать бесшумные программы. И вот теперь этот позволяет нам выполнять поиск с использованием срезов. Так Нам не нужно строить эту бурю. Нам нужно лишь построить опору. случай, когда нам необходимо выделить средства. А теперь это может быть вот это. Возможно, это оно. Таким образом, мы можем фактически продолжать ссылаясь на них. Эм Это может быть вот это. Посмотрите это. Мгновенно взрывается у меня лицо. Но... я хочу посмотреть, что произойдет. А теперь, если я спущусь сюда. В общем, я думаю, мы… посмотрим, что будет. такое случается. строить бегать. Пытаемся построить 21-й, и мы пытаемся надеяться, что он не рухнет. [фыркает] Ну давай же. Будьте быстрее 21 года и не... крушение. Быстрее 21 и не разбей. Я не думаю, что это быстрее 21. [фыркает] Вот что здесь [в голове промелькнуло] что мы можем выровнять станцию строка в хэш-карту, и таким образом Поиск должен выполняться быстрее. Это в По крайней мере, надежда. Сейчас, Это медленнее, но почему? А, возможно, это просто потому, что я этого не делал. Запустите его через некоторое время. Поэтому это необходимо сделать. В моем тайнике теплее может быть. Но все эти имена выглядят... верно. И название этого города очень похоже на 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16. Итак Существуют имена, длина которых превышает 16 символов. и многие из них короче. 26.

Segment 56 (275:00 - 280:00)

На самом деле, давайте оставим это работать. ещё немного. Мне нужны более репрезентативные выборки. Это, вероятно, хороший вариант. Отчет о проверке. Что мы отсюда получим? Я имею в виду, всё дело в хешировании. Так, [фыркает] но почему? [вздыхает] Меня это ужасно раздражает, что я не могу. поиск эквивалентного ключа метка соответствия. Да, я имею в виду, что практически ни один из них подвешен в Штурвике. Это интересно. Мне действительно любопытно, почему Эта оптимизация не лучше. Мы можем добиться ещё лучших результатов. Хорошо, вот. Позволять Позвольте мне попробовать одну глупую вещь. Эм-м-м, Поэтому мы будем хранить длину. с первого укуса потому что важно лишь то, что это так. не ноль. Итак, мы собираемся сохранить длина плюс один, чтобы он не был равен нулю, даже если Длина строки равна нулю. И тогда это происходит только в том случае, если оно равно. до нуля, затем его следует сбросить. и это становится если оно равно нулю Нет, если это так, если оно не равно нулю. тогда длина — это точка, и все в порядке. Думаю, я просто сделаю это. Хорошо, это просто очень опасно. Только Не делайте этого дома. э-э, встроенный ноль прямо как ваш размер и теперь мне эта ветка не нужна И я могу лишь сказать, что это один к лену минус один. Ага. Всё это небезопасно. Я знаю. я знать. Я знаю. Что мы думаем по этому поводу? Оно зарастет репейником? Мне кажется, оно может заржаветь. потому что этот код выполнялся на каждом dreference хотя мы все еще Да, потому что теперь это просто арифметика. По пунктам 24, хорошо, значит, мы это сделали. быстрее, но все же медленнее, чем эти. будучи векторами Почему? Почему? Я имею в виду, хорошо, А что, если мы глупы? просто сделаем это? таким образом Мы никогда не будем скучать по этому филиалу. может быть

Segment 57 (280:00 - 285:00)

потому что есть некоторые, я имею в виду, мы могли бы сделать так, чтобы получилось 100, верно? 24. Ладно, это не совсем то, что нужно. разница. Я как раз думал о чем-то подобном. некоторые из этих мест, в которых много более длинные имена, например, это. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Никому ничего не говорите. Всё в порядке. Это всё отлично. Всё просто замечательно. Его Всё просто... Всё просто прекрасно. Это всё хороший. Не беспокойтесь об этом. Не вызывайте полицию. Всё в порядке. [фыркает] Мне просто очень любопытно, почему это происходит. ситуация ухудшается из-за предсказателя ветвлений. должен быть безупречен в этой области. вписано в текст, потому что все они должно быть вписано. 25 Хэширование равенства должно быть одинаковым. как будто это был всего лишь кусочек, потому что Они просто этим занимаются. О, держу пари, это потому что... больше не выровнен. Вполне возможно. А вот ещё что-нибудь интересное. Что А что, если мы сделаем это последним кусочком? Поэтому мы говорим этот а затем мы говорим этоэто И затем мы говорим следующее. У меня просто есть подозрение. И это нам, по сути, даже не нужно. Дополнительная проверка здесь сейчас, потому что вы Компенсация не требуется. Эм, вы думаете, я забываю? Почему? Думаю, всё будет в порядке. Я просто хочу посмотреть, потому что теперь вот этот кусочек. Сравнения будут соответствовать друг другу. и поэтому это приводит к некоторому увеличению процессорного времени. Операции выполняются быстрее. В общем, всё ещё верно, но не быстрее. коробка из необработанного материала. Да, это правда, но так быть не должно. иметь значение. Здесь следует выполнить освобождение памяти. всё ещё будет прав. Оно ничего не знает об этом. длительность выделения. Я не думаю Это важно. Эм, хотя я имею в виду, что вполне возможно, что Освобождение памяти просто завершается неудачей. Я думаю, это зависит от того, когда распределитель этого потребует. Длина, но обычно это не так. Это обычно требуется только указатель. и знать положение указателя. Здесь будет то же самое. Эм Но ведь всё в порядке, правда? Если вы если вы этого хотите, мы всегда можем это сделать. сделайте это вот это Эм-м-м Вы вообще умеете что-либо строить? Да, можно. Хорошо. Итак, указатель лен Это как разрезать этого парня, который мне нужен, а затем указатель среза Но я думаю, это не должно иметь значения.

Segment 58 (285:00 - 290:00)

Ага. Все в порядке. Все в порядке. Минусы в соответствии э-э, это u8, это 32. Последний в линию минус один. Надеюсь, теперь вы все довольны. Эм-м-м, но я все еще Итак, причина, по которой я не хочу этого делать. Большее число объясняется тем, что вы увеличение размера хэш-карты. Эм-м-м, и если вы увеличите размер хэш-карта означает, что меньшее количество элементов помещается в неё. кэш. Э-э, это значит, что ты более Вероятность промаха при доступе через кэш высока. хэш-карта. а это, в свою очередь, означает, что Результаты ваших поисков будут хуже, потому что мы... Мы собираемся получить доступ к хэш-карте. Здесь много всего. И поэтому получается почти так, будто я Интересно, может, нам стоит делать меньше? Как и Причина, по которой мне здесь понадобилось 16, заключалась в том, что... Таким образом, мы на самом деле не раздуваем хэш-карта вообще. Если мы это сделаем, если мы сделаем 24, то мы будем раздувание хэш-карты, потому что это больше, чем размер этих двух объединенные. И в итоге у вас будет меньше. хэш-карта помещается в кэш, что позволяет Люди грустят. Эм Мы можем здесь добиться лучших результатов? Я согласен только с 16. Я не совсем понимаю, почему так происходит. медленнее, потому что это должно строго означать Вам нужно получить доступ, вам нужно сделать меньше. «Указательный бег», а это значит меньше вещей. Это должно загрязнить ваш кэш. Да. 24 Стыдно выбросить это, потому что Я почти уверен, что так и должно быть. Быстрее. Эм-м-м Вот что я собираюсь сделать. Я ухожу Использовать встроенные функции — это никогда не вариант для этого парня. А потом Я собираюсь сделать контрольная запись. Я просто хочу увидеть Я просто хочу посмотреть, где это находится. например, что мы делаем? Там очень медленно? И ещё, почему мы всё ещё теряем хеш? рамки? Я до сих пор в замешательстве по этому поводу. тоже часть. Извини. Почему мы всё ещё проигрываем? стек кадров? Эм-м-м цепь. Это вызывает тревогу. Это, безусловно, создает впечатление, что там Столкновений не так много, потому что... столкновение — это когда вам действительно нужно Сравниваем на равенство, верно? Нет, всегда нужно сравнивать. качество, потому что вы не знаете, будет ли оно таким. поиск был смешивание. Я даже не вижу звонков на Сюда, в Азре. ЧАС столкновения, вызывающие замедление движения и поиск. Да, это так. Я просто думаю: а зачем? Возможно, нам придётся взглянуть на результаты. Здесь расположены счетчики. О, так выглядит лучше. Все еще На это уходит много времени, например... Платье из сломанной стопки. На самом деле, вот что... что мы собираемся сделать. Э-э, избавиться этот. Избавьтесь от этого. Эм, а потом я собираюсь сделать перфорацию э-э, статистика и запустите это на некоторое время. Хорошо. А затем мы собираемся

Segment 59 (290:00 - 290:00)

получить разницу. Здесь есть только... Встраивание текста, верно? Больше ничего. Итак, я раздобуду запасы. А потом я построю грузовой корабль. и тогда я выполню свою работу. Я дам ему поработать некоторое время. Я убью а затем мы запустим его снова. Итак, мы Убедитесь, что программа работает с перегревом при использовании бинарного файла.

Другие видео автора — Jon Gjengset

Ctrl+V

Экстракт Знаний в Telegram

Экстракты и дистилляты из лучших YouTube-каналов — сразу после публикации.

Подписаться

Дайджест Экстрактов

Лучшие методички за неделю — каждый понедельник