Pull to refresh

Comments 25

Пять процентов ошибок. Звучит как отличный KPI, если подумать. Мой предсказатель веток в жизни (он же интуиция) работает сильно хуже.

а вы на одних и тех же данные сравниваете?
человек отлично видит паттерны вроде 110110110.
Предсказатель ветвлений это удивительно, но интуиция человека порой кажется просто волшебством

Интуиция - ровно то же нейросетевое/статистическое предсказание исходя из накопленного опыта.

Джун правда сильно удивился рассказу про алгоритм ветвления?

30+ лет назад этому учили на специальности "ЭВМ, комплексы, системы и сети".

Это вроде совсем основы IT?

P.S. Публикации+ поставил. Вспомнил IT молодость 👴

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

Джун смотрел на меня как на сумасшедшего

Я надеюсь эта фраза в публикации действительно означает что " у джуна есть тяга к знаниям" 🤔

30+ лет назад...

Непонятно что вы хотите доказать, но TAGE был придуман в 2006, а первые процессоры с таким предсказателем вышли в 2010+.

То что было 30 лет назад, сейчас никуда не годится.

Это вроде совсем основы IT?

Для большинства людей, что-то более низкоуровневое чем Python, это тёмный лес.

Обалдеть! Напиток Бравндо содержит электролиты!1

Вы прикалываетесь, или серьезно? Чего еще не знает Ваш сферический джун? Предсказание ветвлений лет так 30+ насчитывает, начиная с Pentium-1.

Пусть еще джун немного схемотехнику материнских плат покопает, погуглит "Гитарюга power on sequence" и узнает, что основной процессор запускается последним, когда ему разрешат процессоры южного и северного мостов. И такое прочее. Статья позорная получилась.

Дайте почитать Михаила Гука этим сферическим джунам, может немного мозга в голове появится.

Хотя вайб-кодинг решит эту проблему. Нет знаний, нет проблем. Вкалывают роботы, счастлив человек. intelligence_happiness_liza_simpson.jpg

Чтобы "побороться" с Meltdown-Spectre, которые существовали только в лабораторных условиях, в винду подвезли патчи, снизившие ее производительность процентов на 30%.

Ой вей.

Не переоценивайте людей, которые делают запрос в gpt на подобии "Какой язык самый быстрый? Перепиши на него код сайта"

COBOL кстати уже насчитывает 64 года, но мало кто его знает почему-то

Схемотехнику, я уверен, вообще никто не откроет из тех кто только начинает свою карьеру

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

Я лично знаю, что процессор стартует не в первую очередь. Но конкретно когда... За несколько лет работы сервера старт у него может быть один раз, так что пока незнание проблемы не составило (а если бы и составило - сел бы, разобрался).

Хм, а вы так же реагирует на вопросы новичков/учеников/студентов? Я просто знаю несколько людей, которые делают "глубокий вздох" на любой вопрос и с ними не любит работать почти никто.

Все мы в чем-то новички; человек, который говорит, что он спец в том или ином деле - либо подлец, либо идиот.

Новички бывают 2 типов: с пытливым умом, и с отсутствующим критическим мышлением. Вторые пишут вопросы вроде "а если у сим-карты маркером закрасить один контакт, правда что интернет станет бесплатным?", и таким в IT делать нечего. Ребят с пытливым умом я уважаю. Они обычно какое-то самостоятельное исследование проводят (как то просто гуглят), и затем задают вопросы. Ребята второго типа (=сорта) хотят готовое на блюдечке и совсем не хотят думать, к сожалению. Но при этом колотят понты будь здоров.

А так да, я знаю что ничего не знаю. Всем гуглить Даннинга-Крюгера.

