Разработка DSP-библиотеки / Низкоуровневые оптимизации / Программирование в 80-90-е

แชร์
ฝัง
  • เผยแพร่เมื่อ 20 ก.ค. 2024
  • В гостях у «Битовых масок» - Игорь Астахов, инженер-программист, который разрабатывает высокопроизводительные библиотеки и занимается низкоуровневыми оптимизациями уже 25 лет. Он начал строить карьеру во времена, когда компьютеры были размером со шкаф, и стал сотрудником Intel в конце 90-х годов. Сейчас Игорь занимается оптимизацией реализаций различных DSP-алгоритмов в YADRO. Ведущие подкаста поговорили с ним о том, как писали машинный код три десятилетия назад, об особенностях высокоэффективного кода, векторизации и акселераторах.
    Правда ли раньше писали и дебажили код на бумажке? До сих пор ли пишут на ассемблере для получения наилучшей производительности? Почему Intel Itanium - идеальный процессор? Как работают над переносом библиотеки на архитектуру, которая еще не появилась? Сможет ли AI создать высокопроизводительный код? Обсуждение этих и других вопросов ждет вас в тринадцатом выпуске «Битовых масок».
    · Упомянутый доклад Валерии Пузиковой «Матричные расширения RISC-V»: • Матричные расширения R...
    · Подписывайтесь на Telegram-канал подкаста: t.me/+bx50QfUlw4pkZDEy
    🔹 Как попасть в команду YADRO? careers.yadro.com
    🎧 Слушайте «Битовые маски» на других платформах:
    Яндекс.Музыка: music.yandex.com/album/26508178
    Apple Podcasts: podcasts.apple.com/ru/podcast...
    Все платформы: engineer.yadro.com/podcasts/c...
    00:00:00 - Тизер
    00:00:38 - Представление Игоря Астахова
    00:01:31 - Как программировали в 80-90-е
    00:12:03 - Появление первого офиса Intel в России
    00:13:51 - Разработка высокопроизводительной библиотеки в Intel
    00:19:26 - Почему Itanium - идеальный процессор?
    00:25:53 - Идеальный код с точки зрения разработчика низкоуровневых оптимизаций
    00:30:52 - Переход с ассемблера на интринсики
    00:33:37 - Оптимизация самых популярных функций
    00:37:31 - Измерение производительности низкоуровневых оптимизаций
    00:41:55 - Performance-проблема на микроархитектурном уровне
    00:48:28 - Взаимодействие с разработчиками процессоров
    00:52:23 - Влияние руководителей на путь Intel
    00:55:13 - Возможна ли реализация на С без интринсиков для низкоуровневых оптимизаций
    00:59:16 - Методология разработки высокопроизводительных функций
    01:09:33 - Работа с акселераторами
    01:14:18 - Векторизация - основной способ оптимизации
    01:16:55 - Может, надо такую библиотеку писать на C++?
    01:18:59 - Какой тулинг используют
    01:20:45 - Насколько перспективны новые технологии ИИ
    01:23:05 - Заключение
    #dsp #intel #assembler #c #performance #оптимизация
  • วิทยาศาสตร์และเทคโนโลยี

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

  • @yettechnicalchannel
    @yettechnicalchannel 14 วันที่ผ่านมา +6

    Спасибо за интервью, помогает вспомнить что делал в университетское время... Если до сих пор работают такие люди - еще не все потеряно )

    • @ultimate_engineer
      @ultimate_engineer  12 วันที่ผ่านมา

      Спасибо вам! Нам тоже радостно работать бок о бок с такими профессионалами!

  • @DAlexMaster
    @DAlexMaster 3 วันที่ผ่านมา

    Как правильно заметил Астахов про оптимизацию алгоритмов свёртки сигналов посредством перехода из времЕнной области в частотную (ДПФ) и обратно, существенно сокращается время вычислений прохождения сигнала через фильтр. Гениальный подход, придуманный много десятилетий назад, позволяющий строить менее требовательные к аппаратному обеспечению системы. Ещё будучи студентом восхищался такими фокусами с преобразованием Фурье, особенно при взятии "неберущихся" интегралов :)

  • @usergnusmas6879
    @usergnusmas6879 15 วันที่ผ่านมา +10

    Вот, это настоящий инженер. Интересно, чем занимаются такие люди.

    • @ultimate_engineer
      @ultimate_engineer  14 วันที่ผ่านมา +1

      Спасибо! Стремимся выбирать интересных гостей!

    • @MaruiInfantry
      @MaruiInfantry 14 วันที่ผ่านมา +2

      Ничем. Они кодили в те времена, когда ты приходишь и на Си + asm пишешь такой говнокод, что ужас. Всё в монолитах и экстернах. Пишет какое-то Фурье или FFT на массивчиках. Больше ничего. Скорее всего он не сможет написать SQL-запрос даже для простейшей СУБД. Не говоря уже о том, чо NoSQL или темболее NewSQL.
      Возможно он из головы напишет какой-то FFT на C + SIMD, но это уже не нужно.

    • @usergnusmas6879
      @usergnusmas6879 13 วันที่ผ่านมา +2

      @@MaruiInfantry на самом деле печально, что такие люди мнение востребованы на рынке труда, мне кажется, это несправедливым. Ведь они обладают уникальным опытом.

    • @z140140
      @z140140 13 วันที่ผ่านมา +4

      @@MaruiInfantry мы например пишем те самые sql-движки :) или те же FFT, которые улучшают качество твоих фоток. или библиотеки deep learning, которые используют для LLM

    • @z140140
      @z140140 13 วันที่ผ่านมา

      @@usergnusmas6879 они не востребованы в небольших компаниях. в янлексе или вк такие люди уже есть. в гугле или ms их сильно больше. плюс есть технологические стартапы, типа clickhouse

  • @Slesar.
    @Slesar. 13 วันที่ผ่านมา +5

    Елы палы, 30 лет в программировании, но только правда в основном прикладных задач, свое время от нечего делать наизусть учил книжку по процессорам Интел пятого поколения, правда в реальной жизни эти предметные знания так и не пригодилось, а сейчас даже половину сказанного плохо понимаю, о чем дядька говорит.
    Собственно, от программирования ПК давно ушел в область программирования МК, а теперь еще и ПЛИС, там интересней, по тому что в одиночку можешь делать и сопровождать готовые проекты под МК, считай все время делать свои собственные почти уникальные мини системы, это доставляет больше удовольствия. А программирование реальных приложений ПК, это в основном командная работа, что меня никак не привлекает.

  • @taraslitvinenko8651
    @taraslitvinenko8651 14 วันที่ผ่านมา +6

    Большое спасибо, за такие интервью, очень интересно 😊

    • @ultimate_engineer
      @ultimate_engineer  14 วันที่ผ่านมา

      Рады, что вам понравился выпуск!

  • @nikolaykozlov4888
    @nikolaykozlov4888 15 วันที่ผ่านมา +1

    Как же круто!

  • @kuqmua755
    @kuqmua755 14 วันที่ผ่านมา +1

    Интересно. Спасибо

    • @ultimate_engineer
      @ultimate_engineer  14 วันที่ผ่านมา +1

      Приятно! Спасибо вам!

  • @nangelo0
    @nangelo0 9 วันที่ผ่านมา

    Очень крутой выпуск!!!

    • @ultimate_engineer
      @ultimate_engineer  9 วันที่ผ่านมา

      Спасибо! Рады, что было интересно!

  • @sergeykirdyankin7027
    @sergeykirdyankin7027 14 วันที่ผ่านมา +2

    IIR без обратной связи это как? Хотелось бы посмотреть на блок схему, и чуть подробнее о перерасчёте коэффициентов. Статьи на эту тему не публиковали, где нибудь на IEEE?

    • @ultimate_engineer
      @ultimate_engineer  12 วันที่ผ่านมา +2

      Статью такую не готовили ещё, но спасибо за идею! Если опубликуем, то пришлем в эту ветку ссылку :)

  • @z140140
    @z140140 13 วันที่ผ่านมา

    1. у dec были только 12, 16, 18, 32, 36 и 64-битные машинки. а 24-битным был, например, первый миник cdc
    2. первая реализация бейсика была компилирующей, многопользовательской, со встроенным многопользовательским редактором и требовала для работы двух компов с памятью тоже несколько десятков КБ
    3. у P4 был именно кеш декодированных инструкций (Trace cache), а декодирование шло по одной инструкции за такт

  • @101picofarad
    @101picofarad 14 วันที่ผ่านมา +2

    Если ИИ помог генерализовать математику - значит математик был не очень сильным - кто-то генерализовал до него и дал почитать нейросети ;)

  • @FULLTILTSWIFF
    @FULLTILTSWIFF 14 วันที่ผ่านมา +4

    хотелось бы, чтобы не перебивали гостя

    • @ultimate_engineer
      @ultimate_engineer  14 วันที่ผ่านมา +1

      Иногда так увлекаешься беседой, что не можешь сдержаться :))

  • @alexji4654
    @alexji4654 11 วันที่ผ่านมา

    Помню, когда телекоммуникационный доступ появился (примус), мой товарищ - он был старше на 3 года, посетовал, что терминалы развращают, мол, когда на перфокартах работали, программы вылизывали до последнего символа. Хотя на отдел нам давали 45 мин машинного времени...

  • @fhtagnfhtagn
    @fhtagnfhtagn 15 วันที่ผ่านมา +2

    Народ, объясните, что за ботва с AVX2 и AVX512, они там совсем обленилсь?! Вот раньше был MMX, на нём были унпаки: bw, wd, dq. Потом MMX удвоился до SSE2, на него перенеслись те же унпаки с той же логикой. А последующие удвоения до AVX2 и затем до AVX512 старую логику не сохранили. Неужели так сложно было? Раньше как-то справлялись, а теперь почему-то нет. Теперь там работа идёт с отдельными 128-битными блоками. Одна половина не знает, что делает другая. Если на AVX2 логику унпаков можно починить, добавив парочку _mm256_permute2f128_si256(), то на AVX512 подобного, получается, вообще нету!

    • @karel.77
      @karel.77 15 วันที่ผ่านมา +1

      Тебе к мужику с видео надо...

    • @FULLTILTSWIFF
      @FULLTILTSWIFF 15 วันที่ผ่านมา +2

      Одной из ключевых особенностей AVX-512 является введение маскирования. Маскирование позволяет выполнять операции над выбранными элементами вектора, игнорируя остальные. Это даёт программистам больше контроля над тем, какие данные обрабатываются, и может помочь оптимизировать вычисления, избегая ненужных операций.
      Пример использования маскирования в AVX-512:
      __m512i a = _mm512_set1_epi32(10); // Вектор A заполнен числом 10
      __m512i b = _mm512_set1_epi32(20); // Вектор B заполнен числом 20
      __mmask16 mask = 0b1010101010101010; // Маска для выбора каждого второго элемента
      // Сложение с использованием маски: только элементы, соответствующие маске, будут сложены
      __m512i result = _mm512_mask_add_epi32(a, mask, a, b);
      В этом примере, только элементы вектора a, которые соответствуют маске mask, будут сложены с соответствующими элементами вектора b.
      Также AVX-512 вводит операции с разреженными данными и конфликтные инструкции обнаружения, которые могут быть полезны для оптимизации алгоритмов с непредсказуемым доступом к памяти.
      Использование векторизации для умножения двух матриц может быть реализовано следующим образом:
      void matrix_multiply_avx512(float* A, float* B, float* C, int N) {
      for (int i = 0; i < N; i++) {
      for (int j = 0; j < N; j++) {
      __m512 sum = _mm512_setzero_ps();
      for (int k = 0; k < N; k += 16) {
      __m512 a = _mm512_load_ps(A + i * N + k);
      __m512 b = _mm512_load_ps(B + k * N + j);
      sum = _mm512_fmadd_ps(a, b, sum);
      }
      _mm512_store_ps(C + i * N + j, sum);
      }
      }
      }
      Маскирование в AVX-512 позволяет выполнять операции только над теми элементами данных, которые соответствуют определённому условию. Это может быть полезно, например, при обработке данных с пропусками или при выполнении операций, которые должны быть применены не ко всем элементам массива.
      __m512i data = _mm512_load_epi32(...); // Загрузка данных
      __mmask16 mask = _mm512_cmp_epi32_mask(data, _mm512_set1_epi32(0), _MM_CMPINT_NE); // Создание маски для ненулевых элементов
      __m512i result = _mm512_mask_add_epi32(_mm512_set1_epi32(1), mask, data, _mm512_set1_epi32(100)); Прибавление 100 только к ненулевым элементам
      AVX-512 вводит специальные инструкции для работы с разреженными данными, что может быть полезно в областях, где данные естественным образом разрежены, например, в графовых вычислениях или при обработке больших наборов данных с множеством пропусков.

    • @z140140
      @z140140 13 วันที่ผ่านมา

      1. avx2 был оптмизирован под реализацию на двух отдельных 128-битных EU, поэтому в нём такая ебанутая логика
      2. в avx512 вроде есть универсальный шафл, его недостаточно?

  • @MauwTong
    @MauwTong 11 วันที่ผ่านมา

    The best video

  • @crash1504
    @crash1504 13 วันที่ผ่านมา

    Ничо не понял, но очень интересно! Выпуск кайф

  • @michealmltefive5510
    @michealmltefive5510 14 วันที่ผ่านมา

    Я только Basic на MSX застал в 8х г. Ассемблер до сих пор не освоил.

  • @101picofarad
    @101picofarad 14 วันที่ผ่านมา +1

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

  • @Kantor2209
    @Kantor2209 14 วันที่ผ่านมา

    PDP 11, сиречь Электроника 60.
    Писал в кодах, прикольно.
    Такие фокусы можно было творить.
    А что, полный доступ, делай что хошь.

  • @evgeniykorniloff9974
    @evgeniykorniloff9974 4 วันที่ผ่านมา

    arm архитектуру и оперативную память на тот же кристалл. И никаких конвейеров или кешей. Микропрограммы тоже в оперативку. Скорость +20х и немного отставание из за конвейеров. В целом - чуть лучше интела и дешевле и частоты тактовой хватит. А для PC программ - эмулятор.

  • @user-cb3mw7rd8b
    @user-cb3mw7rd8b 7 วันที่ผ่านมา

    кто в курсе? что за код на интенсиках,? что за интенсики?

    • @ultimate_engineer
      @ultimate_engineer  6 วันที่ผ่านมา

      Речь про интринсики (intrinsic). Вот здесь неплохо объясняют: ru.stackoverflow.com/questions/621215/Что-такое-интринсики-intrinsics/621239#621239

  • @101picofarad
    @101picofarad 14 วันที่ผ่านมา

    Векторизация - основной метод ускорения потому, что это фактически перестройка задачи под параллельную архитектуру. Такую задачу легко автоматически раскидать на множество исполнителей.

    • @MaruiInfantry
      @MaruiInfantry 14 วันที่ผ่านมา

      Уже нет. Щас всё на GPU считают уже лет 15+. CUDA вышла в 2007 году.

    • @101picofarad
      @101picofarad 14 วันที่ผ่านมา

      @@MaruiInfantry а на гпу не используется векторизация???

    • @VRchitecture
      @VRchitecture 13 วันที่ผ่านมา +1

      @@101picofarad О чём вы? Всем же известно, что если исполнять код на GPU, предварительно сдобрив CUDA, то получим топ перформанс. Оптимизаций не требуется от слова совсем, главное - верить в технологию - и она не подведёт👌🏻

    • @101picofarad
      @101picofarad 13 วันที่ผ่านมา

      @@VRchitecture матлаб мне сказал что мой кривой код на амд 7840hs выполняется быстрее чем на куде 3070 ;)
      (наверное матлаб не правильно верит)

    • @VRchitecture
      @VRchitecture 13 วันที่ผ่านมา

      @@101picofaradвсё зависит от задачи. Вполне реальная ситуация - CPU обсчитывает данные медленнее, но это компенсируется более быстрым их считыванием из памяти и записью результата обратно.
      В любом случае, NVIDIA + CUDA круче всех по определению (ну зачем маркетологам врать?)

  • @VRchitecture
    @VRchitecture 13 วันที่ผ่านมา +1

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

    • @iamdozerq
      @iamdozerq 13 วันที่ผ่านมา +3

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

  • @user-rd2rw1ip4f
    @user-rd2rw1ip4f 13 วันที่ผ่านมา +2

    ведущим лучше молчать или кивать

    • @ultimate_engineer
      @ultimate_engineer  12 วันที่ผ่านมา +1

      Предвосхищаем следующие комменты: "Ведущие воды в рот набрали, нечего сказать?" ))

  • @Deletedeletedelete
    @Deletedeletedelete 11 วันที่ผ่านมา

    Тру

  • @nikolaykozlov4888
    @nikolaykozlov4888 15 วันที่ผ่านมา

    Хочу в Ядро!

    • @ultimate_engineer
      @ultimate_engineer  14 วันที่ผ่านมา

      Заглядывайте сюда: careers.yadro.com ;)

    • @nikolaykozlov4888
      @nikolaykozlov4888 13 วันที่ผ่านมา

      @@ultimate_engineer заглядывал, не взяли :-)