hitech: (computer)
hitech ([personal profile] hitech) wrote2013-09-24 12:49 pm
Entry tags:

Технический прогресс.

— Я хотел бы приобрести флешку со встроенным MP3-плеером.
— Могу предложить MP3-плеер. Его можно использовать в качестве флешки.
— Нет! Мне нужна большая такая флешка, а в неё встроен MP3-плеер!
Клиент в магазине компьютерных товаров.
Что интересно, такие устройства действительно были.

Samsung анонсировал новый телефон — Galaxy Note 3.

Избранные технические характеристики:
ХарактеристикаВ Samsung Galaxy Note 3В моём старом компе
Разрешение экрана1080 × 1920 пикселей1680 × 1050 пикселей
Камера13 мегапикселей0.3 мегапикселя
Оперативная память3 гигабайта3 гигабайта
Внутренняя память 64 ГБ встроенной и до 64 ГБ расширения.~3 терабайта
Центральный процессор4-ядерный, 2.3 гигагерца2-ядерный, 2.2 гигагерца
Выделенный графический ускорительArdeno 330nVidia GeForce 5200
Сенсорыакселерометр
гироскоп
датчик приближения
компас
барометр
гигрометр
термометр
детектор жестов
Нет

Вплоть до 6 марта этого года я пользовался компьютером, который по всем характеристикам, кроме внутренней памяти, но включая разрешение экрана и графический ускоритель, уступал этому телефону.

