Обновить
236
38.8
Андрей Дмитриев @AndreyDmitriev

Пользователь

Отправить сообщение

ну да, рамблёрить, альтавистать да асталавистать...

Да, есть "области применимости" ИИ, в программировании, кстати, в том числе. Я этим летом упражнялся, насколько далеко смогу уехать на копилотах и набросал проект, где кодил в основном, используя ИИ (процентов этак девяносто кода там чисто нагенерировано, включая документацию на двух языках). Очевидным образом я могу попросить ИИ "набросай код для рисования на канвасе пяти вложенных шестиугольников, используя биндинги к CVI", и он делает это с полпинка, избавляя меня от львиной доли "рутинной" работы, но я очевидным образом не могу попросить его "возьми стандарт ASTM 2597 и напиши программу на Расте для рисования этой диаграммы" — он это не сделает. Ну или там "возьми исходный код ImageJ (что на Java) и просто кроссплатформенно перепиши его на C# c Avalonia один в один". Тут примерно как разница между Судоку и Flappy Bird. Вот когда в ответ на подобный "общий" запрос мы получим компилябельный проект "под ключ" (и где-то в этом месте он таки научится успешно играть в Flappy Bird), тогда можно потихоньку начать говорить о замещении человека-программиста роботом, даже несмотря на то, что уже сегодня по ходу ИИ учится и где-то с середины разработки я просто тупо жамкал "ТАБ" да "Ввод" снова и снова — он реально подгонял "правильные" строки кода.

Не только на серверном, но и на прикладном уровне нужны - каждые три года наша компания полностью меняет компы, так что настроенные среды разработки бывает удобнее держать развернутыми в виртуалках, ну и для тестирования инсталляшек и ПО на различных ОС тоже удобнее делать в ВМ, легко откатываясь к чистой установке, так что виртуальные машины удобны и нужны, хотя я и предпочитаю работать без ВМ если нет особой необходимости.

Может я тогда сакральный смысл "highload" не очень понимаю. Просто захожу вот сюда - highload.fun/tasks, вижу список заданий. Соревнование идёт именно за время выполнения кода, там везде "...for the shortest time". Практически везде С++ с хорошим отрывом от С#, и мне понятно почему. В первом же примере С++ 2,911, а С# 14,506 - это пятикратная разница. Вот медиана ещё показательнее - тут вообще в 60 раз, медиану на чистом шарпе оптимально найти непросто. Кстати, Раст почти вровень с С++, это то что я и на практике наблюдаю. Я это к тому, что можно соревноваться в классе С++ или С#, но сравнивать их нельзя. Это примерно как есть Формула 1, а есть ралли "Дакар" - просто разные вещи, разные "весовые категории", что ли. Но писать оптимальный код именно на используемом языке надо уметь, конечно, и такие упражнения помогают, да.

Тут видимо имеется ввиду. что С# - это управляемый код, так что у нас есть дополнительная прослойка в виде IL/JIT, соответственно получить производительность, сравнимую с тем же Си или Растом бывает чуть сложнее. Писать высокопроизводительный код на нативном Питоне (ну то есть без библиотек) - примерно тоже самое, только ещё хуже. Вообще если упираться в максимально эффективный машинный код, то тут ещё и компилятор влияет, ингода перекомпиляция Си кода интеловским компилятором может дать хороший буст. Ну и при анализе узких мест желательно заглядывать именно в машинный код, на уровне ассемблера, и С# тут не сильно помогает. Бывает проще расчехлить Си, аккуратно выписать и отпрофилировать самую нагруженную часть там, а затем уже подключать к С# или Питону в виде библиотеки.

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

Вот так это выглядит:

У меня такой Galaxy Tab Active5, только не Pro. Он поменьше чуть чуть, восемь дюймов, что в общем оптимально для полевых условий. Используется в основном как навигашка в путешествиях, там ТомТом крутится. Резиновый чехол очень удобный. Экран, царапается, кстати слегка. Pogo Pin это реально круто и удобно, я купил для него док станцию в машину, намертво закрепил её на торпеде авто и подключил к питанию. Проводов нет, вставляется и вынимается одним движением, из чехла его вынимать не надо, там дырки предусмотрены. Акк действительно съёмный, задняя крышка легко отщёлкивается. За версию 5G 256 ГБ/8 ГБ отдал что-то около пятисот евро, что чуть больше чем хотелось бы, ну ещё док станция - полтинник вроде. Но в целом удобно. А так- планшет и планшет.

Если он вот сюда занырнул, то там ещё и неописуемо красиво, так как излучение Черенкова:

