LLVM в GPU компиляторах/Стандарты С++ (часть 2)

แชร์
ฝัง
  • เผยแพร่เมื่อ 13 ต.ค. 2024

ความคิดเห็น • 64

  • @MikhailGoncharov-tl4cr
    @MikhailGoncharov-tl4cr 6 หลายเดือนก่อน +6

    Каждый раз когда я вас слушаю я поражаюсь глубине понимания своих предметов оратора. Не менее удивляет и феноминальная способность обяснять на доступном языке без потери качества информации

    • @ultimate_engineer
      @ultimate_engineer  6 หลายเดือนก่อน

      Спасибо, очень рады, что у вас такие впечатления от нашего гостя :)

  • @ЕвлампийФедоров-ж2е
    @ЕвлампийФедоров-ж2е 9 หลายเดือนก่อน +11

    Ничего не понял, но очень интересно.

  • @tonupif
    @tonupif 9 หลายเดือนก่อน +3

    Спасибо за гостя ждал выпуска.

  • @volodiaagadjanov7087
    @volodiaagadjanov7087 9 หลายเดือนก่อน +4

    Константин в своих спичах как всегда крайне хорош

  • @makaedg
    @makaedg 8 หลายเดือนก่อน +1

    Когда изучал Haskell кайфанул в моменте, когда лектор (Денис Москвин) прокомментировал оператор монадического связывания фразой "вот мы и изобрели императивное программирование через оператор точка с запятой"

  • @yuliyacher67
    @yuliyacher67 8 หลายเดือนก่อน +1

    Великолепно. Благодарим!

  • @ignatloskutov2792
    @ignatloskutov2792 9 หลายเดือนก่อน +6

    Очень интересный рассказ - во всяком случае, пока не дошёл до вещей, про которые я хоть что-нибудь знаю. Казалось бы, как Linux может сломаться от изменений в юзерспейсной библиотеке glibc? Разгадка проста: на самом деле история имела место с Flash Player, в котором проприетарная лицензия не позволяла что-то просто взять и подхачить на стороне мейнтейнеров. Линус возмущался на правах пользователя, которому сломали звук в видосиках с котиками, в итоге все долго думали, как бы вызвать memmove вместо memcpy так, чтобы ничего не нарушить, а Дреппер как бы ни винил программистов (в целом закономерно, но что с того пользователям) - в конце концов к glibc всё же приделали версионирование символов, чтобы бажный, но ранее работавший код не ломался от того, что кто-то обновил glibc.

    • @eklepilkina
      @eklepilkina 9 หลายเดือนก่อน

      Спасибо! Я таких деталей не знала. Но понятно, что неприятно, когда что-то ломают и тебя это аффектит. Мы тоже были не очень довольны, когда в релизе gcc13 сломали в стандартной библиотеке обратную совместимость.

    • @billjohnes9380
      @billjohnes9380 9 หลายเดือนก่อน

      После скандала с memcpy/memmove я был так потрясён реакцией Linus'а, что сначала некоторое время не мог в это поверить.
      Особенно меня потрясло это его заявление: "Standards are paper. I use paper to wipe my butt every day. That's how much that paper is worth."
      Это точная цитата, но она встречается много, где, первоисточник же ищется по ключевым словам bug 638477 bugzilla redhat (читать Comment 129).
      Ни один разработчик никогда так не падал в моих глазах.
      На самом деле решение там имеется, и оно -- не от Linus'а,хотя он предложил своё тоже.
      А именно -- все вызовы memcpy в бинарнике заменяются на memmove с помощью утилиты dd, то есть, бинарный файл patch'ится.
      Или ещё проще -- модифицируется одно вхождение в динамической таблице символов.

  • @meetem7374
    @meetem7374 3 หลายเดือนก่อน

    Забавно, что HLSL теперь кроссплатформенный и кроссапишный. Плюс есть всякие битфилды, темплейты и всё такое. И есть компиляция в бекенды SPRIV, GLSL, и даже в Metal. И для Vulkan есть неймспейс чтоб юзать device address какой-нибудь, арифметика для указателей)

  • @qwertyq3889
    @qwertyq3889 9 หลายเดือนก่อน +1

    Помню свою беспомощность при поиске причины повисания одного SoC от TI. На условном ядре #0 была ошибка доступа по шине, а намертво вешалось при этом ядро #1. И выведать проблему путем отладки софта заняло очень много времени.
    Кайфово работать верификатором, когда видишь сразу всё состояние чипа во все моменты времени на диаграмме, и ничего от взгляда не скрыто.
    С подобными проблемами надо идти именно к верификаторам, и если не баг в железе найдут, то хоть баг в софте помогут найти быстрей

    • @eklepilkina
      @eklepilkina 9 หลายเดือนก่อน +1

      Не всегда и у не у всех, к сожалению, есть легкий доступ к верификаторам. Аппаратчики люди занятые. У нас как раз одним из следующих гостей планируются именно верификатор, может затронем и этот вопрос :)

    • @vitalyl1327
      @vitalyl1327 8 หลายเดือนก่อน

      Это точно. Я работал над двумя разными GPU ядрами (ARM Mali T6xx and Broadcom VC5), и было до крайности удобно иметь полную RTL модель GPU - никогда больше у меня не было такой удобной среды для отладки компиляторов.

  • @billjohnes9380
    @billjohnes9380 9 หลายเดือนก่อน +4

    При кодогенерации (backend), конечно, не следует диагностировать UB, но при разборе (frontend) -- это было бы очень полезно.
    Кстати, сейчас компиляторы стараются диагностировать, но, в идеале, было бы неплохо, если бы диагностировалось всё.
    Например, лет 20 назад я писал такой типичный код для переносимого вычитывания двухбайтового числа в little endian'е (скажем, это заголовок протокола был):
    unsigned f(unsigned char const *&p) {
    return *p++ + 256u * *p++;
    }
    И даже не подозревал, что там -- махровый UB.
    А сейчас все компиляторы предупреждают об этом, в частности, clang делает это так:
    source>:11:11: warning: multiple unsequenced modifications to 'p' [-Wunsequenced]
    11 | return *p++ + 256u * *p++;
    Если бы компилятор детектировал все случаи UB, то качество программ, равно, как и грамотность программистов, -- заметно улучшились бы.

    • @z140140
      @z140140 8 หลายเดือนก่อน

      какое ж это ub? это просто чтение слова в random-endian

    • @billjohnes9380
      @billjohnes9380 8 หลายเดือนก่อน +1

      ​@@z140140 Когда-то я тоже так думал.
      Но вы настолько уверены в своей правоте, что даже недвусмысленное предупреждение компилятора для вас -- не указ.
      Либо вы просто не понимаете, о чём речь, и поэтому предупреждение компилятора вам ни о чём не говорит.
      Но, в любом случае, ищите теперь самостоятельно, что здесь не так, я не буду проламывать ваш "железобетон", защищающий вашу "правоту".

  • @1975nacgul
    @1975nacgul 9 หลายเดือนก่อน

    давайте теперь в формате stendup следующую встречу

  • @leadbellyvic393
    @leadbellyvic393 9 หลายเดือนก่อน

    Одно небольшое уточнение - в RCU читатели не останавливаются и не блокируются никогда, удаление структуры происходит не когда "они перестают читать на краткое мгновение" а когда все читатели покинут так называемую rcu_read_lock секцию. Покидая эту секцию и входя вновь они получают новую копию. Это порождает еще один тонкий эффект - группа читателей получает разные копии структуры, корректные но разные.

    • @eklepilkina
      @eklepilkina 9 หลายเดือนก่อน

      Спасибо за уточнение, конечно, это так :) В подкасте просто объяснения на пальцах, там все детали упомянуть нельзя, ну или иначе эта будет уже подкаст на тему многопоточности и механизмов синхронизации

  • @vr360_progress4
    @vr360_progress4 9 หลายเดือนก่อน

    Забавно, что Константин упомянул статью Дреппера. Я вот как раз надеялся бы услышать в какой-либо форме от него лекцию с обзором этой статьи, с учётом современного состояния железа - всё-таки прошло 16 лет после написания статьи.

    • @ultimate_engineer
      @ultimate_engineer  9 หลายเดือนก่อน +2

      Так статья-то до сих пор хороша и актуальна. С тех пор не так уж много чего-то революционно поменялось. А лекции про современное состояние соответствующего железа читает, например, Onur Multu.

  • @mr.Ponizovsky
    @mr.Ponizovsky 9 หลายเดือนก่อน

    Воо, спасибо-спасибо! Ждал)

  • @zero8162
    @zero8162 8 หลายเดือนก่อน

    Первая параллельная программа работала в 1.5 раза хуже чем однопоточная, а вот на CUDA удалось с первого раза что-то быстрое запилить

  • @SharplEr
    @SharplEr 4 หลายเดือนก่อน

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

  • @donutsleader
    @donutsleader 9 หลายเดือนก่อน +1

    Если писать код так, чтобы он не падал, то запрет эксепшонов - нормальное поведение )
    Кучу библиотек на C не мешает использовать отсутствие в них исключений )

    • @gr3yknigh1
      @gr3yknigh1 9 หลายเดือนก่อน +2

      В Си у тебя вместо исключений либо errno ставиться, либо код выхода, либо переменная, которая может означать, например, кол-во записанных байт, и ошибку, если -1. Ну или просто сегу в лицо кидать
      Писать "чтобы не падало" - сказка. Падать будет и надо рекавериться.
      Но я и не защищаю исключения. По стандарту не определено вообще как они должны аллоцироваться. Хоп и на куче тебе аллокацию лови)

    • @melchugin
      @melchugin 9 หลายเดือนก่อน +2

      И легко можно забыть проверить код возврата или errno, что мы и видим.
      Исключения проигнорировать сложнее. Как минимум рантайм "мягко" намекнёт о необработанном исключении.
      Про алокацию, да, всё так, но у гцц или у стдлибы есть флажок, чтобы запретить динамическую алокацию.

    • @gr3yknigh1
      @gr3yknigh1 9 หลายเดือนก่อน +2

      ​@@melchugin О, про флаг не знал.
      Про забыть проверить код, к слову, можно ещё с С23 ставить [[nodiscard]]. Наконец-то стандартизировали))
      А так да, надо постоянно проверять что всё это барахло возвращает.

    • @melchugin
      @melchugin 9 หลายเดือนก่อน +2

      ​@@gr3yknigh1, да атрибуты это хорошо. Но их нужно не забыть поставить, и это варнинг. А с Werror не все собираются.
      Ну и самый плюс от исключений: happy-path в них really zero cost! 0 оверхеда в рантайме (только чуть-чуть толще бинарник будет).
      А все эти if всё же код и он всегда работает. Бранч предиктор, сглаживает эту ситуацию, но всё же.

    • @billjohnes9380
      @billjohnes9380 9 หลายเดือนก่อน +1

      > Если писать код так, чтобы он не падал, то запрет эксепшонов - нормальное поведение )
      Возьмём код:
      A a;
      a.method();
      Если в конструкторе 'A' выяснится, что сконструировать объект не удалось, то как без поддержки исключений сообщить об этом коду, в котором заводится переменная 'a' и как узнать, что нельзя вызывать метод 'method'?
      Google совершила в своё время настоящий epic fail, отказавшись использовать исключения ради попытки выиграть в производительности, но теперь уже поздно.

  • @apivovarov2
    @apivovarov2 9 หลายเดือนก่อน

    @49:22 а что за лекция про hazard pointers? не могу найти

    • @ultimate_engineer
      @ultimate_engineer  9 หลายเดือนก่อน +1

      Полагаем, что речь про это th-cam.com/video/R1XcV5vHn0I/w-d-xo.html, просто в начале идет описание проблемы

  • @alexandrgonzales6503
    @alexandrgonzales6503 9 หลายเดือนก่อน

    ОпенМП хорошо ускорил с первого раза, + Неон (Кортекс 4хА9), Гцц. Обработка видео кадра.

    • @eklepilkina
      @eklepilkina 9 หลายเดือนก่อน

      Здорово! Конечно, если подходить разумно и потратив время на изучение предмета, то и с первого раза можно получить ускорение.

  • @TheDustyChannel3334
    @TheDustyChannel3334 9 หลายเดือนก่อน +3

    Что такое спил? Я новичок

    • @RenamedChannel
      @RenamedChannel 9 หลายเดือนก่อน +4

      Register Spill. Когда не хватает регистров под все переменные, компилятор "разливает" лишние по памяти.

    • @TheDustyChannel3334
      @TheDustyChannel3334 9 หลายเดือนก่อน +1

      @@RenamedChannel Класс, спасибо!

  • @TheDustyChannel3334
    @TheDustyChannel3334 9 หลายเดือนก่อน +1

    Что такое коалясинг? Я новичок

    • @АдамСмит-ы7р
      @АдамСмит-ы7р 9 หลายเดือนก่อน +2

      Coalescing, то есть объединение - вроде речь шла о том, чтобы как-то померджить несколько операций над одной и той же памятью

    • @TheDustyChannel3334
      @TheDustyChannel3334 9 หลายเดือนก่อน +1

      @@АдамСмит-ы7р Хорошо, спасибо!

  • @moro3ify
    @moro3ify 5 หลายเดือนก่อน

    Я как то пробовал распараллелить программу
    на питоне -_-

  • @alnsn
    @alnsn 9 หลายเดือนก่อน

    40:42 "компилятор ведёт себя так, как будто UB не существует, как мы можем диагностировать то, чего не существует?" в математике это называется доказательством от противного: "предположим, что в этой программе нет UB", а потом запускаем программу доказательства теорем, которая находит противоречие. Компилятор мог бы быть такой программой, и иногда он даже может найти противоречие, но в-общем случае это невозможно.

  • @aweryc
    @aweryc 9 หลายเดือนก่อน

    Очень интересно) Ничего не понятно)

  • @FeelUs
    @FeelUs 4 หลายเดือนก่อน

    Пользователи видят какую-то проблему в C++, и не видят чужих предложений по решению этой проблемы, и начинают изобретать свои улучшения.
    Если бы был какой-нибудь открытый CEP (по аналогии с PEP), то пользователи бы просто как-нибудь голосовали за чужие предложения и не придумывали бы свои.

  • @safocl9768
    @safocl9768 6 หลายเดือนก่อน

    уххх... как же я рад, что Константин считает прямо как я -- что линукс должен быть переписан на плюсы....

    • @vilture5706
      @vilture5706 2 หลายเดือนก่อน

      С++ это язык, который выбирают плохие программисты, потому что там проще всего писать ужастный код - Линус Торвальдс.
      Мне кажется ядро Линукса на С++ в ближайшие 30 лет переписывать не будут.

  • @AnnaLesnykh
    @AnnaLesnykh 9 หลายเดือนก่อน +2

    Что такое CCА? Я новичок

    • @vladislavtarasov6873
      @vladislavtarasov6873 9 หลายเดือนก่อน +1

      Single static assignment form, простыми словами - представление, где присваивание в переменную может быть только один раз

    • @apivovarov2
      @apivovarov2 9 หลายเดือนก่อน +1

      сказали же - прочитайте самостоятельно, например в вики

    • @apivovarov2
      @apivovarov2 9 หลายเดือนก่อน

      SSA

  • @sup5282
    @sup5282 9 หลายเดือนก่อน

    Реально вообще во все о чем шла беседа ворваться в возрасте 35+ лет с нуля и еще чего-то преуспеть? Или поздняк уже?

    • @The604FX
      @The604FX 9 หลายเดือนก่อน +1

      Реально
      UPD: Всё реально, если уверен в себе

    • @eklepilkina
      @eklepilkina 9 หลายเดือนก่อน +2

      Конечно, если очень интересно и нравится сфера, все возможно, но понятно, что это займет время. Тут не от аккаунта канала нельзя прикреплять ссылки, поэтому просто напишу название. Есть интервью с Алексеем Шипилевым и статья с выжимкой на хабре, которая называется «Чтобы стать хорошим системщиком, нужно 5-10 лет опыта» - интервью с Алексеем Шипилёвым из Java Performance Team. Интервью старое, но хорошее

    • @billjohnes9380
      @billjohnes9380 9 หลายเดือนก่อน +1

      Ворваться -- реально, но есть обязательное условие: должно быть настолько дико интересно, что за уши не оттащить.
      Иначе, есть очень большой риск, что через некоторое время наступит разочарование, и придётся вернуться и признать, что врывались зря.

    • @billjohnes9380
      @billjohnes9380 9 หลายเดือนก่อน

      @@eklepilkina К ссылкам на сам youtube это не относится: th-cam.com/video/B1P8RHGtE5I/w-d-xo.html
      Я добавил ссылку, и мне ничего за это не было, то есть, это сообщение не удалилось, поскольку ссылка -- на youtube.

    • @1975nacgul
      @1975nacgul 9 หลายเดือนก่อน +3

      мне 49 я снуля начинаю

  • @sh1ngg
    @sh1ngg 9 หลายเดือนก่อน

    CUDA это свой мир, но Nvidia даёт хорошие тулзы и библиотеки. На и C++ там особо не нужен.
    PS гость просто эталон токсичности.

    • @ultimate_engineer
      @ultimate_engineer  9 หลายเดือนก่อน +6

      Не можем с вами согласиться - нам было очень интересно и комфортно слушать Константина :)

    • @nullbox02
      @nullbox02 9 หลายเดือนก่อน

      CUDA, на самом деле, простое расширение C++ со своими библиотеками. А тулы у Nvidia vна LLVM

  • @AndreyDeykunov
    @AndreyDeykunov 6 หลายเดือนก่อน

    Спилы? Спинлоки что ли?

    • @eklepilkina
      @eklepilkina 6 หลายเดือนก่อน +1

      Register Spill. При аллокации регистров в случае, если не хватает регистров для всех переменных, часть этих переменных перемещается в память. Этот процесс называется spilling.

    • @AndreyDeykunov
      @AndreyDeykunov 6 หลายเดือนก่อน

      @@eklepilkina ясно