40:46 Рискну предположить, что двухадресные инструкции в x86 - тяжелая наследственность первых процессоров этой серии (8086 и 8088) и их предков (8080 и 8085), у которых было катастрофически мало, по современным меркам, регистров.
@napalm2000514 сағат бұрын
1:23:28 То неловкое чувство, когда решил cm0 за полтора часа((
@philschneider4840Күн бұрын
Когда решил вкатиться в айти после 40, но передумал
@otorvysh2 күн бұрын
Константин, доброго вреени суток и мое почтение Вашему преподавательскому таланту! разъясните, пожалуйста (ну или может сообщество знает ответ), как правильно работать с геометрией? например, на плоскости даны 2 точки и надо провести серединный перпендикуляр. проблемы с форрмулой нет, но непонятен один момент: если проводить вычисления в логических координатах, то при пуше на неквадратный viewport визуально линия вообще не выглядит, как серединный перпендикуляр. или все-таки геометрию надо решать в экранных координатах, потом переводить в логические для вершин, а pipeline потом снова их пересчитает в координаты viewport? какая-то двойная работа получается) заранее спасибо за ответ...
@DmitryKandiner2 күн бұрын
29:18 Если не ошибаюсь, Intel 4004 всё-таки 4-битный процессор. Возможно, Вы имели в видu Intel 8008?
@johntrucena49473 күн бұрын
по поводу алгоритма поиска большинства а если массив вида 2 2 2 1 3 1 3 4 5 4 5 6 7 6 7 по идее правильный ответ это двойка, но она не наберёт нужного количества голосов и покажется неправильный результат
@normanmaddyson84083 күн бұрын
Спасибо за лекцию nitpicking, но почему функции на 1:17:40 объявлены как static inline? Разве от inline в этом случае есть какой-то эффект?
@tilir3 күн бұрын
Да, где то на 30% повышает вероятность инлайна если собирать gcc )) Если более серьёзно то static inline это устоявшаяся идиома.
@alexloktionoff68332 күн бұрын
@@tilir также static inline в gcc автоматически убираются если не используются, бинарными меньше.
@dmitry-strakhov3 күн бұрын
Небольшая опечатка (две) на таймлайне. Написано "Вчет приктических сообрадений"
@tilir3 күн бұрын
Спасибо, пофиксил ))
@user-zl1fy7ej6t4 күн бұрын
В следующий раз нужно добавить raylib библиотека проще sdl при этом поддерживает работу с шейдерами из коробки
@pavelrid2 күн бұрын
raylib это OpenGL, а у SDL есть в бекэндах OpenGL, D3D, Vulkan и Metal и даже софтварный рендер
@user-zl1fy7ej6t2 күн бұрын
@@pavelrid понятно, просто на рейлибе можно проще и быстрее получить рабочее дэмо, если цель проекта запустить проверить визуализировать для собственных нужд то этот вариант подходит лучше всего ( за исключением специфичных сценариев )
@alexorlovecky66624 күн бұрын
Не совсем понял последнюю задачу студентам.. Всмысле посчитать к чему сводится такой ряд? Ну к нулю... Или я где то туплю?
@mkdir47014 күн бұрын
Прочитал Прату. Посмотрев вас - понял, что надо ещё много интересного узнать!
@user-gl2pc2ek2bКүн бұрын
За сколько прочитали?
@user-ne4bd3ry1n4 күн бұрын
проверку столкновений надо было бы еще
@user-ne4bd3ry1n4 күн бұрын
отлично
@AlexAlex-ll5sz4 күн бұрын
29:42 а где же в описании вольфрам_альфа? Я не вижу ссылки.
@tilir4 күн бұрын
Ссылка на вольфрам на слайдах. Ссылка на страничку со слайдами в описании.
@MallSerg4 күн бұрын
Не самый удачный пример на процессоре генерировать текстуру фрактала ((. В том же SDL2 самые удобные инструменты для реализации шейдеров на GLSL через OpenGL или Vulkan API.
@tilir4 күн бұрын
Про шейдеры уже отвечал. Идея хорошая, но в расписание первого курса не лезет и для первокурсников тяжеловата. Объясняю на втором, уже в курсе по C++.
@alexloktionoff68332 күн бұрын
@@tilir да интересно на втором курсе показать и сравнить быстродействие!
@eugenevladoff27584 күн бұрын
А разве при включенной vsync SDL2 не сам у себя внутри делает паузу для каждого кадра, чтобы довести ее до умолчальных 60 fps?
@tilir4 күн бұрын
Это если устройство с таким флажком найдено. Ну и потом вдруг вы хотите меньше. Донести идею как это делается руками мне кажется важным.
@eugenevladoff27584 күн бұрын
А, понял. Вы же увеличивали задержку. Сначала для получения 50 FPS, а потом до получения 10 FPS, для примера.
@AlexAlex-ll5sz4 күн бұрын
Класс!!
@DmitryKandiner4 күн бұрын
1:12:10 Немного покопался и выяснил, что идеальным коэффициентом для размера буфера было бы золотое сечение (1.612...), а оптимальным в практическом плане - 1.5
@Stedmiel4 күн бұрын
35:45 так как у меня видеокарта от nvidia- то я могу взять библиотеку nvidia reflex и попросить видеокарту выдать мне ровно 50 кадров в секунду 😀(а всем остальным выдавать сообщение "ну вы же смотрели на системные требования" xD ) ну или переключить монитор в 50 герц и включить vsync. но эт слишком грязно и инпутлаг поедет... 1:11:34 насколько помню- в 2022 вижле сишку починили. ну или clang-cl притащить, чо уж там.
@tilir4 күн бұрын
Вы сейчас радостно агитируете за чудовищный и отвратительный вендорлок.
@Stedmiel4 күн бұрын
@@tilir ну, благо там, где рефлекс нужен (всякие компетитив-игоры)- и так почти везде нвидия. ну и может быть к какому-нибудь vulkan 1.9 оно доедет и до стандарта... там внутре же просто семафорчики и доступ к аппаратным/драйверным счетчикам. а так да. плоховастенько. жаль, что альтернатив ему не особо есть (на винде). *а еще на винде контекст вулкана надо создавать через одно место- dxgi зовется. потому что только там можно поставить флажок "обходить композитор". это бы тоже куда-нибудь в дефолтное расширение вулкана припереть... так что пока что да- или вендорлок, или волосатый график фреймтайма (потому что sleep'ы косые как не в себя) + инпутлаг конь. с рефлексом в типичной игоре можно 6-9мс от ввода до видеовыхода, как повезет со временем запуска. и не улетая при этом в много-много фпс, которые еще и VRM взорвать могут (косится на нвидию, не чинящую этот баг с 900-ой серии до 4000) а, ну или дедовский вариант с переключением частоты монитора. вариант еще хуже xD
@tilir4 күн бұрын
У AMD тоже есть очень конкурентные карточки. Да и у Интела ARC Alchemist неплоха.
@Stedmiel4 күн бұрын
@@tilir я там не про сами карточки, а про драйвера и весь софт вокруг них. не знаю, как у интела, их ARC ни на одной из моих машин не завелся (но эти машины весьма кривые, эт ожидаемо), но у красненьких просто нет способа снизить инпутлаг. тот, который заявлен- не работает как надо. а еще у них проблемы, если вдруг видеокарта повисла- их невозможно ресетнуть. там, где у других достаточно bus reset, у амд надо выключать питание. (и даже если выключишь питание- там драйвер выгружаться не умеет нормально. но в линуксе все в целом плохо с хотплагом/анплагом гпу. но хотя бы так можно перезапустить виртуалку с амдшной графикой, не перезапуская всю машину.) а чтобы повесить амдшную графику в линуксе- чуть ли не достаточно сделать for(;;); в шейдере. да, оно настолько плохое там. но в целом начиная с 7000 серии у них наконец-то кодер видео стал адекватно кодировать видео! и даже лучемет лучи метает как надо! (оне там формат дерева blas/tlas поменяли на примерно как у нвидии.) ждем всего остального xD про то, что "и так почти везде нвидия"- это чисто из стимовской статистики, там ее 76.59% за апрель 2024.
@DmitryKandiner4 күн бұрын
26:30 Можно ещё добавить "джигитовки": while (*dst++ = *src++);
@andrewkot52124 күн бұрын
Скажите, а девайс , которому коннектиться рендерер- это что за сущность? Вроде как и драйвер к устройству, но если есть софвар асселератор - то просто подпрограмма
@tilir4 күн бұрын
Это рантайм. В обычном случае у нас есть графический kernel-mode драйвер к которому цепляется например OpenGL runtime, представляющий собой user-mode часть драйвера. SDL умеет собирать несколько поддерживаемых рантаймов и цепляется уже к ним.
@johndick9965 күн бұрын
Отличная вводная в графику, с самой базы. Константин Игоревич, большое спасибо за труд!
@user-ko2th7mx2n5 күн бұрын
1:23:00 Почему в интрузивном счётчике не нужно его делать атомарным?
@stanislavstanislavius76185 күн бұрын
Так вот как работает реверс инжениринг))
@atmr906 күн бұрын
Константин, большое Вам спасибо за курс лекций, от человека из региона! как то было сказано что доп. семинара по vim не будет. Но если это станет возможным, то курс станет шикарным в квадрате. В меру часто приходится подключаться к удаленным серверам и что то править и хорошие практики работы с vim были бы очень полезны. Сам очень долго (несколько месяцев) разбирался как работает буфер и как его прокинуть на удаленный сервер в vim. (Прокинуть ssh -X, ssh config X11Forwarding yes, установить xclip, vim config set clipboard += "unnamedplus"). А ведь копи-паст это полезная функция. Без иксов можно системно и логично (как Вы это делаете, отдельная благодарность) рассказать о базовых настройках чистого vim. нумерация строк, сплит экрана - то чем пользовались на семинарах.
@thepawday6 күн бұрын
33:26 мое любимое UB - std:: unreachable()
@MVZ19836 күн бұрын
Аппаратные кэши, конвейеры, транзисторы, конденсаторы... Как же низко мы пали!
@FeelUs7 күн бұрын
Взятие адреса переменной не гарантирует, что она не окажется в регистре (может оказаться, что этот адрес не используется). А вот если добавить volatile, то должно сработать. Поправьте меня пожалуйста если я не прав.
@tilir7 күн бұрын
Достаточно чтобы адрес куда то утёк. Например был передан как аргумент во внешнюю функцию и т.п. volatile да, всегда работает, но это очень дорогой метод ))
@FeelUs6 күн бұрын
@@tilir а чем дорог volatile?
@tilir4 күн бұрын
@@FeelUsвокруг него отключается большинство компиляторных оптимизаций.
@FeelUs4 күн бұрын
2:13 а разве мы не этого хотим? Для чего вообще может потребоваться явно выделить память но при этом оставить какие-то оптимизации с памятью?
@stanislavstanislavius76187 күн бұрын
59:48 Если мы из "B A E" возьмем B и добавим в "D C" то у нас будет конфликт, т.к. у B и D дедлайн первого дня, а значит мы не любое значение можем взять из "B A E". Или у матроидов предусматривается взятие даже конфликтующих значений?
@FeelUs7 күн бұрын
В общем, чтобы понять исходники clang'а нужен анализатор кода, а чтобы сделать анализатор кода нужно понять исходники clang'а
@FeelUs7 күн бұрын
а в каком файле исходников находится main(argc,argv) ?
@FeelUs7 күн бұрын
В самом деле, сейчас clang 18.1.4
@tilir7 күн бұрын
Да много времени уже прошло ))
@user-fh9jb9nz2m8 күн бұрын
Скажите пожалуйста, просто любопытно а литература за 1988 год разве еще актуальна 🤨?
@tilir7 күн бұрын
Да.
@user-fh9jb9nz2m8 күн бұрын
" изучить си за недельки две". М да хотел бы посмотреть на такого человека кто знает Си в полном объёме. От всех его стандартов и всех возможностей за такой срок😁.
@tilir7 күн бұрын
Так в полном объёме и не нужно.
@alexanderspeshilov8398 күн бұрын
"Подсмотриваю" ваши семинары (хоть и в 2 раза старше студентов). Про бенчмаркинг sqrt. На X64 и мощных ARM понятно что итеративно (даже Ньютоном) вариант dsqrt обогнать если и можно, то не просто. Но вот на каком-нибудь Cortex- M0 или RISC-V без нужных расширений dsqrt может оказаться совсем небыстрым. При этом для целых есть хорошее начальное приближение что-нибудь типа x >> ((32 - clz(x)) >> 1), где clz - количество нулей впереди. Впрочем, у m0 clz тоже, если я правильно помню не одной командой считается.
@MVZ19838 күн бұрын
ну и про union не забываем если нужно представить float как unsigned
@tilir8 күн бұрын
Не используйте type punning.
@dsorvq9 күн бұрын
Асимптотика на 1:07:20 скорее всего несколько выше, чем O(n), нам ведь еще нужно на каждой итерации считать что-то вроде lcm(i, result). O(n * log(lcm(2,...,n))) точно подойдет, но наверное, можно уже
@tilir9 күн бұрын
Если числа M-битные, это добавляет множитель O(logM). Но для 32-битных чисел это константа, поэтому O(N) -- мы зависим только от общего количества чисел и съедаем их по одному.
@Dav1d56119 күн бұрын
Вывод с пробелом можно через правую свёртку написать? 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-vh9dg8hl8o10 күн бұрын
!
@stanislavstanislavius761810 күн бұрын
Самое главное здесь, что только на шестом этапе нужно начать думать)))
@MVZ198310 күн бұрын
Балы, красавицы, лакеи, хакера, И вери трики кейс, и хруст французской булки...
@lwind488410 күн бұрын
При проверке на равенство чисел с плавающей точкой рекомендую руководствоваться следующей методикой. Если, например, нужна точность до 5го знака после десятичной точки, берите допуск равный 0,5*0,00001 (т.е. 0,000005). Так Вы нивелируете погрешность математического округления.
@user-hh2qp6ez4d3 күн бұрын
Нас на вычислительной математике учили считать на разряд выше требуемой точности.
@lwind48843 күн бұрын
@@user-hh2qp6ez4d Я имел ввиду следующее. Нужно сравнить два числа так, как если бы Вы перевели эти числа в строку с одинаковыми настройками форматирования, а потом проверили на равенство. Например, сравните числа 1.5551 и 1.5552 с точностью до третьего знака после десятичной точки. Если считать на разряд выше, то с точностью до четвёртого знака эти два числа не равны. Но с точностью до третьего знака они не различимы, т.е. равны. Впрочем. Вообще выбор метода сравнений чисел с плавающей точкой зависит от конкретной задачи.
@user-hh2qp6ez4d3 күн бұрын
@@lwind4884 я не про количество знаков после запятой. Я про количество разрядов. Например, 123456.789(9 разрядов)*1.234(4 рязряда) - так считаль нельзя, потому что результат умножения будет достоверным только на 4 разряда. Нужно сохранять количество разрядов, а именно 123456.789*1.23456789 - так правильно, если нужна точность 8 разрядов. Как тут сравнивать? В каждом конкретном случае свое количество знаков после запятой.
@lwind48843 күн бұрын
@@user-hh2qp6ez4d Благодарю за комментарий по поводу точности вычислений. Однако, прошу обратить внимание, что я писал о методе сравнения.
@MVZ198310 күн бұрын
да... хак на хаке и хаком погоняет хороший курс лекций, но как с этим жить?
@hohlovin11 күн бұрын
Давали бы мне такие знания году так в 95-м...
@tetraphobie11 күн бұрын
Пришёл из-за аниме, остался из-за раскрутки стека.
@akulijbe11 күн бұрын
1:13:10 - видимо запись решила скрыть, что мы увидим в реализации синуса) но я дополню, что почти всегда мы увидим ряды Тейлора (к примеру, как в musl и glibc) P.S.: видео как всегда супер! Спасибо)
@narzaru11 күн бұрын
Здравствуйте, доступа к заданиям в задачнике нет, и ссылка на плейлист с записями семинаров в конце задачника неправильная
@tilir11 күн бұрын
У вас проблемы с браузером, он подменяет вам http на https.
@narzaru11 күн бұрын
@@tilirтак и не смог победить, пробовал Edge, Google Chrome, Firefox. Потыкал настройки, не помогло. Код последней ошибки 4e816500.
@2_x_2_411 күн бұрын
kzfaq.info/get/bejne/j9ZdpbGQpsC6g30.html Эту формулу (1/2(xn+a/xn)) ещё называют фомулой Герона. А т.к. одну формулу Герона студенты знают, то, полагаю, у вас, Константин, интересно получилось бы обыграть такую ситуацию в лекции. :-)
@evseee12 күн бұрын
да, одно дело когда говорят "для икс меньше дельта", а другое когда ты на, ещё зелёном, но уже графическом, мониторе видишь как колбасит ряд маклорена для синуса при удалении от нуля :)
@fedorbabkin12 күн бұрын
Вспомнился ФОПФовый анекдот. Студент на экзамене по электродинамике все время подглядывает на ладонь руки. Преп ловит его, говорит: показывай шпаргалку. Тот показывает левую ладонь, там буква Л. Преп: зачем тебе это? Студент: правило левой руки помню, а какая из них левая, всё время забываю...