Он просто обязан теперь обрести какую-нибудь супер-способность

Не, на картинке-то как раз всё правильно, вначале идут 2х8 Р, а потом 12 Е, а ошибка вот здесь:

int eff = lpInfoEx->Processor.EfficiencyClass; // 0 for P, >0 for E             
string coreType = eff == 0 ? "P core" : "E core";

А доки говорят что «A core with a higher value for the efficiency class has intrinsically greater performance and less efficiency than a core with a lower value for the efficiency class.»

А ИИ мне ровно наоборот нагенерял, а я скопипастил и не проверил, ну, бывает. Спасибо большое за внимательность, я поправил, теперь правильно.

Для понимания этой фразы, очевидно, требуется бэкграунд в виде десятков тысяч часов

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

Ну, значит, я отстал от жизни. Я вот сейчас проверил - эксперимент проводился на чистой Windows 11 Enterprise LTSC 24H2 26100.2033, был начат 11 октября прошлого года и закончен в конце января этого (просто электрики пришли проверять и пришлось обесточить, оно б и дальше работало). Обновления там списком стояли, но не скачивались и не инсталлировались. Можно в теории на чистой 25Н2 повторить, в крайнем случае политиками через gpedit дополнительно подблокировать, но у меня рабочая именно 24Н2 LTSC, и она бывает неделями не перегружается, я комп на работе вообще никогда не выключаю, но мне иногда надо железки всякие втыкать, либт софт ставить, который требует перезагрузки, вот тогда я обновления и ставлю.

Включите "Metered Network" для адаптера и больше никогда этого не увидите (впрочем обновлений тоже). Этот режим не оказывает никакого влияния на работоспособность сетевых соединений, разве что Аутлук при старте будут спрашивать разрешения подключиться. Я для одного теста в прошлом году комп с этой настройкой и Windows из коробки три месяца на работе держал во включённом состоянии, выпущенным в интернет, и он ни разу не перегрузился.

Я в промышленном программировании занят (автомобильная, авиа, литьё, и т.п), и да, идёт переход на 11 (IoT LTSC, само собой), притом даже там, где это не нужно, и пром системы вообще изолированы от внешних сетей; а Windows там довольно много где, причём в основном там АСУТП крутится, а операционку оператор и не видит вовсе. Но компания Майкрософт сказала - надо менять, и локальные АйТи подхватили, а поскольку материнки тоже старые и не поддерживаются, то и железо меняется до кучи, а материнки там тоже не ширпотреб, они гарантированно выпускаются десять лет с момента покупки и новенький пром компьютер в стойку по итогу стоит как крыло от боинга, а его замена сопровождается выездом сервис инженера к заказчику, вот такой снежный ком затрат у всех, (на всё это само собой накручивается маржа процентов этак сорок), всё только потому, что одна корпорация решила, что мол, хватит с десяткой нянчиться. По итогу внакладе никто не остаётся, все получат прибыль, и автопроизводитель, вбухавший в нафиг никому не нужное обновление неслабые суммы тоже отобьёт своё, размазав цены на стоимость авто, так что по итогу мы же этот праздник и оплатим, зато графики бодро карабкаются всё выше и выше.

Я вот только что закончил читать "Урожаи и посевы" Александра Гротендика (кстати, офигенная книга, рекомендую), и под впечатлением от прочитанного, вот не могу не заметить, что современная алгебраическая геометрия, если опереть её на схематический формализм Гротендика, позволяет рассматривать геометрическое произведение ab не только как внутреннюю операцию в алгебре Клиффорда, но и как морфизм в более общем пространстве функториальной природы — пространстве Гротендиковой топологии. Здесь взаимное расположение векторов кодируется уже вовсе и не числами, а гомоморфизмами между объектами категорий, а их симметричные и антисимметричные компоненты естественно интерпретируются как когомологические классы в группах когомологии Галуа, отражающих скрытые симметрии поля коэффициентов.

Таким образом, симметрическая часть геометрического произведения - как раз то самое "отражение", о котором Вы пишете в статье, соответствует инвариантам, фиксируемым действием абсолютной группы Галуа, а вот антисимметрическая часть образует нетривиальные 2-когомологии, описывающие ориентации, расслоения и вращения, аналогичные ротору в геометрической алгебре. В этом смысле каждый бивектор оказывается аналогом торсора, заданного неявно когомологическим классом, а сам ротор — это автоморфизм объекта в категории схем, определяемый через внутреннюю структуру поля Галуа. Из этой перспективы геометрическое произведение становится универсальной операцией склейки, выражающейся в том, что все, вообще все локальные данные — от скалярных проекций до ориентированных площадей — возникают как когерентные функторы на категории галуа-анализируемых пространств.

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

