Пікірлер
@DmitryKandiner
@DmitryKandiner 11 сағат бұрын
40:46 Рискну предположить, что двухадресные инструкции в x86 - тяжелая наследственность первых процессоров этой серии (8086 и 8088) и их предков (8080 и 8085), у которых было катастрофически мало, по современным меркам, регистров.
@napalm20005
@napalm20005 14 сағат бұрын
1:23:28 То неловкое чувство, когда решил cm0 за полтора часа((
@philschneider4840
@philschneider4840 Күн бұрын
Когда решил вкатиться в айти после 40, но передумал
@otorvysh
@otorvysh 2 күн бұрын
Константин, доброго вреени суток и мое почтение Вашему преподавательскому таланту! разъясните, пожалуйста (ну или может сообщество знает ответ), как правильно работать с геометрией? например, на плоскости даны 2 точки и надо провести серединный перпендикуляр. проблемы с форрмулой нет, но непонятен один момент: если проводить вычисления в логических координатах, то при пуше на неквадратный viewport визуально линия вообще не выглядит, как серединный перпендикуляр. или все-таки геометрию надо решать в экранных координатах, потом переводить в логические для вершин, а pipeline потом снова их пересчитает в координаты viewport? какая-то двойная работа получается) заранее спасибо за ответ...
@DmitryKandiner
@DmitryKandiner 2 күн бұрын
29:18 Если не ошибаюсь, Intel 4004 всё-таки 4-битный процессор. Возможно, Вы имели в видu Intel 8008?
@johntrucena4947
@johntrucena4947 3 күн бұрын
по поводу алгоритма поиска большинства а если массив вида 2 2 2 1 3 1 3 4 5 4 5 6 7 6 7 по идее правильный ответ это двойка, но она не наберёт нужного количества голосов и покажется неправильный результат
@normanmaddyson8408
@normanmaddyson8408 3 күн бұрын
Спасибо за лекцию nitpicking, но почему функции на 1:17:40 объявлены как static inline? Разве от inline в этом случае есть какой-то эффект?
@tilir
@tilir 3 күн бұрын
Да, где то на 30% повышает вероятность инлайна если собирать gcc )) Если более серьёзно то static inline это устоявшаяся идиома.
@alexloktionoff6833
@alexloktionoff6833 2 күн бұрын
@@tilir также static inline в gcc автоматически убираются если не используются, бинарными меньше.
@dmitry-strakhov
@dmitry-strakhov 3 күн бұрын
Небольшая опечатка (две) на таймлайне. Написано "Вчет приктических сообрадений"
@tilir
@tilir 3 күн бұрын
Спасибо, пофиксил ))
@user-zl1fy7ej6t
@user-zl1fy7ej6t 4 күн бұрын
В следующий раз нужно добавить raylib библиотека проще sdl при этом поддерживает работу с шейдерами из коробки
@pavelrid
@pavelrid 2 күн бұрын
raylib это OpenGL, а у SDL есть в бекэндах OpenGL, D3D, Vulkan и Metal и даже софтварный рендер
@user-zl1fy7ej6t
@user-zl1fy7ej6t 2 күн бұрын
​@@pavelrid понятно, просто на рейлибе можно проще и быстрее получить рабочее дэмо, если цель проекта запустить проверить визуализировать для собственных нужд то этот вариант подходит лучше всего ( за исключением специфичных сценариев )
@alexorlovecky6662
@alexorlovecky6662 4 күн бұрын
Не совсем понял последнюю задачу студентам.. Всмысле посчитать к чему сводится такой ряд? Ну к нулю... Или я где то туплю?
@mkdir4701
@mkdir4701 4 күн бұрын
Прочитал Прату. Посмотрев вас - понял, что надо ещё много интересного узнать!
@user-gl2pc2ek2b
@user-gl2pc2ek2b Күн бұрын
За сколько прочитали?
@user-ne4bd3ry1n
@user-ne4bd3ry1n 4 күн бұрын
проверку столкновений надо было бы еще
@user-ne4bd3ry1n
@user-ne4bd3ry1n 4 күн бұрын
отлично
@AlexAlex-ll5sz
@AlexAlex-ll5sz 4 күн бұрын
29:42 а где же в описании вольфрам_альфа? Я не вижу ссылки.
@tilir
@tilir 4 күн бұрын
Ссылка на вольфрам на слайдах. Ссылка на страничку со слайдами в описании.
@MallSerg
@MallSerg 4 күн бұрын
Не самый удачный пример на процессоре генерировать текстуру фрактала ((. В том же SDL2 самые удобные инструменты для реализации шейдеров на GLSL через OpenGL или Vulkan API.
@tilir
@tilir 4 күн бұрын
Про шейдеры уже отвечал. Идея хорошая, но в расписание первого курса не лезет и для первокурсников тяжеловата. Объясняю на втором, уже в курсе по C++.
@alexloktionoff6833
@alexloktionoff6833 2 күн бұрын
@@tilir да интересно на втором курсе показать и сравнить быстродействие!
@eugenevladoff2758
@eugenevladoff2758 4 күн бұрын
А разве при включенной vsync SDL2 не сам у себя внутри делает паузу для каждого кадра, чтобы довести ее до умолчальных 60 fps?
@tilir
@tilir 4 күн бұрын
Это если устройство с таким флажком найдено. Ну и потом вдруг вы хотите меньше. Донести идею как это делается руками мне кажется важным.
@eugenevladoff2758
@eugenevladoff2758 4 күн бұрын
А, понял. Вы же увеличивали задержку. Сначала для получения 50 FPS, а потом до получения 10 FPS, для примера.
@AlexAlex-ll5sz
@AlexAlex-ll5sz 4 күн бұрын
Класс!!
@DmitryKandiner
@DmitryKandiner 4 күн бұрын
1:12:10 Немного покопался и выяснил, что идеальным коэффициентом для размера буфера было бы золотое сечение (1.612...), а оптимальным в практическом плане - 1.5
@Stedmiel
@Stedmiel 4 күн бұрын
35:45 так как у меня видеокарта от nvidia- то я могу взять библиотеку nvidia reflex и попросить видеокарту выдать мне ровно 50 кадров в секунду 😀(а всем остальным выдавать сообщение "ну вы же смотрели на системные требования" xD ) ну или переключить монитор в 50 герц и включить vsync. но эт слишком грязно и инпутлаг поедет... 1:11:34 насколько помню- в 2022 вижле сишку починили. ну или clang-cl притащить, чо уж там.
@tilir
@tilir 4 күн бұрын
Вы сейчас радостно агитируете за чудовищный и отвратительный вендорлок.
@Stedmiel
@Stedmiel 4 күн бұрын
@@tilir ну, благо там, где рефлекс нужен (всякие компетитив-игоры)- и так почти везде нвидия. ну и может быть к какому-нибудь vulkan 1.9 оно доедет и до стандарта... там внутре же просто семафорчики и доступ к аппаратным/драйверным счетчикам. а так да. плоховастенько. жаль, что альтернатив ему не особо есть (на винде). *а еще на винде контекст вулкана надо создавать через одно место- dxgi зовется. потому что только там можно поставить флажок "обходить композитор". это бы тоже куда-нибудь в дефолтное расширение вулкана припереть... так что пока что да- или вендорлок, или волосатый график фреймтайма (потому что sleep'ы косые как не в себя) + инпутлаг конь. с рефлексом в типичной игоре можно 6-9мс от ввода до видеовыхода, как повезет со временем запуска. и не улетая при этом в много-много фпс, которые еще и VRM взорвать могут (косится на нвидию, не чинящую этот баг с 900-ой серии до 4000) а, ну или дедовский вариант с переключением частоты монитора. вариант еще хуже xD
@tilir
@tilir 4 күн бұрын
У AMD тоже есть очень конкурентные карточки. Да и у Интела ARC Alchemist неплоха.
@Stedmiel
@Stedmiel 4 күн бұрын
@@tilir я там не про сами карточки, а про драйвера и весь софт вокруг них. не знаю, как у интела, их ARC ни на одной из моих машин не завелся (но эти машины весьма кривые, эт ожидаемо), но у красненьких просто нет способа снизить инпутлаг. тот, который заявлен- не работает как надо. а еще у них проблемы, если вдруг видеокарта повисла- их невозможно ресетнуть. там, где у других достаточно bus reset, у амд надо выключать питание. (и даже если выключишь питание- там драйвер выгружаться не умеет нормально. но в линуксе все в целом плохо с хотплагом/анплагом гпу. но хотя бы так можно перезапустить виртуалку с амдшной графикой, не перезапуская всю машину.) а чтобы повесить амдшную графику в линуксе- чуть ли не достаточно сделать for(;;); в шейдере. да, оно настолько плохое там. но в целом начиная с 7000 серии у них наконец-то кодер видео стал адекватно кодировать видео! и даже лучемет лучи метает как надо! (оне там формат дерева blas/tlas поменяли на примерно как у нвидии.) ждем всего остального xD про то, что "и так почти везде нвидия"- это чисто из стимовской статистики, там ее 76.59% за апрель 2024.
@DmitryKandiner
@DmitryKandiner 4 күн бұрын
26:30 Можно ещё добавить "джигитовки": while (*dst++ = *src++);
@andrewkot5212
@andrewkot5212 4 күн бұрын
Скажите, а девайс , которому коннектиться рендерер- это что за сущность? Вроде как и драйвер к устройству, но если есть софвар асселератор - то просто подпрограмма
@tilir
@tilir 4 күн бұрын
Это рантайм. В обычном случае у нас есть графический kernel-mode драйвер к которому цепляется например OpenGL runtime, представляющий собой user-mode часть драйвера. SDL умеет собирать несколько поддерживаемых рантаймов и цепляется уже к ним.
@johndick996
@johndick996 5 күн бұрын
Отличная вводная в графику, с самой базы. Константин Игоревич, большое спасибо за труд!
@user-ko2th7mx2n
@user-ko2th7mx2n 5 күн бұрын
1:23:00 Почему в интрузивном счётчике не нужно его делать атомарным?
@stanislavstanislavius7618
@stanislavstanislavius7618 5 күн бұрын
Так вот как работает реверс инжениринг))
@atmr90
@atmr90 6 күн бұрын
Константин, большое Вам спасибо за курс лекций, от человека из региона! как то было сказано что доп. семинара по vim не будет. Но если это станет возможным, то курс станет шикарным в квадрате. В меру часто приходится подключаться к удаленным серверам и что то править и хорошие практики работы с vim были бы очень полезны. Сам очень долго (несколько месяцев) разбирался как работает буфер и как его прокинуть на удаленный сервер в vim. (Прокинуть ssh -X, ssh config X11Forwarding yes, установить xclip, vim config set clipboard += "unnamedplus"). А ведь копи-паст это полезная функция. Без иксов можно системно и логично (как Вы это делаете, отдельная благодарность) рассказать о базовых настройках чистого vim. нумерация строк, сплит экрана - то чем пользовались на семинарах.
@thepawday
@thepawday 6 күн бұрын
33:26 мое любимое UB - std:: unreachable()
@MVZ1983
@MVZ1983 6 күн бұрын
Аппаратные кэши, конвейеры, транзисторы, конденсаторы... Как же низко мы пали!
@FeelUs
@FeelUs 7 күн бұрын
Взятие адреса переменной не гарантирует, что она не окажется в регистре (может оказаться, что этот адрес не используется). А вот если добавить volatile, то должно сработать. Поправьте меня пожалуйста если я не прав.
@tilir
@tilir 7 күн бұрын
Достаточно чтобы адрес куда то утёк. Например был передан как аргумент во внешнюю функцию и т.п. volatile да, всегда работает, но это очень дорогой метод ))
@FeelUs
@FeelUs 6 күн бұрын
@@tilir а чем дорог volatile?
@tilir
@tilir 4 күн бұрын
@@FeelUsвокруг него отключается большинство компиляторных оптимизаций.
@FeelUs
@FeelUs 4 күн бұрын
2:13 а разве мы не этого хотим? Для чего вообще может потребоваться явно выделить память но при этом оставить какие-то оптимизации с памятью?
@stanislavstanislavius7618
@stanislavstanislavius7618 7 күн бұрын
59:48 Если мы из "B A E" возьмем B и добавим в "D C" то у нас будет конфликт, т.к. у B и D дедлайн первого дня, а значит мы не любое значение можем взять из "B A E". Или у матроидов предусматривается взятие даже конфликтующих значений?
@FeelUs
@FeelUs 7 күн бұрын
В общем, чтобы понять исходники clang'а нужен анализатор кода, а чтобы сделать анализатор кода нужно понять исходники clang'а
@FeelUs
@FeelUs 7 күн бұрын
а в каком файле исходников находится main(argc,argv) ?
@FeelUs
@FeelUs 7 күн бұрын
В самом деле, сейчас clang 18.1.4
@tilir
@tilir 7 күн бұрын
Да много времени уже прошло ))
@user-fh9jb9nz2m
@user-fh9jb9nz2m 8 күн бұрын
Скажите пожалуйста, просто любопытно а литература за 1988 год разве еще актуальна 🤨?
@tilir
@tilir 7 күн бұрын
Да.
@user-fh9jb9nz2m
@user-fh9jb9nz2m 8 күн бұрын
" изучить си за недельки две". М да хотел бы посмотреть на такого человека кто знает Си в полном объёме. От всех его стандартов и всех возможностей за такой срок😁.
@tilir
@tilir 7 күн бұрын
Так в полном объёме и не нужно.
@alexanderspeshilov839
@alexanderspeshilov839 8 күн бұрын
"Подсмотриваю" ваши семинары (хоть и в 2 раза старше студентов). Про бенчмаркинг sqrt. На X64 и мощных ARM понятно что итеративно (даже Ньютоном) вариант dsqrt обогнать если и можно, то не просто. Но вот на каком-нибудь Cortex- M0 или RISC-V без нужных расширений dsqrt может оказаться совсем небыстрым. При этом для целых есть хорошее начальное приближение что-нибудь типа x >> ((32 - clz(x)) >> 1), где clz - количество нулей впереди. Впрочем, у m0 clz тоже, если я правильно помню не одной командой считается.
@MVZ1983
@MVZ1983 8 күн бұрын
ну и про union не забываем если нужно представить float как unsigned
@tilir
@tilir 8 күн бұрын
Не используйте type punning.
@dsorvq
@dsorvq 9 күн бұрын
Асимптотика на 1:07:20 скорее всего несколько выше, чем O(n), нам ведь еще нужно на каждой итерации считать что-то вроде lcm(i, result). O(n * log(lcm(2,...,n))) точно подойдет, но наверное, можно уже
@tilir
@tilir 9 күн бұрын
Если числа M-битные, это добавляет множитель O(logM). Но для 32-битных чисел это константа, поэтому O(N) -- мы зависим только от общего количества чисел и съедаем их по одному.
@Dav1d5611
@Dav1d5611 9 күн бұрын
Вывод с пробелом можно через правую свёртку написать? template <typename... Ts> void print_all(Ts&&... args) { (((std::cout << args << ' '), ...)) << ' '; } И в Addable можно же убрать requires sizeof...(Ts) > 1? т.к. (... + std::forward<Ts>(args)) будет компилироваться с ошибкой (not satisfied). Или оставить, но написать в начале. Как и другой requires, но там будут проходить sum_all(2.0, 1), но не sum_all(1, 2.0) =)
@user-vh9dg8hl8o
@user-vh9dg8hl8o 10 күн бұрын
!
@stanislavstanislavius7618
@stanislavstanislavius7618 10 күн бұрын
Самое главное здесь, что только на шестом этапе нужно начать думать)))
@MVZ1983
@MVZ1983 10 күн бұрын
Балы, красавицы, лакеи, хакера, И вери трики кейс, и хруст французской булки...
@lwind4884
@lwind4884 10 күн бұрын
При проверке на равенство чисел с плавающей точкой рекомендую руководствоваться следующей методикой. Если, например, нужна точность до 5го знака после десятичной точки, берите допуск равный 0,5*0,00001 (т.е. 0,000005). Так Вы нивелируете погрешность математического округления.
@user-hh2qp6ez4d
@user-hh2qp6ez4d 3 күн бұрын
Нас на вычислительной математике учили считать на разряд выше требуемой точности.
@lwind4884
@lwind4884 3 күн бұрын
@@user-hh2qp6ez4d Я имел ввиду следующее. Нужно сравнить два числа так, как если бы Вы перевели эти числа в строку с одинаковыми настройками форматирования, а потом проверили на равенство. Например, сравните числа 1.5551 и 1.5552 с точностью до третьего знака после десятичной точки. Если считать на разряд выше, то с точностью до четвёртого знака эти два числа не равны. Но с точностью до третьего знака они не различимы, т.е. равны. Впрочем. Вообще выбор метода сравнений чисел с плавающей точкой зависит от конкретной задачи.
@user-hh2qp6ez4d
@user-hh2qp6ez4d 3 күн бұрын
@@lwind4884 я не про количество знаков после запятой. Я про количество разрядов. Например, 123456.789(9 разрядов)*1.234(4 рязряда) - так считаль нельзя, потому что результат умножения будет достоверным только на 4 разряда. Нужно сохранять количество разрядов, а именно 123456.789*1.23456789 - так правильно, если нужна точность 8 разрядов. Как тут сравнивать? В каждом конкретном случае свое количество знаков после запятой.
@lwind4884
@lwind4884 3 күн бұрын
@@user-hh2qp6ez4d Благодарю за комментарий по поводу точности вычислений. Однако, прошу обратить внимание, что я писал о методе сравнения.
@MVZ1983
@MVZ1983 10 күн бұрын
да... хак на хаке и хаком погоняет хороший курс лекций, но как с этим жить?
@hohlovin
@hohlovin 11 күн бұрын
Давали бы мне такие знания году так в 95-м...
@tetraphobie
@tetraphobie 11 күн бұрын
Пришёл из-за аниме, остался из-за раскрутки стека.
@akulijbe
@akulijbe 11 күн бұрын
1:13:10 - видимо запись решила скрыть, что мы увидим в реализации синуса) но я дополню, что почти всегда мы увидим ряды Тейлора (к примеру, как в musl и glibc) P.S.: видео как всегда супер! Спасибо)
@narzaru
@narzaru 11 күн бұрын
Здравствуйте, доступа к заданиям в задачнике нет, и ссылка на плейлист с записями семинаров в конце задачника неправильная
@tilir
@tilir 11 күн бұрын
У вас проблемы с браузером, он подменяет вам http на https.
@narzaru
@narzaru 11 күн бұрын
@@tilirтак и не смог победить, пробовал Edge, Google Chrome, Firefox. Потыкал настройки, не помогло. Код последней ошибки 4e816500.
@2_x_2_4
@2_x_2_4 11 күн бұрын
kzfaq.info/get/bejne/j9ZdpbGQpsC6g30.html Эту формулу (1/2(xn+a/xn)) ещё называют фомулой Герона. А т.к. одну формулу Герона студенты знают, то, полагаю, у вас, Константин, интересно получилось бы обыграть такую ситуацию в лекции. :-)
@evseee
@evseee 12 күн бұрын
да, одно дело когда говорят "для икс меньше дельта", а другое когда ты на, ещё зелёном, но уже графическом, мониторе видишь как колбасит ряд маклорена для синуса при удалении от нуля :)
@fedorbabkin
@fedorbabkin 12 күн бұрын
Вспомнился ФОПФовый анекдот. Студент на экзамене по электродинамике все время подглядывает на ладонь руки. Преп ловит его, говорит: показывай шпаргалку. Тот показывает левую ладонь, там буква Л. Преп: зачем тебе это? Студент: правило левой руки помню, а какая из них левая, всё время забываю...