2 279
12 858

Заходил(-a)

Написал(-a) комментарий к произведению Ретро бит [5]

Ну аспиранта в соавторы же взял, так что всё как положено. Аспирант написал, научный руководитель подписал. Другое дело что это делается когда тема работы предложена научным руководителем и он участвовал в обсуждениях.

Много лет назад в Новосибирском академгородке мне рассказывали про группу, где аспиранту говорили "хорошая работа, пиши статью, опубликуем под моим именем; будешь дальше так же хорошо работать, через несколько статей включим тебя в соавторы". Рассказавшему человеку я верю, и было это 40 лет назад, но имена и название организации я всё же опущу.

Написал(-a) комментарий к произведению Ретро бит [5]

Расположена компания рядом, в Сан Хосе. Их инженеры вполне могут написать сетевую часть.

Связать в сеть самопальные аркадные автоматы на основе Commodore 64, чтобы посетители играли друг с другом. Квортер за N минут. И украсть такое будет не очень легко.

Написал(-a) комментарий к произведению Ретро бит [5]

Через com-порты сеть делать не очень хорошо, из-за разности потенциалов карта/карты могут сгореть. У нас, во всяком случае, сгорели.

Тот же Corvus предлагает Omninet. Если их заинтересовать многопользовательской игрой, вполне могут дать сетевые карточки даром. Ну или карточки в любом случае нужны чтобы к внешнему диску цепляться.

Написал(-a) комментарий к произведению Ретро бит [5]

Ещё: междугородние разговоры с сотрудником, ровно как и скачивание программы или данных, это вполне законные бизнес-расходы. Ровно как и разговоры с бизнес-партнёрами.

Написал(-a) комментарий к произведению Ретро бит [5]

Ещё: если ехать вдоль берега по CA-1, то кроме очень красивых видов там будут многочисленные морские зверюшки -- тюлени, морские слоны, морские львы, выдры. Как плавающие в воде, так и толпами лежащие на берегу. С утёса повыше можно увидеть китов, причём целиком туши в прозрачной воде, не только фонтанчики.

А утром/вечером можно въехать в абсолютно фантастический туман, когда воздух с побережья сталкивается с воздухом с океана. Но это скорее осенью/зимой.

Написал(-a) комментарий к произведению Ретро бит [5]

С "обычными" командами тоже можно, если использовать стек. Смотрите сами: POP 10, 2xST 14, 2xINC 12. Итого 36 тактов на 2 байта, 18 тактов на байт, не считая расходы на организацию цикла. Чуть хуже чем с LDI, там 16, но всё равно лучше чем с LDIR.

А если мы знаем куда мы пишем, например знаем что пишем в видеопамять и адрес выровнен на 256 байт, то можно вместо 16-битного INC использовать 8-битный, тем самым экономя 2 такта на байт. Получится 16, ровно как с LDI.

Программа, правда, становится нечитаемой.

Написал(-a) комментарий к произведению Ретро бит [5]

"Время за терминалами не резиновое" -- поэтому сначала надо написать программу на бумажке, а только потом идти за терминал. Именно так были организованы лабораторные работы когда были терминальные классы 

Написал(-a) комментарий к произведению Ретро бит [5]

Смотрим на приведённую вами таблицу команд. LDIR -- 21 такт, LDI (которая пересылает один байт и изменяет регистры, но не организует цикл) -- 16 тактов.

Пишем цикл из 16 команд LDI по 16 такт на байт, уменьшение регистра A (4 такта) и условного перехода по не нулю (10 тактов). Итого чуть меньше 17 тактов на байт, по сравнению с 21 у LDIR.

Написал(-a) комментарий к произведению Ретро бит [5]

Посчитайте такты, я объяснил за счёт чего получается ускорение. По отдельности вы не делаете то, что делает одна команда, вы делаете меньше. Нет 16-битного уменьшения счётчика байтов и сравнения с нулём.

Разумеется так имеет смысл стараться только для пересылки больших объёмов, и только если скорость критична. Обычно это не так.

Написал(-a) комментарий к произведению Ретро бит [5]

История про Borland.

Довелось мне общаться с бывшим сотрудником Borland. Он там работал в начале 90-х, когда у компании было своё специально спроектированное и построенное под них здание.

