Ничем. Они кодили в те времена, когда ты приходишь и на Си + asm пишешь такой говнокод, что ужас. Всё в монолитах и экстернах. Пишет какое-то Фурье или FFT на массивчиках. Больше ничего. Скорее всего он не сможет написать SQL-запрос даже для простейшей СУБД. Не говоря уже о том, чо NoSQL или темболее NewSQL. Возможно он из головы напишет какой-то FFT на C + SIMD, но это уже не нужно.
@@MaruiInfantry на самом деле печально, что такие люди мнение востребованы на рынке труда, мне кажется, это несправедливым. Ведь они обладают уникальным опытом.
@@MaruiInfantry мы например пишем те самые sql-движки :) или те же FFT, которые улучшают качество твоих фоток. или библиотеки deep learning, которые используют для LLM
@@usergnusmas6879 они не востребованы в небольших компаниях. в янлексе или вк такие люди уже есть. в гугле или ms их сильно больше. плюс есть технологические стартапы, типа clickhouse
Елы палы, 30 лет в программировании, но только правда в основном прикладных задач, свое время от нечего делать наизусть учил книжку по процессорам Интел пятого поколения, правда в реальной жизни эти предметные знания так и не пригодилось, а сейчас даже половину сказанного плохо понимаю, о чем дядька говорит. Собственно, от программирования ПК давно ушел в область программирования МК, а теперь еще и ПЛИС, там интересней, по тому что в одиночку можешь делать и сопровождать готовые проекты под МК, считай все время делать свои собственные почти уникальные мини системы, это доставляет больше удовольствия. А программирование реальных приложений ПК, это в основном командная работа, что меня никак не привлекает.
Как правильно заметил Астахов про оптимизацию алгоритмов свёртки сигналов посредством перехода из времЕнной области в частотную (ДПФ) и обратно, существенно сокращается время вычислений прохождения сигнала через фильтр. Гениальный подход, придуманный много десятилетий назад, позволяющий строить менее требовательные к аппаратному обеспечению системы. Ещё будучи студентом восхищался такими фокусами с преобразованием Фурье, особенно при взятии "неберущихся" интегралов :)
IIR без обратной связи это как? Хотелось бы посмотреть на блок схему, и чуть подробнее о перерасчёте коэффициентов. Статьи на эту тему не публиковали, где нибудь на IEEE?
1. у dec были только 12, 16, 18, 32, 36 и 64-битные машинки. а 24-битным был, например, первый миник cdc 2. первая реализация бейсика была компилирующей, многопользовательской, со встроенным многопользовательским редактором и требовала для работы двух компов с памятью тоже несколько десятков КБ 3. у P4 был именно кеш декодированных инструкций (Trace cache), а декодирование шло по одной инструкции за такт
Народ, объясните, что за ботва с AVX2 и AVX512, они там совсем обленилсь?! Вот раньше был MMX, на нём были унпаки: bw, wd, dq. Потом MMX удвоился до SSE2, на него перенеслись те же унпаки с той же логикой. А последующие удвоения до AVX2 и затем до AVX512 старую логику не сохранили. Неужели так сложно было? Раньше как-то справлялись, а теперь почему-то нет. Теперь там работа идёт с отдельными 128-битными блоками. Одна половина не знает, что делает другая. Если на AVX2 логику унпаков можно починить, добавив парочку _mm256_permute2f128_si256(), то на AVX512 подобного, получается, вообще нету!
Одной из ключевых особенностей 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 вводит специальные инструкции для работы с разреженными данными, что может быть полезно в областях, где данные естественным образом разрежены, например, в графовых вычислениях или при обработке больших наборов данных с множеством пропусков.
1. avx2 был оптмизирован под реализацию на двух отдельных 128-битных EU, поэтому в нём такая ебанутая логика 2. в avx512 вроде есть универсальный шафл, его недостаточно?
Помню, когда телекоммуникационный доступ появился (примус), мой товарищ - он был старше на 3 года, посетовал, что терминалы развращают, мол, когда на перфокартах работали, программы вылизывали до последнего символа. Хотя на отдел нам давали 45 мин машинного времени...
arm архитектуру и оперативную память на тот же кристалл. И никаких конвейеров или кешей. Микропрограммы тоже в оперативку. Скорость +20х и немного отставание из за конвейеров. В целом - чуть лучше интела и дешевле и частоты тактовой хватит. А для PC программ - эмулятор.
Не эффективных математических алгоритмов не бывает - они все зависят от исполняющего это калькулятора. Т.е. всегда можно подобрать такую архитектуру, где "не эффективный" алгоритм будет быстрее чем другой.
Он рассказывает жесть, она звучит как настоящий анекдот, она вызывает сильный шок и удивление. В другой ситуации они бы плакали от того что он говорит, а тут снимают состояние смехом. И явно же не над ним, что за бред.
Векторизация - основной метод ускорения потому, что это фактически перестройка задачи под параллельную архитектуру. Такую задачу легко автоматически раскидать на множество исполнителей.
@@101picofarad О чём вы? Всем же известно, что если исполнять код на GPU, предварительно сдобрив CUDA, то получим топ перформанс. Оптимизаций не требуется от слова совсем, главное - верить в технологию - и она не подведёт👌🏻
@@101picofaradвсё зависит от задачи. Вполне реальная ситуация - CPU обсчитывает данные медленнее, но это компенсируется более быстрым их считыванием из памяти и записью результата обратно. В любом случае, NVIDIA + CUDA круче всех по определению (ну зачем маркетологам врать?)
Ах, как же было круто с Игорем работать!
Спасибо за интервью, помогает вспомнить что делал в университетское время... Если до сих пор работают такие люди - еще не все потеряно )
Спасибо вам! Нам тоже радостно работать бок о бок с такими профессионалами!
Вот, это настоящий инженер. Интересно, чем занимаются такие люди.
Спасибо! Стремимся выбирать интересных гостей!
Ничем. Они кодили в те времена, когда ты приходишь и на Си + asm пишешь такой говнокод, что ужас. Всё в монолитах и экстернах. Пишет какое-то Фурье или FFT на массивчиках. Больше ничего. Скорее всего он не сможет написать SQL-запрос даже для простейшей СУБД. Не говоря уже о том, чо NoSQL или темболее NewSQL.
Возможно он из головы напишет какой-то FFT на C + SIMD, но это уже не нужно.
@@MaruiInfantry на самом деле печально, что такие люди мнение востребованы на рынке труда, мне кажется, это несправедливым. Ведь они обладают уникальным опытом.
@@MaruiInfantry мы например пишем те самые sql-движки :) или те же FFT, которые улучшают качество твоих фоток. или библиотеки deep learning, которые используют для LLM
@@usergnusmas6879 они не востребованы в небольших компаниях. в янлексе или вк такие люди уже есть. в гугле или ms их сильно больше. плюс есть технологические стартапы, типа clickhouse
Большое спасибо, за такие интервью, очень интересно 😊
Рады, что вам понравился выпуск!
Чего только на ютубе не встретишь. Спасибо! Видео огонь!
Елы палы, 30 лет в программировании, но только правда в основном прикладных задач, свое время от нечего делать наизусть учил книжку по процессорам Интел пятого поколения, правда в реальной жизни эти предметные знания так и не пригодилось, а сейчас даже половину сказанного плохо понимаю, о чем дядька говорит.
Собственно, от программирования ПК давно ушел в область программирования МК, а теперь еще и ПЛИС, там интересней, по тому что в одиночку можешь делать и сопровождать готовые проекты под МК, считай все время делать свои собственные почти уникальные мини системы, это доставляет больше удовольствия. А программирование реальных приложений ПК, это в основном командная работа, что меня никак не привлекает.
Я тоже вводил бинарный код переключателями в Политехе. И тоже дебажил на бумажке. Замечательное было время!
Как правильно заметил Астахов про оптимизацию алгоритмов свёртки сигналов посредством перехода из времЕнной области в частотную (ДПФ) и обратно, существенно сокращается время вычислений прохождения сигнала через фильтр. Гениальный подход, придуманный много десятилетий назад, позволяющий строить менее требовательные к аппаратному обеспечению системы. Ещё будучи студентом восхищался такими фокусами с преобразованием Фурье, особенно при взятии "неберущихся" интегралов :)
Как же круто!
IIR без обратной связи это как? Хотелось бы посмотреть на блок схему, и чуть подробнее о перерасчёте коэффициентов. Статьи на эту тему не публиковали, где нибудь на IEEE?
Статью такую не готовили ещё, но спасибо за идею! Если опубликуем, то пришлем в эту ветку ссылку :)
Очень крутой выпуск!!!
Спасибо! Рады, что было интересно!
Интересно. Спасибо
Приятно! Спасибо вам!
1. у dec были только 12, 16, 18, 32, 36 и 64-битные машинки. а 24-битным был, например, первый миник cdc
2. первая реализация бейсика была компилирующей, многопользовательской, со встроенным многопользовательским редактором и требовала для работы двух компов с памятью тоже несколько десятков КБ
3. у P4 был именно кеш декодированных инструкций (Trace cache), а декодирование шло по одной инструкции за такт
Народ, объясните, что за ботва с AVX2 и AVX512, они там совсем обленилсь?! Вот раньше был MMX, на нём были унпаки: bw, wd, dq. Потом MMX удвоился до SSE2, на него перенеслись те же унпаки с той же логикой. А последующие удвоения до AVX2 и затем до AVX512 старую логику не сохранили. Неужели так сложно было? Раньше как-то справлялись, а теперь почему-то нет. Теперь там работа идёт с отдельными 128-битными блоками. Одна половина не знает, что делает другая. Если на AVX2 логику унпаков можно починить, добавив парочку _mm256_permute2f128_si256(), то на AVX512 подобного, получается, вообще нету!
Тебе к мужику с видео надо...
Одной из ключевых особенностей 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 вводит специальные инструкции для работы с разреженными данными, что может быть полезно в областях, где данные естественным образом разрежены, например, в графовых вычислениях или при обработке больших наборов данных с множеством пропусков.
1. avx2 был оптмизирован под реализацию на двух отдельных 128-битных EU, поэтому в нём такая ебанутая логика
2. в avx512 вроде есть универсальный шафл, его недостаточно?
Ida Pro - дизассемблер. Видимо путаете с SoftIce, который являлся системным debugger-ом
The best video
Если ИИ помог генерализовать математику - значит математик был не очень сильным - кто-то генерализовал до него и дал почитать нейросети ;)
Ничо не понял, но очень интересно! Выпуск кайф
Помню, когда телекоммуникационный доступ появился (примус), мой товарищ - он был старше на 3 года, посетовал, что терминалы развращают, мол, когда на перфокартах работали, программы вылизывали до последнего символа. Хотя на отдел нам давали 45 мин машинного времени...
Я только Basic на MSX застал в 8х г. Ассемблер до сих пор не освоил.
arm архитектуру и оперативную память на тот же кристалл. И никаких конвейеров или кешей. Микропрограммы тоже в оперативку. Скорость +20х и немного отставание из за конвейеров. В целом - чуть лучше интела и дешевле и частоты тактовой хватит. А для PC программ - эмулятор.
"Учи ассемблер" - а типа вариант был вместо ручного заполнентя регистров через переключатели код на бейсике подкинуть? 🤣
Не эффективных математических алгоритмов не бывает - они все зависят от исполняющего это калькулятора. Т.е. всегда можно подобрать такую архитектуру, где "не эффективный" алгоритм будет быстрее чем другой.
PDP 11, сиречь Электроника 60.
Писал в кодах, прикольно.
Такие фокусы можно было творить.
А что, полный доступ, делай что хошь.
кто в курсе? что за код на интенсиках,? что за интенсики?
Речь про интринсики (intrinsic). Вот здесь неплохо объясняют: ru.stackoverflow.com/questions/621215/Что-такое-интринсики-intrinsics/621239#621239
Я понимаю, что это не намеренное, но из-за постоянных усмешек складывается впечатление, будто человека пригласили, чтобы над ним поугарать. Такое себе
Он рассказывает жесть, она звучит как настоящий анекдот, она вызывает сильный шок и удивление. В другой ситуации они бы плакали от того что он говорит, а тут снимают состояние смехом. И явно же не над ним, что за бред.
Векторизация - основной метод ускорения потому, что это фактически перестройка задачи под параллельную архитектуру. Такую задачу легко автоматически раскидать на множество исполнителей.
Уже нет. Щас всё на GPU считают уже лет 15+. CUDA вышла в 2007 году.
@@MaruiInfantry а на гпу не используется векторизация???
@@101picofarad О чём вы? Всем же известно, что если исполнять код на GPU, предварительно сдобрив CUDA, то получим топ перформанс. Оптимизаций не требуется от слова совсем, главное - верить в технологию - и она не подведёт👌🏻
@@VRchitecture матлаб мне сказал что мой кривой код на амд 7840hs выполняется быстрее чем на куде 3070 ;)
(наверное матлаб не правильно верит)
@@101picofaradвсё зависит от задачи. Вполне реальная ситуация - CPU обсчитывает данные медленнее, но это компенсируется более быстрым их считыванием из памяти и записью результата обратно.
В любом случае, NVIDIA + CUDA круче всех по определению (ну зачем маркетологам врать?)
ведущим лучше молчать или кивать
Предвосхищаем следующие комменты: "Ведущие воды в рот набрали, нечего сказать?" ))
Тру
Хочу в Ядро!
Заглядывайте сюда: careers.yadro.com ;)
@@ultimate_engineer заглядывал, не взяли :-)