В "глубокий вздох" сейчас превратился бывший ранее популярным ресурс Wasm (https://wasm.in). Такое наблюдать очень печально.

С другой стороны, отсылка к фильму "Идиократия" мной сделана не просто так.

Истина где-то посередине. Хабр же начал постепенно превращаться во что-то странное.

Можно задаться целью понять, когда мы свернули не туда. Примерно в 2012. На Хабре статья с картинкой очков на фоне монитора в ленте "лучшее за все время", а Васм как раз был топчиком, исследования и обсуждения кипели, после чего началась резкая его стагнация.

Полагаю, во всем виноват интернет, его массовое проникновение.

"Я же понимаю, что в этих ваших коробочках - все знания мира. Но отбери его (смартфон) у вас, и вы двухзначное число не сможете сложить. А для созидания нужно, чтобы знания вот здесь были, в голове, чтобы синтез какой-то был. А иначе вы будете производить только углекислый газ." "Вы живете в обществе, где никто ничего не знает, но имеет мнение по любому вопросу."

(с) Гости из прошлого 1 сезон 4 серия

С мыслью про то, что 99% кода руками под это трогать не надо, согласен полностью. Полезно понимать механизм, полезно помнить про горячие места, но превращать каждую ветку в битовую головоломку ради потенциальной красоты в бенчмарке - так себе затея

Я подозреваю в случае отсортированного массива надо сначала найти первое 128 методом половинного деления, а потом складывать только вторую часть массива. Код со сдвигом конечно хорош, но в плане читаемости довольно хрю-хрю, использовать надо только когда сам массив большой. Нет, так-то в критически производительных участках и goto незазорно использовать, но это мягко говоря нишевые приём.

А зачем искать? Крутить от конца - префетчеру без разницы.

Помнится недавно была статься на тему, что глюк когда имя ендпойнта заканчивается на m. И как раз там был типа такого кода проверки. В патче заменили на обычный if

Неотсортированный массив: значения прыгают хаотично. 73, 201, 14, 255, 99, 182... Предсказатель видит: да, нет, нет, да, нет, да... Никакого паттерна. Он ошибается в ~50% случаев. Каждая ошибка — flush конвейера. Код ползёт.

Я всё-таки за дотошность, аккуратность и стогость формулировок. У предсказателя переходов есть на самом деле несколько уровней. На самом нижнем он действительно смотрит на паттерн повторения и параллелит бранч, если он будет "взят". Но там также есть и ещё второй уровень памяти, так что когда значения прыгают хаотично, он всё равно обучается и "ошибается на 50%" лишь в первый раз. И когда вы второй раз пойдёте по тем же самым значениям, он это вспомнит (а у вас тем внешний for цикл есть). Размер этого "кэша" истории не документирован, в отличие от кэшей данных и инструкций, но на Хасвелле он составляет примерно 4К,я проверял Обычно таки в подобных тестах спускаются на уровень ассемблера и попутно считают количество инструкций на такт, и всё встаёт на свои места и раскладывается по полочкам. Эх, где-то была статья, да вот найти не могу. Попробуйте поиграть размером массива от килобайта до нескольких - вы будете приятно удивлены.

эту часть жпт писал)

По стилю хорошо видны ручные правки, их процентов 30.

Одна смотрит на последние 4 перехода, другая — на 8, третья — на 16, четвёртая — на 64... Геометрическая прогрессия.

Это не геометрическая прогрессия.

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

интересно, какой процент читателей, действительно, хоть раз в жизни, написали или хотя бы пытались сделать горячий цикл действительно горячим.

99.8% точность. Но для реального кода этого мало.

Точность уже 85–90%. Неплохо.

Результат? 95–97% точность на реальном коде. На некоторых бенчмарках — 98%

Где логика?

Цикл на 1000 итераций это читерство, там по сути предсказывать нечего (почти), а вот когда идёт код с кучей разных веток, то тут падает до 85%, а TAGE потом эти 85% подтягивает обратно к 97% (если коротко, то эти три цитируемые цифры относятся к разным предсказателям в разных условиях)

Джун смотрел на меня как на сумасшедшего

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

Доабстрагировались, блин.

На Java получилось в ~1.45 раза (86.6 сек vs. 59.6, Intel Ultra 7 255U):

public class t{
  public static int[]  aiAr = new int[1000000];
  public static Random oRnd = new Random();


  //-- -------------------------------
  public static void main(String[] argv){
        int     i, j, iSum, iArSize;
        long    lBegTS_ns, lEndTS_ns, lDiff_ms;

//      CODE
        //-- ---------------
        iArSize = aiAr.length;
        for(i = 0; i < iArSize; i++){
       //aiAr[i] = oRnd.nextInt(256);   //-- not sorted;
         aiAr[i] = i; //(i % 256);      //-- sorted;
        }
        //-- ---------------

        //-- warm-up JIT ---
        iSum = 0;
        for(i = 0; i < 100; i++){
         for (j = 0; j < iArSize; j++){
          if(aiAr[j] >= 128){iSum += aiAr[j];}
        }}
        //-- ---------------

        //-- ---------------
        lBegTS_ns = System.nanoTime();
        for(i = 0; i < 10000; i++){
         for (j = 0; j < iArSize; j++){
          if(aiAr[j] >= 128){
           iSum += aiAr[j];
           iSum += aiAr[j];
           iSum += aiAr[j];
           iSum += aiAr[j];
           iSum += aiAr[j];
           iSum += aiAr[j];
           iSum += aiAr[j];
           iSum += aiAr[j];
           iSum += aiAr[j];
           iSum += aiAr[j];
           iSum += aiAr[j];
        }}}
        lEndTS_ns = System.nanoTime();
        lDiff_ms  = (lEndTS_ns - lBegTS_ns)/1000000L;
        //-- ---------------

        System.out.println("Diff .....: [" + lDiff_ms + " ms]");
        return;
  }//End of <static void main(String[] argv)>
  //-- -------------------------------
}//End of <class t>

По ходу чтения статьи кое-что гуглил, и наткнулся на замечательный тред, которому более 17 лет:

https://www.reddit.com/r/programming/comments/8fqgy/cmov_instruction_a_bad_idea_on_outoforder_cpus/

Люди из другого времени обсуждают оптимизации под Пентиумы. Кто-то в комментариях даже предложил использовать два бита под предсказания - несколько я знаю, позднее так действительно стали делать на практике.

Sign up to leave a comment.

Articles