Информация
- В рейтинге
- Не участвует
- Откуда
- Самара, Самарская обл., Россия
- Дата рождения
- Зарегистрирован
- Активность
Специализация
Десктоп разработчик, Бэкенд разработчик
C++
Assembler
Системное программирование
Разработка программного обеспечения
Многопоточность
Delphi
C
Напомнили
Состояния «я не ок» вообще не должно быть. Оцениваем действие, а не личность, как в детской психологии. Что я делаю не так? Как я хочу? Как этого достичь? Поэтому что «я не ок» не добавляет мотивации, в отличие от «мне не нравится такой результат, хочу вот этак».
Так, я и не говорю, что это профилировщик. Запятая здесь — это перечисление, а не уточнение.
Есть вариации рекомендаций. Можете глянуть вот это:
https://github.com/dterei/Scraps/blob/master/intel_tsc/ia-32-ia-64-benchmark-code-execution-paper.pdf
https://github.com/mkurnosov/tscbench (см. файл tsc_x86.h, там данные из предыдущего документа) + https://xk8.ru/files/temp/mkurnosov-rdtsc-2014.pdf
Утилита Агнера Фога: https://agner.org/optimize/#testp (но это уже дебри)
В основном всё сводится к связке
xor eax,eax+cpuid+rdtscперед измеряемым кодом иrdtscp+ сохранение eax/edx +xor eax,eax+cpuidпосле. Если процессор поддерживаетserialize, думаю,xor+cpuidстоит заменить им.Ну и ещё можно использовать профилировщики, Intel Architecture Code Analyzer (последняя версия 2019 года).
Intel SDM vol. 2 / RDTSCP:
Оптимизация Фибоначчи через мемоизацию повеселила, конечно. Когда можно простым циклом обойтись :)
В данном случае да, потому что это операции над целыми числами.
Но если заменить vpaddq, например, на vaddps, то и там, и там будет AVX.
Если нужно выполнить 100 сложений длинных 256-битных чисел, то это операцию из 17 инструкций нужно выполнить только один раз в самом конце. Вот и ускорение.
Если бы у автора был процессор следующего поколения (Broadwell), он бы мог ускорить сложение, используя инструкции ADCX и ADOX, с помощью которых как раз можно распределить 2 сложения. Конечно, на сотне сложений это будет работать медленнее, но на небольшом кол-ве даст больший перфоманс.
А ещё в AVX-512 есть 2 интересные инструкции: VPMADD52LUQ и VPMADD52HUQ, которые выполняют сложение с умножением над 52-битными целыми числами :)
Результат будет неверным, только и всего.
Для него есть полноценная клавиатура: https://youtube.com/shorts/--5n6E6EI08?si=X9LSOPn-jX-8b7Ym
На мой взгляд, он решает следующие проблемы:
Размер. Ноуты 14" и меньше компактные, но работать на них не особо удобно. Здесь же размер 12", который раскладывается в 18". Плюс он очень тонкий.
Если большой экран использовать неудобно (в самолёте, например), можно использовать его как планшет. При этом у обычного планшета экранная клавиатура занимает большую площадь. Здесь же она в нижней горизонтальной половине. Да, есть планшеты и ноутбуки трансформеры, но см. п. 1 :)
В Сферум чат с учителем уже переехал (точнее, изначально там и был создан). А родители между собой общаются где им удобно, кто их может заставить?
Лично мне Viber не нужен, а WhatsApp и подавно. Странно, что второй не забронировали раньше. Удалил бы оба приложения с радостью! В Discord'е есть интересные чаты (негеймерские).
У меня статистика такая: более-менее продвинутые (плюс почти все мои родственники, не без моей помощи) пользуются Telegram. Остальные — Viber (там же родительские, домовые чаты). В WhatsApp обычно какие-то рабочие темы. В Discord в основном молодёжь, геймеры, программисты. Среди основной массы знакомых очень мало тех, кто вообще знает о нём.
Вот здесь описано короче,понятнее и подробнее:
Мы общались с автором этой змейки. Моя официальная версия — 64 байта (можно даже поиграть онлайн). Она чуть больше, зато и выглядит посимпатичнее. Но там (в архиве) есть бонусные версии меньшего размера: 56, 48, 46 и 45 байт (последние страшненькие, конечно, но 56 не сильно отличается от 64).
Спасибо! Я правильно понимаю, что прокси используются только для тех задач, в которых стоит галка "Использовать профиль прокси"?
P.S. Ещё в качестве пожелания: не хватает опции "Запускать свёрнутым в трей", чтобы не приходилось при каждой перезагрузке жать на крестик.
Отличная идея! Самому нужна такая прога, а писать было в лом :)
Хорошо бы ещё добавить возможность использования прокси для отслеживания зарубежных сайтов (типа intel.com).
Про алгоритм лучше спросить у автора. Он доступен в Discord (ссылка есть в статье про radar).
Могу сказать только, что после
adc al,0x10на первой итерацииint 0x10выполняет установку 16-цветового EGA видеорежима 640x320, а на следующих выводит точку через функциюah=0x0C, цвет которой каждый раз меняется c помощью всё той же инструкцииadc al,0x10.Добавлена 45-байтовая версия змейки (в спойлере в конце статьи) :)
Адрес SS:BP+SI указывает на голову змеи. Т.е. по этому адресу лежит "координата" головы (если точнее, то смещение адреса в сегменте DS, соответствующего цвету символа; для простоты я буду называть это координатой). После чтения скан-кода клавиши и преобразования его в смещение координаты (-2 / 2 / -80 / 80) мы добавляем к этому значению координату головы, получая т.о. новую координату. Далее эта координата записывается в SS:BP+SI, сдвигая всё остальное далее по массиву.
Например, длина (CX) = 5. В массиве (по адресу SS:BP+SI) были такие слова: [11] [13] [15] [17] [19] (на самом деле прямо таких значений не будет, но для простоты пусть будет так, можете мысленно прибавить к этим числам 64000). Мы нажали вниз (80), получили новую координату: 80+11=91, новый массив будет таким: [91] [11] [13] [15] [17].
При этом мы рисуем только голову (91) и затираем хвост (19). При съедании яблока после вышеуказанной процедуры длина увеличивается на 2, и на следующем кадре будет так: [171] [91] [11] [13] [15] [17] [мусор]. В этот раз мы затираем (один раз) "мусорную" координату. В теории, это может быть координата на экране, т.е. мы можем затереть какое-то яблоко, часть себя или даже нарисовать на экране более жирную точку, если координата окажется чётной (символ с кодом 7, т.к. мы затираем хвост цветом 7). Если присмотреться к скриншоту, то можно увидеть, что внизу есть более жирная точка. Этот артефакт — как раз результат такого "удаления" несуществующего хвоста с мусорной координатой, которая оказалась чётной и попала в экран.
Этот глюк можно убрать, добавив инструкцию
mov [bp+si],cxпослеloop, но это +2 байта (хотя можно всё равно уложиться в 64 байта, убрав звуковой щелчокout $61,al). Но тут всё равно нет 100% гарантии, что первые 5 (начальная длина змейки) координат не попадут в экран (а эти координаты исходно мусорные). Нужно добавлять ещё несколько байт в начало кода для их очистки. Но и в этом случае можно уложиться в 64 байта, если прибавлять длину змейки на 1, т.к. мусорной координаты при увеличении длины не будет, иmov [bp+si],cxздесь уже будет не нужен + кол-воinc cxуменьшится на 1 шт + можно до кучи убрать удаление курсора.P. S. Обычно сдвиг массива "вперёд" делается с конца назад (чтобы не затереть самого себя), но используя
xchgможно делать это, двигаясь с начала вперёд (как здесь).Нет, меня там не было ?♂