У человека была своя комната ("офис"), в то время считалось, что это эффективнее чем open space, в Microsoft сотрудники тоже сидели по отдельным офисам. Над офисом, на следующем этаже, был большой кондиционер, обслуживающий то ли весь этаж, то ли всё здание, уже не помню.

И вот приходит он как-то утром на работу, а вместо его офиса -- тот самый кондиционер сверху.

Расследование выяснило, что когда здание строили, в планы одновременно внесли 2 изменения:

* перекрытия были запланированы слишком крепкие, для нагрузки что получилась их можно было использовать попроще, что и сделали

* кондиционер был заменён на более мощный и тяжёлый

Типичный пример "race condition".

Человек воспринял это как знак свыше и ушёл работать в Microsoft. Как видно, не прогадал.

Написал(-a) комментарий к произведению Ретро бит [5]

Разумеется быстрее было возможно.

Арифметика на z80 считается 4-х битовым АЛУ, поэтому уменьшение BC это долго.  Надо было частично развернуть цикл, чтобы уменьшение случалось не на каждой итерации, а, скажем, на каждой 8-й или 16-й, и сделать уменьшение счётчика цикла 8-битным. Будет быстрее, даже с накладными расходами на переход назад.

Ну или использовать трюк с установкой стекла куда надо, и использовать POP для чтения. Или наоборот PUSH для записи. Этим баловались но 8080, где команд для block move не было. Будет ли быстрее чем LDIR на z80 не знаю, надо считать.

Написал(-a) комментарий к произведению Ретро бит [5]

Компилятор оптимизацией не может изменить семантику программы.

(-13) % 4 == -1

(-13) & 3 == 3

Так что просто заменить остаток на AND компилятор не может. Компилятор может добавить несколько команд компенсации и таки использовать AND, но я уже писал, на pdp-11 это не имеет смысла.

Так что только самому править исходник 

Написал(-a) комментарий к произведению Ретро бит [5]

Без разницы. % это "остаток от деления". Если не дай бог count будет отрицательным, то и остаток должен быть таким же (ну или 0).

Компилятор глупый, он не знает, что count не может быть отрицательным. Тип переменной знаковый.

Написал(-a) комментарий к произведению Ретро бит [5]

Компилятор этого не знает. Он видит знаковое деление на 4. Да, после пляски с бубном можно сгенерировать код без деления, но на pdp-11 он будет заметно длиннее одной команды деления, так что вряд ли он это делал.

Или переменную делать unsigned, или ручками вместо деления написать &, как было предложено ^^^.

Написал(-a) комментарий к произведению Ретро бит [5]

К Cray XMP было подключено несколько VAX-ов которые загружали в него / выгружали из него данные. Программа была написана для VAX-а.

Написал(-a) комментарий к произведению Ретро бит [5]

Переменная знаковая. Мы знаем что значение не может быть отрицательным, компилятор этого не знает. А для отрицательных чисел сдвиг и деление дают разные результаты.

Компилятор всё равно может использовать сдвиг вместо деления, но надо будет вставить несколько дополнительных команд чтобы получить правильный результат. Это имеет смысл на современных процессорах, где сдвиг в десятки раз быстрее деления. Это не так на pdp-11, к тому же там размер кода был обычно важнее быстродействия.

Написал(-a) комментарий к произведению Ретро бит [5]

"Не изобретать велосипед" не менее  важный урок. Приходилось переучивать senior engineers, причём нескольких.

Но в данном случае memcpy() ещё не подвезли.

Написал(-a) комментарий к произведению Ретро бит [5]

Да, причём для конкретной задачи это не очень нужно.

Duff's device хорош тем, что очень эффективно справляется и с короткими блоками памяти, где "раскрытый" (unrolled) цикл исполняется в лучшем случае несколько раз. Тогда важна и скорость "хвоста", который копирует оставшиеся несколько слов.

Если же нужно только быстро скопировать большой блок, то подходит стандартная техника оптимизации -- сначала unrolled loop, который копирует по N слов, потом remainder loop, который копирует остаток по одному слову. Безо всяких синтаксических чудес.

Преподавателю следовало бы попросить померить, сколько копируется одно слово, три слова, ну и этот самый большой блок. И даже там отдельные switch и unrolled loop будут по скорости не хуже, лишь код будет длиннее.

Написал(-a) комментарий к произведению Ретро бит [5]