Технический прогресс неумолим. Кажется, я совсем недавно вынес на помойку свой первый Pentium 120, — после того, как [livejournal.com profile] shele4ka меня запилила на тему необходимости чистить авгиевы конюшни, называемые кладовкой. На этом Pentium`е крутился Red Hat Linux 6.2 (см. седьмое фото в этом посте) с кастомным ядром; компьютер работал хранилищем данных и раутером, и в нём было два жёстких диска, на 8 и на 40 гигабайт. Хранилище данных, ага. Ещё в какой-то момент жизни мы с Шелей купили три абсолютно одинаковых компьютера — мне, ей и вместо телевизора. Телевизионный накрылся первым, мой сдох сразу после того, как я перенёс с него данные на свежекупленную цацу, а Шелин мы временно включили вместо телевизионного, — и знаете что? Проигрывание фильмов в хорошем качестве ему уже не по силам, изображение дёргается и звук заикается, загрузка двухъядерного процессора при этом держится на 98%. Зато проигрывание таких фильмов по силам нашим планшетникам, Archos 80g9 и iPad. Поэтому сейчас рядом с телевизором лежат Archos и кабель HDMI. Процедура выглядит так: мы хотим посмотреть фильм в хорошем качестве ⇒ включаются телевизионный компьютер и Archos ⇒ по USB фильм перегоняется на планшетку ⇒ планшетка подключается к телевизору через HDMI, и фильм с удовольствием смотрится.

А теперь последовал новый удар. В этом Samsung Galaxy Note 3 всё, кроме ёмкости жёсткого диска, круче, чем в любом из этих трёх компьютеров. Чёрт побери, у нашего 32-дюймового телевизора разрешение экрана ниже, чем у этой 5.7-дюймовой игрушки!

Единственное, что меня обнадёживает, — это что современные программисты привыкли полагаться на невероятную мощь процессоров и на гигантские объёмы памяти, поэтому забыли об экономии байт и тактов процессора. Я же, воспитанный на перфокартах, понимаю, что i++; значительно менее выгодно, чем ++i;. Поэтому, когда технический прогресс упрётся в невозможность сделать транзистор размером меньше отдельного атома, и рост быстродействия техники замедлится, мои программы будут работать чуточку быстрее, чем у конкурентов. По моим оптимистичным прикидкам, момент замедления технического прогресса наступит лет через восемьдесят. Главное — не разучиться программировать до тех пор.

[identity profile] true-lady.livejournal.com 2013-09-24 12:11 pm (UTC)(link)
"Я же, воспитанный на перфокартах, понимаю, что i++; значительно менее выгодно, чем ++i;. "
Я родилась позже перфокарт, не программер а QA и блин откуда то все равно мне эта инфа знакома. Так что...))

[identity profile] ahitech.livejournal.com 2013-09-24 12:18 pm (UTC)(link)
Этот факт, на самом деле, по неочевидности напоминает известный парадокс близнецов. И, подозреваю, большая часть компиляторов умеет при оптимизациях переставлять команды так, чтобы добиваться этого эффекта.

[identity profile] liilliil.livejournal.com 2013-09-26 11:42 am (UTC)(link)
ОСТАНОВИТЕСЬ УЖЕ ЁБАНЫЕ РОГАТЫЕ ТВАРИ!

[identity profile] ahitech.livejournal.com 2013-09-26 11:56 am (UTC)(link)
Да, ты в общих чертах выразил мою мысль.

[identity profile] liilliil.livejournal.com 2013-09-26 12:01 pm (UTC)(link)
а теперь про расскажи про инкременты

[identity profile] ahitech.livejournal.com 2013-09-26 12:08 pm (UTC)(link)
Увы, в данном контексте я могу рассказывать только про экскременты.

[identity profile] liilliil.livejournal.com 2013-09-26 11:15 pm (UTC)(link)
ну а серьёзно? в поисковиках какая-то хуйня про "создание копии"
я всегда считал, что разница только в том, где именно происходит инкремент: перед телом цикла или после него

[identity profile] ahitech.livejournal.com 2013-09-27 01:50 pm (UTC)(link)
Напоминаю, что в случае i++ возвращается оригинальное значение i, а значит, кроме выполнения инкремента, надо создать на стеке копию i и выполнить копирование, после чего увеличить значение i. То есть добавляется лишний шаг копирования оригинального значения i. В случае, когда i это структура с кучей пойнтеров, с определёнными операторами пост-инкремента, пре-инкремента, копирования и присваивания, разница может быть ВЕСЬМА существенной.

[identity profile] liilliil.livejournal.com 2013-09-27 01:59 pm (UTC)(link)
нахуя?

1) ax++ + bx ➡ ADD ax, bx; INC ax
2) ++ax + bx ➡ INC ax; ADD ax, bx

[identity profile] ahitech.livejournal.com 2013-09-27 04:26 pm (UTC)(link)
Ещё раз, медленно: i++ - это вызов постфиксного operator++(T) для объекта. Вернуть эта фукнция должна копию оригинального значения i. При этом сам i меняется. Поэтому оператор operator++(T) обычно реализуется так: создаётся копия (которая в худшем случае может быть deep copy, с копированием всей динамически выделенной памяти), после чего на оригинал вызывается префиксный operator++(), после чего возвращается копия.

Без создания копии operator++(T) нарушает конвенцию языка. Поэтому постфиксный инкремент всегда менее выгоден, чем префиксный, - постфиксный вызывает префиксный и дополняет его созданием копии.

Для простых классов типа int это неважно, потому что компиляторы умные, и приводят код к одной и той же последовательности ассемблерных команд. Но в более сложных случаях префиксный оператор всегда быстрее. А кто сказал, что в цикле for я обязан использовать в качестве счётчика простой класс? И, более того, если была создана deep copy, кто проверит выделенную память и освободит её?

[identity profile] liilliil.livejournal.com 2013-09-27 04:43 pm (UTC)(link)
ты на мой вопрос ответь сначала чем городить огород непонятных слов
там НЕ нужна копия. инкремент делается либо до, либо после. всё

[identity profile] ahitech.livejournal.com 2013-09-27 05:01 pm (UTC)(link)
Копия нужна всегда, ибо всегда возвращается.

section .text
global _start
_start:

; ++a
mov ax, a
inc ax
mov a, ax

; b++
mov ax, b
mov bx, ax
inc bx
mov b, bx
; По конвенции, возвращаемое значение всегда в регистре ax

mov ax, 4C00h ; Выход
int 21h

section .data
a dw 1
b dw 1

Налицо одна лишняя инструкция. И то я использую mov bx, ax вместо mov bx, b, как можно было бы сделать, и чьё быстродействие примерно в 300 раз хуже.
Edited 2013-09-27 17:01 (UTC)