Это, конечно, так, но всё же есть такое дело:

Я работаю в области промышленных систем, и в настоящее время идёт массовый переход с Win10 LTSC на Windows 11 IoT Enterprise LTSC c десятилетним планом поддержки, у неё мейстримный план до девятого октября 2029, а расширенный аж до октября 2034 года.

Да не, там вроде всё достаточно честно и детерминированно, я вот тут на прошлой неделе упражнялся и бенчмаркал ядра, посмотрите, там поподробнее на эту тему, примерно треть можно промотать до места где про латентность и пропускную способность - https://habr.com/ru/articles/957702/

Нет нет, это именно частота ядра. "Частота конвейера" (если о таковой вообще можно говорить) на примере выше - "двенадцать гигагерц". То есть процессор за одну секунду смог обработать двенадцать миллиардов инструкций, поэтому там параметр IPC - это Instructions per Cycle (инструкций на цикл) - 2.80. Это значит, что в среднем за эту секунду он перерабатывал почти три команды на каждый такт. Есть команды, которые требуют больше одного такта, скажем, умножению надо три. Соответственно IPC может быть и меньше единицы. Вон второе ядро там отработало 757 К тактов, но всего 208 К команд, примерно три-четыре такта на команду.

Да, я в курсе, этот хардверный регистр в основном называют циклами, просто я хотел сказать, что с ним надо аккуратно работать, примерно как с QueryPerformanceCounter() - то есть вначале определить его частоту любым удобным способом и дальше использовать. Ну вот смотрите, я нагружу первое ядро процессора на 100% и запущу пару утилит Intel PCM (pcm.exe и pcm-core.exe), они по умолчанию ровно раз в секунду отсчёты делают:

Time elapsed: 1002 ms

 Core (SKT) | UTIL | IPC  | CFREQ |  

   0    0     1.00   2.80    4.36    
   1    0     0.00   1.07    4.07 
...
 Instructions retired: 19 G ; Active cycles: 10 G ; Time (TSC): 2311 Mticks;
 
Core | IPC | Instructions  |  Cycles  | RefCycles  
   0   2.80          12 G     4361 M      2303 M         
   1   0.28         208 K      757 K       422 K     
...

Тут ядро работает сейчас на 4,36 ГГц и реальных циклов процессора набегает в секунду 4361 M (и, кстати, 12 миллиардов инструкций), а вот тиков таймера только 2311 Mticks.

Я не говорю, что в статье неправильно, просто для понимания. Для меня такты процессора - это реальные такты ядра, а TSC - это циклы таймера (который один на все ядра).

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

Само собой, что если мы работаем с одним процессором, то меньшее значение тиков говорит о большей производительности.

Маленькая заметка на полях: __rdtsc(); — это не совсем "такты процессора". Это Time Stamp Counter (TSC) - то есть таймер времени. Грубо говоря (если про Windows говорить) есть три таймера - один миллисекундный таймер по умолчанию работает на 64 герца (в смысле обновляется каждые 15,625 мс), его получают через GetTickCount(), его разрешение можно поднять до килогерца через timeBeginPeriod(), затем есть таймер высокого разрешения, его инкременты можно считать через QueryPerformanceCounter(), и частоту формально надо запрашивать через QueryPerformanceFrequency() , но там обычно 10 МГц. и вот RDTSC, частоту которого можно либо программно получить, тупо отсчитав секунду через тот же QueryPerformanceCounter, либо через CPUID, но только если поддерживается leaf 0x16. Это самое высокое разрешение, обычно сравнимое с частотой процессора, но не равное текущей частоте ядра. Скажем у i7-13850HX P ядра могут легко молотить на 5 ГГц, а частота RDTSC "всего лишь" 2304 МГц, то есть вдвое ниже. Поэтому если для какого-то участка профилируемого кода мы получили два с половиной миллиарда инкрементов RDTSC, то это не означает, что процессор отчканил именно столько циклов, скорее всего их больше пяти миллиардов, просто работал он чуть больше секунды. Конечно, для сравнения скорости выполнения участков кода RDTSC использовать можно и нужно, это самое высокое разрешение, какое только есть, а вот именно количество тактов ядра на данном временном отрезке получить чуть сложнее — тут надо либо RDPMC юзать (и там есть свои сложности), либо что-то типа Intel PCM.

1
23 ...

Информация

В рейтинге
208-й
Откуда
Ahrensburg, Schleswig-Holstein, Германия
Дата рождения
Зарегистрирован
Активность