Если src и dst выравнены одинаково, то копировать словами, не байтами.

И глупый вопрос: а нельзя просто memcpy() позвать? Уж она-то написана на ассемблере и вылизана.

Написал(-a) комментарий к произведению Ретро бит [5]

Бухгалтерию в компании пора налаживать. С ходу, следующие затраты можно переложить на компанию:

* покупку IBM 5150, принтера, расходных материалов; хорошо бы карту расширения памяти, но она куплена "по-чёрному", вряд ли ему дадут чек

* курсы в университете для себя, графического дизайнера, стажёра

* бензин для поездок к заказчику (6 часов в одну сторону это заметно)

* часть аренды дома и коммунальных расходов; мебель в офис

* выплаты сотрудникам

* начать сохранять чеки во время бизнес-ланчей

Написал(-a) комментарий к произведению Ретро бит [5]

Память: ДОС работал в 16k. Вряд ли Unix смог бы.

Turbo Pascal-ем 1.0 вполне можно было пользоваться на машине с 64k. То же самое с Wordstar-ом.

А если за $300 прикупить карту расширения на 64k, то в 128k можно было делать что угодно. Хватало и на ДОС, и на программу, и на кучу данных.

И дискетки были аж 160k, на целых 17k больше чем на Apple II.

Что CP/M, что MS-DOS появились не от хорошей жизни.

Написал(-a) комментарий к произведению Ретро бит [5]

Вот не соглашусь я с тем, что Windows победили Unix в 80-е исключительно из-за жадности продавцов Unix-а. Были ещё 3 не менее важных фактора:

* Windows были куда менее требовательны к ресурсам

* Windows были куда более user-friendly (к примеру: вы не пытались просто выключить машину с ранним Unix-ом, не сказав ей "sudo shutdown"?)

* Microsoft тогда тратил какое-то невероятное количество ресурсов на обеспечение обратной совместимости как с программами, так и с железом, включая некорректные программы и железо. Сейчас у Unix-ов с железом ситуация резко улучшилась, с программами, пожалуй, нет.

Вот сколько-то историй от разработчика, который тогда занимался совместимостью:

https://devblogs.microsoft.com/oldnewthing/20031223-00/?p=41373

https://devblogs.microsoft.com/oldnewthing/20031224-00/?p=41363

https://devblogs.microsoft.com/oldnewthing/20050824-11/?p=34463

https://devblogs.microsoft.com/oldnewthing/20040213-00/?p=40633

https://devblogs.microsoft.com/oldnewthing/20040326-00/?p=40033

https://devblogs.microsoft.com/oldnewthing/20050118-00/?p=36673

https://devblogs.microsoft.com/oldnewthing/20090102-00/?p=19623

https://devblogs.microsoft.com/oldnewthing/20100706-00/?p=13493

https://devblogs.microsoft.com/oldnewthing/20100727-00/?p=13313

https://devblogs.microsoft.com/oldnewthing/20240521-00/?p=109786

Написал(-a) комментарий к произведению Ретро бит [5]

Хороший accountant подскажет, какие расходы можно списать с налогов, как можно оформить устаревание техники, какие есть законные способы минимизации налогов, и т.д., и т.п.

Не уверен что молодая девушка это всё знает.

Написал(-a) комментарий к произведению Ретро бит [5]

Можно запатентовать алгоритм целиком. Есть весьма жёстие требования, но вполне можно им соответствовать.

Примеры -- алгоритм сжатия LZW, используемый в GIF, патент US4558302A. Алгоритм решения задач линейного программирования Кармакара, патент US4744028A. Алгоритм RSA, патент US4405829A.

Лично сталкивался с тем, что способ быстрого вычисления abs() без переходов был запатентован Sun Microsystems, патент US6073150A. К счастью, у Microsoft с Sun был договор, разрешающий использование патентов друг друга.

Да я и сам соавтор патента на алгоритм.

Написал(-a) комментарий к произведению Ретро бит [5]

Были как официальные порты Unix на 8086/8088 (например Xenix, продавался Microsoft-ом), так и очень неплохие клоны (например Coherent, разработчик Mark Williams Company; AT&T думала, не засудить ли их, но Деннис Ритчи посмотрел на их исходники и сказал "они честно всё написали сами").

Проиграли MS-DOS-у и Windows...

Написал(-a) комментарий к произведению Ретро бит [5]

Советский Оливье не всем придётся по вкусу, там по понятным причинам нет свежей зелени или свежих овощей. Калифорнийцы привыкли к свежим продуктам.

Написал(-a) комментарий к произведению Ретро бит [5]

Ещё раз: более короткий код, если в процессоре нет кого-нибудь trace cache, исполняется быстрее. В наше время из-за того, что в L1 I-cache влезет больше. В то время из-за того, что очень короткий буфер instructions queue, при более коротких смещениях процессор меньше простаивает при выборе команд.

Из личного опыта: когда-то я добавил в Visual C++ для x64 оптимизацию, стал в больших функциях использовать rbp как базовый регистр для доступа к локальным переменным, даже если это не нужно (в функции нет alloca() или обработки исключений). Казалось бы, теперь надо спасать и восстанавливать на регистр больше, к тому же меньше регистров доступно для хранения переменных. Но зато теперь к большему количеству переменных можно обращаться с коротким смещением. Windows группа была счастлива, код стал короче и измерения показали что быстрее.

Количество позиций при переборе альфа-бетой растёт как экспонента глубины, 10% там почти что ни о чём. Немного неприятно, не более того. Это тоже из личного опыта. Я, правда, шахматы писал, не шашки.

Написал(-a) комментарий к произведению Ретро бит [5]

У небольших функций с малым количеством переменных есть большое достоинство -- 8-битное смещение в командах, которые используют эти переменные. Каждая команда получается на байт короче. Это весьма заметно на 8088 с его 8-битной шиной, после "быстрых" команд он всё время ждал память. (Если нужны подробности, поищите "8088 prefetch queue").

Разницы между функцией с 5 и 20 скалярными переменными не будет, и для той и для той достаточно 8-битных смещений. А вот если в огромной функции 100 переменных, то плохо. Компиляторы тех лет были глупыми, накладывать переменные с не пересекающимися областями жизни не умели, ровно как и не умели разбивать одну переменную на несколько.

Так что если разбивать огромную функцию на несколько поменьше без фанатизма, то может получиться даже быстрее.

Не говоря о том, что даже замедление на 10% будет непринципиально.

Написал(-a) комментарий к произведению Ретро бит [5]

Пресветарианцы будут рады, что помогают заблудшей душе, католики отнесутся с пониманием, если официально не перешёл, а только посещает службы раз в неделю.

Написал(-a) комментарий к произведению Ретро бит [5]

Epson MX-80 весил 5.5 кг, FX-80 7.5 кг. Добавить пенопласт и коробку, получается чуть больше 10 кг.

Кстати, для MX начиная с 81-го года подавали upgrade, чтобы умел печатать графику.

Написал(-a) комментарий к произведению Ретро бит [5]

Замечание: магазин никогда не примет чек на большую сумму у подозрительного подростка. Надо ехать в ближайшее отделение банка и снять наличные. Ну или заехать в банк по дороге в магазин.

Кстати, после получения прав с новым адресом, следует известить банк о смене адреса, и заказать новую чековую книжку с этим адресом. Если адрес в документах и чековой книжке не совпадает, чек на любую сумму не возьмут.

Написал(-a) комментарий к произведению Ретро бит [5]

Про шашки.

Есть такой профессор, Jonathan Schaeffer. Когда-то он решил, что шахматами занимается толпа, а вот если написать программу для игры в шашки, то конкурентов будет меньше.

Он начал заниматься компьютерными шашками, и с большим удивлением обнаружил, что да, шашечные программы смотрят куда глубже, чем шахматные, но лучшие люди видят ещё дальше. Взгляд на доску, и вердикт "через несколько десятков ходов белым хана".

В конце концов он написал программу, играющую на уровне чемпиона мира. Чемпион сдал матч, так как во время матча у него нашли рак, в этот момент счёт матча был ничейный. Ещё через сколько-то лет Джонатан "решил" шашки -- построил таблицы эндшпилей на 10 фигур, и "дотянулся" поиском из начальной позиции.

Написал про эту историю интересную книгу "One Jump Ahead", не уверен, есть ли перевод на русский.

Подробнее история изложена https://habr.com/ru/articles/373729/

Здесь для сюжета особо сильная программа не нужна, уверен, что та, что уже написана, обыграет 95% людей. 

Наверх Вниз