Category: компьютеры

Category was added automatically. Read all entries about "компьютеры".

ДР Цертуса 2011

(no subject)

Настоящим объявляю, что все мои персональные данные, тексты, фотографии, рисунки, переписка и т.п. являются объектами моего авторского права (согласно Бернской Конвенции), и оповещаю «ЖЖ» (LiveJournal, Inc / SUP Media) о том, что разглашение, копирование, распространение моей личной информации в коммерческих целях равно как и любые другие противоправные действия по отношению к моему профилю в социальной сети строго запрещены.

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

Гёттинген
17 января 2015 г.
Александр Куклев
ДР Цертуса 2011

1 TB

Оказывается, с мая сего года есть наконец microSD-карты на 1TB. А Everspin буквально на днях начала производство гигабитных DDR4 чипов STT MRAM (энергонезависимой и очень быстрой памяти).
ДР Цертуса 2011

“Услышь меня, машина” – через 22 года

Как-то зимой 1997-1998 года я зачитался журналом Компьютерра — декабрьским выпуском, посвященным распознованию речи. Особенно меня впечатлила статья Вячеслава Алексеева “Услышь меня, машина” (https://old.computerra.ru/193754/), где рассказывалось, что оказывается можно при помощи датчиков да элеткродиков распознавать внутреннюю речь человека, внутренний монолог. Вот он, убивца кливиатур, подумал тогда я!

Ну в самом деле, когда мы печатаем, мы ведь всегда “про себя” произносим, что печатаем. А тут можно то же самое, только без необходимости тыкать по кнопкам, и, главное, годами тренероваться тыкать по кнопкам с приличной скоростью. Процитирую кусочек статьи полностью: «Появлялись в печати и сообщения о работах по озвучиванию "внутренней речи". На лицевые и другие артикулирующие мышцы испытуемого прикреплялись датчики электрической активности, подключенные к компьютеру. Испытуемый произносил тестовые звуки и слова, а компьютер снимал показания датчиков и строил базу данных образцов, то есть "обучался". Впоследствии, благодаря накопленным данным, программа могла печатать или синтезировать произносимые вслух слова.

Самое поразительное заключается в том, что если увеличить чувствительность датчиков, то они давали аналогичные сигналы и при речи “про себя”. Оказалось, что если думать словами, то на артикулирующие мышцы тоже поступают слабые сигналы возбуждения, аналогичные речевым. Конечно, "подслушать" удавалось только мысли в форме "внутренней речи", составляющей, как выяснилось, далеко не полную картину мышления. Да и то, по отзывам разработчиков, наблюдалась дикая мешанина из обрывков фраз.»

С тех пор (на самом деле, в самое недавнее время) распознание речи скакнуло вмерёд очень качественно, и вот уже я сам надиковываю списки покупок своему смартфону, а он переводит их в текст, так чтобы удобно было пользоваться в магазине. Но аппарата с электродиком всё не появлялось. Что-то мелькало в новостях науки, но потом пропадало. Я как-то выяснил, что первые исследования и первые устройства были задолго до 1997 года (надо поискать, я писал об это много лет назад в ЖЖ), но устройства были громоздки и непрактичны для повседневного использования. А сегодня в ленте попался вот такой прототипчик:
https://www.cnet.com/videos/mit-prototype-can-sense-words-youre-about-to-say/

Страница проекта: https://www.media.mit.edu/projects/alterego/, “AlterEgo is a non-invasive, wearable, peripheral neural interface that allows humans to converse in natural language with machines, artificial intelligence assistants, services, and other people without any voice—without opening their mouth, and without externally observable movements—simply by articulating words internally. The feedback to the user is given through audio, via bone conduction, without disrupting the user's usual auditory perception, and making the interface closed-loop.”
ДР Цертуса 2011

The future is now

Ну что, Lexar показал таки SD-карточку на 1TB и ещё в октябре microSD на 512GB. Естественный вопрос — куда всё это девать*. Но µLED и µOLED на низком старте/на марше, поэтому голографические телевизоры не за горами, а там как раз такие объёмы хранить и понадобится.

А ещё в конце сентября nVidia выпустила архитектуру “видеокарт”, с выделенными подпроцессорами для рейтрейсинга. Утверждается, что впервые в истории на массовых устройствах станет возможен real time ray-tracing — хотя, конечно, не для замены традиционного рендеринга, а для его уточнения с целью получения фотореалистичных деталей (теней, отражений, прозрачных и светящихся материалов, пламени, рассеяния на дыме, облаках, волосах, коже).

_____
* Ну, конечно, понятно, что природная лень программистов и естественное желание их начальства не тратить на оптимизацию ресурсы, которые можно потратить на более быстрый выход продукта на рынок, приведут к тому, что программы и веб-сайты станут жрать совершенно бессмысленно ещё раз в десять больше места. Но я не о том.
ДР Цертуса 2011

Exact arithmetics: Integers and Reals (and “48 bits should be enough” ☺)

Вот почитаешь «Software disenchantment» Тонского, и сразу хочется вернуться к дизайну компьютерных архитектур времён суперкомпьютеров CDC 3000 Сеймура Крэя или Лебедевскомого БЭСМ-6, где в самом деле считали сколько чего нужно, а не разбрасывались ресурсами попусту.

Вот например для кодирования указателей, целых чисел и чисел с плавающей запятой стандартной точности там использовалось по 48 бит, очень приятная длина машинного слова. Было понятно, что 32 бита — это слишком мало, а 64 бита — избыточно для большинства применений.

Я вообще большой поклонник машинной арифметика с fallback'ами, без overflow/underflow. То есть, если результат какого-то вычисления не влезает в машинное слово, в то место, куда надо положить результат, вписывается 0b10...0 (со значением “не влезло на полях, смотрите в сносках”), а настоящее вычисление производится при помощи библиотеки арифметики произвольной точности (“bignum”) и записывается в специальную “таблицу сносок” в отдельном месте памяти, в виде записи “по адресу 0x348973794893 не влезло число, вот оно: 12164510 0408832000”. Ну и соответственно, всё это работает прозрачно: если запустилась какая-то машинная арифметическая операция, а операнд оказался 0b10...0, то вместо машинной операции запускается fallback из bignum-библиотеки, и так далее. При таком подходе понятно как оценивать, какая нужна длина машинного слова: нужно, чтобы на практике необходимость вызывать fallback'и была очень, очень редка, потому что они работают в тысячи и тысячи раз медленнее, чем встроенные операции. Но с другой стороны, каждый лишний бит в машинном слове означает, что встроенная арифметика будет медленнее, транспорт из памяти будет медленнее и в кеши (каждого уровня) будет влезать меньше полезного, чем могло бы. Исходя из этих соображений 48 — очень хороший компромисс.

Кроме того, это хороший компромисс и для чисел с плавающей запятой. 24, 48 и 96 битов для чисел с правой запятой — это гораздо более адекватные стандарты для low-precision real, standard-precision real и high-precision real, чем 16, 32 и 64.

Кстати, в этой области есть интересные недавние подвижки. На смену стандартным IEEE-754 floats предложили новую систему Posit, которая
(а) отказывается от всех этих +0, -1, бесконечностей и NaNов в пользу единственного зарезирвированного значения (на побитовом уровне, кстати, кодируемого тем же самым 0b10...0), которое сигнализирует, что результат операции не является вещественным числом, а чем он конкретно является нужно трактовать по контексту; а в случае когда происходит операция с непонятным результатом, предлагается чтобы случался трап (recoverable exception) и программист сам решал, чего там делать.
(b) использует побитовое кодирование, которое позволяет сравнивать вещественные числа при помощи обычных целочисленных операций сравнения
(c) более разумно распределяет представимые числа по вещественному лучу (плотнее вокруг 1 и 0 и без аномалии с subnormals), что приводит к немножко меньшей потере точности на типовых арифметических операциях и очень хорошей дискретизации сигмоидных функций,
(d) система очень дружественна к операции FUSED ACCUMULATE-MULTIPLY — это такая операция с использованием промежуточного “регистра” большого размера, позволяющая вычислять точное (т.е. без промежуточных округлений) произведение матриц. Это операция является краеугольным камнем всех вычислений высокой точности на числах с плавающей запятой.

Автор системы Джон Густафсон прежде экспериментировал с очень неортодоксальными системами представления чисел с плавающей запятой, но потом внял суровой критике Вэлвла Кагана (основного разработчика IEEE-754, 85-летнего корифея и мастадонта в этой области), и придумал достаточно скромно отклоняющуюся от IEEE-754 систему Posit. Отсутствие всяких NaN'ов с бесконечностями имеет недостатки для SIMD-вычислений, где “ignore and calculate as if it works” (т.е. графика в компьютерных играх), но если требуется предсказуемость вычислений (все остальные случаи), то подход Posit лучше — либо пусть программист заранее проставит флаги, что делать если случилось какое-нибудь деление на ноль или корень из отрицательного, либо пусть ловит эксепшн и решает проблему по-существу.

В интервальной арифметике на позитах “особое значение” в качестве левой границы интерпретируется как -∞, а правой — как +∞. Поэтому в интервальной арифметики восстанавливаются все ценные фичи IEEE-754 (в т.ч. algebraic integrity) и даже больше. IEEE-754«+∞» = (MAX_POS_VALUE, 0b10...0), IEEE-754«-∞» = (0b10...0, MIN_NEG_VALUE), IEEE-754«+0» = (0, MIN_POS_VALUE), IEEE-754«-0» = (MAX_NEG_VALUE, 0).

Надеюсь, когда-нибудь мы доживём и до того, что компьютеры будут на уровне железа поддерживать хорошую интервальную арифметику, чтобы можно было прогнать числомолотилку и получить “обоснованную догадку” (именно это, кстати, и значит слово «posit»), а жесткую вилку, в пределах которой обязан быть результат. Густафсон в общем именно этим сейчас и занимается, насколько я понимаю. Он известен тем, что предложил подход к интервальной арифметике, базирующийся не на замкнутых конечных интервалах, а на связных подмножествах проективной вещественной прямой ℝ̂, получилось очень элегантно — даже корифей и мастадонт интервальной арифметики Ульрих Кулиш (по забавному стечению обстоятельств тоже 85-летний) был крайне впечатлён и отметил, что стандарт интервальной арифметики IEEE-1788, который Кулиш несколько лет разрабатывал с ещё несколькими десятками специалистов, благодаря работам Густафсона устарел ещё до принятия.

В ближайшие годы несомненно будут доделаны языки программирования, поддерживающие точную вещественную арифметику (я к этому имею прямое отношение) в том смысле, что на них можно будет задавать манипуляции над вещественными числами произвольной сложности таким образом, что сколь угодно малая погрешность на выходе будет теоретически достижима, если обеспечить достаточно малую погрешность на входе (что для вычислений ab inito выполнено автоматически) и достаточное количество вычислительных ресурсов (а вот с этим будет проблема). Несомненно также и то, что применительно к инженерным задачам (от моделирования балки до симуляции плазмы) вычресурсов для применения точной арифметики не будет хватать на порядки, и смысл записи решения в терминах вещественной арифметики тут будет не в том, чтобы “запустить и оно посчитало само”, но в том, чтобы иметь работающий потенциально эталон (и слишком тяжеловесный для регулярного практического использования), на который неточным вычислительным алгоритмам можно равняться. Равняться можно в том смысле, что “один разок можно по-честному прогнать на суперкомпьютере за 2-3 месяца” и посмотреть, насколько точный результат отличается от приблизительного, который вычисляется за 2-3 секунды. Но гораздо более важна возможность равняться в смысле возможности писать математические доказательства того, что приблизительные алгоритмы сходятся, стабильны, гарантируют с такой-то вероятностью погрешность в таких-то пределах, и т.д. И для этого нам нужно кроме точных вычислений иметь формальную модель вычислений приближенных, соответствующую фактической модели, реализованной в процессоре. И в качестве таковой интервальные вычисления, капсулирующие проблематику промежуточных округлений, подходят гораздо больше, чем просто вычисления с плавающей запятой по IEEE-754, где эффект округлений хоть и сбалансирован, но абсолютно непредсказуем. Для интервальных вычислений про некоторые алгоритмы можно доказать строгие гарантии — точный результат отличается от приближенного, не более чем на столько-то. Про IEEE-754 такого шанса нет вообще, там любые гарантии могут быть только статистическими.
ДР Цертуса 2011

О когерентности и унивалентности

Если лектор сообщает некий факт, скажем, “земля круглая” целой аудитории людей, то каждый человек в зале получает информацию о том, что
– Земля круглая
– Все присутствующие в зале знают, что земля круглая.
– Все присутствующие в зале знают, что все присутствующие в зале знают, что земля круглая.
– Все присутствующие в зале знают, что все присутствующие в зале знают, что все присутствующие в зале знают, что земля круглая.
·
·
·

В целом это бесконечная башня фактов, но она вся порождается тем фактом, что “земля круглая” было сказано всем людям в аудитории разом во всеуслышанье. В некоторых разделах математики очень часто приходится конструировать одну башню фактов из семейства других башен фактов. Это можно делать путём выстраивания сложных комбинаторных конструкций (“n-ный уровень результирующей башни получается путём такого-то комбинирования таких-то диапазонов уровней таких-то других башен”) и доказательства их корректности по индукции (такие доказательства имеют тенденцию очень часто содержать очень сложно-выявляемые ошибки, поэтому их хочется уметь проверять на компьютере). А можно иногда найти остроумную конструкцию, которая выдаёт все уровни башни автоматически, по построению.

Гомотопическая теория типов — это как раз система, пользующаяся тем что там все башенки возникают по построению из одного удачного постулата (аксиомы унивалентности Воекодского), которую можно использовать для того, чтобы верифицировать математические доказательства на компьютере, и в первую очередь это как раз нужно именно для доказательств про башенки.
ДР Цертуса 2011

Ray tracing

А вот интересно, в связи с тем что GPU (и GPGPU) у нас на большом взлёте (частично благодаря биткойнам, хехе), может уже научились существенно ускорять при их помощи рейтрейсинг?

Вообще конечно рейтрейсинг гораздо более симпатичная технология, чем растеризация треугольничков. И возможности несравнимы: только при помощи рейтрейсинга можно получить преломление света, каустики, фотореалистичные блики, отражения и тени. Однако если мы хотим показывать в реальном времени 3D в высоком разрешении, то у чистого рейтрейсинга нет шансов.
В зависимости от размера экрана нужно генерировать от 5 до 8 мегапикселей, причём с хорошим anti-aliasing'ом. Если это делать топорным рейтрейсингом и хотеть global illumination, то лучше сразу застрелиться: для этого понадобится протрейсить миллиарды фотонов.
У самого продвинутого компьютера, который ещё влезает под стол вместе с системой охлаждения на один кадр уйдёт не меньше месяца. Умные техники рейтрейсинга дают выигрыш примерно на порядок, т.е. порядка трёх дней на кадр. А надо 60 раз в секунду. Зазор примерно 6 порядков — в миллион раз.

Рейтрейсеры на GPU (вроде как получается в пару раз быстрее, чем на CPU, но точно не на порядок) точно появились, см. https://developer.nvidia.com/optix.
И ещё есть мощный прорыв по части убирания шума и умной интерполяции на недостаточно засвеченных изображениях (т.е. можно выпустить в тысячу раз меньше лучей и получить примерно тот же эффект) при помощи нейросеток (recurrent autoencoder), см. https://youtu.be/YjjTPV2pXY0 и оригинальную статью http://research.nvidia.com/sites/default/files/publications/dnn_denoise_author.pdf (“Interactive Reconstruction of Monte Carlo Image Sequences using a Recurrent Denoising Autoencoder”, SIGGRAPH 2017)

Всё вместе это даёт потенциал для ускорения скажем на 4 порядка. Осталось ускориться ещё в 100 раз.

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

Кто-нибудь знает, как с обстоят дела с гибридными алгоритмами?
ДР Цертуса 2011

Форм-фактор материнской платы: дожили

Последний раз, когда я вручную собирал компьютер, это был компьютер с материнской платой ATX, то есть размером 30x24 сантиметра, до того был AT, 35x30. И туда не входила память и всякие необходимые платы расширения, равно как и слоты для жесткого диска.

Потом уже без меня прошли microATX (24x24), Mini-ITX (17х17), Nano-ITX (170x170)..

А сейчас вышла Raspbery PI Zero: 6.5х3 сантиметра, и слот для жесктого диска (в виде microSD) уже учтён, основные порты торчат готовые к использованию. На самом деле можно ещё меньше, можно 5х3 сантиметра. Ширина в 6.5 диктуется желанием разместить отверстия под крепёж вокруг 40-ножной GPIO-гребёнки, если этого не делать, получается в точности 5х3, см. http://www.armdevs.com/WiFiG25.html.

Впрочем, в Raspberry PI Zero поражает не столько это, сколько цена в 5 долларов за полнофункциональную материнскую плату.

* * *

А каков предел по высоте?

Если закладываться на то, что порты достаточные для подключения монитора (т.е. либо HDMI, либо USB-C) должны торчать из платы, то получается что минимальная высота это как раз высота гнезда USB-C, то есть 2.85. Можно использовать mid-mount разъёмы, тогда к этому не нужно добавлять толщину самой платы, они очень удачно скрадывают 1.6мм толщины платы, вылезая сверху ровно на 1.25мм, что составляет в точности высоту SMD-разъема под microSD-карту. То есть по высоте можно уложиться в 3мм.

Разве что по высоте не достигнут предел: оно 5 миллиметров по высоте, а если использовать USB-C mid mount connectors можно добиться 3 мм по высоте.

* * *

Интересно, когда выйдет первый смартфон в форм-факторе кредитной карты?
ДР Цертуса 2011

О системах контроля версий

Очень часто мне хочется иметь "контроль версий" для одного файла. Я даже когда-то я даже сделал себе такую систему на коленке хуками в редакторе.

Хуки были следующие:
— при открытии произвольного текстового файла anyname, скрипты создавали (если его ещё не было) каталог anyname~ и в нём файл history и подкаталог archived_versions.
– на сочетание клавишь Ctrl+S я повесил скрипт, который предлагал скинуть текущую версию в архив. Сразу в момент нажатия он аппендил в history строку "Version tagged {Timestamp}-{ContentHash}",
клонировал содержимое редактируемого файла в anyname~/archived_versions/{$USERNAME}/{Timestamp}-{ContentHash}, и предлагал пользователю "short description of changes or version tag", после чего переименовывал файл в {Timestamp}-{ContentHash}-{description/tag}.
– хук, который следил за действиями над текстом в редакторе: при каждом переходе от вводящих текст действий к удаляющим текст действиям, и наоборот, генерился diff относительно предыдущей версии и заносился вместе с таймстемпом и юзернеймом редактирующего в history. Дополнительные диффы заносились по таймеру. Т.е. после каждого сохранения чего-либо в хистори ставился timeout на 5 секунд, если за эти 5 секунд нового diff'а в хистори не появилось, надо проверить изменился ли файл, и, если да, скинуть туда новый diff и снова поставить пятисекундный таймер. Это обеспечивало занесение в файл history действительно истории файла достаточной для любых undo-действий, условие про пять секунд гарантировало гранулярность, условие про фиксацию всех переходов с ввода на удаление, гарантировало что введённый и быстро стёртый текст не пропадёт, даже если ввод-удаление попали в пятисекундное окошко.
Я очень бы хотел, чтобы оно работало так же для нетекстовых файлов: для экселевских таблиц и паўерпойнтовских слайдшоу, для картинок из графического редактора, для всех штук где "self contained project" это не дерево каталогов, а один файл. (Впрочем, ничего не мешает self contained project'у "приветственная картинка" быть частью бОльшего проекта "игра компьютерная Х".)

Я до сих пор считаю, что такой подход к контролю за изменениями в одном файле (возможно, редактируемом несколькими людьми в коллаборативном редакторе вроде google docs, но физически находящимся на одном компьютере) очень близок к оптимуму. Архивирование версий это то, чем должно быть досовское "сохранение файла", а история изменений должна содержать всю undo-history (чтобы ни буква написанного текста/кода, не была удалена безвозвратно) с привязкой к чекпойнтам сохранённых версий. То, что сейчас всякий git хранит историю таких вот "архиваций" файла без привязки к undo history мне неудобно. Впрочем, git это вообще не file level, а folder level VCS, так что это о другом.

Наличие File level versioning как описано выше, очень удобно для работы с файлом в одиночку, либо группой вместе (simultaneously, not concurrently), но совершенно не отменяет потребности в том, чтобы для произведения крупных изменений в файле не мешая другим, нужно бывает этот файл сбренчить, а потом, когда будет готово, мержнуть назад/зафайлить пулл-реквест.

Если б я был султан, я б git расширил: позволил бы навешивать git не только на каталоги (с хранением служебной информации в подкаталоге .git), но и на отдельные файлы (с хранением служебной информации в filename~) и добавил бы туда функционал по треккингу undo-history для поддерживающих это дело редакторов. И добавил бы туда возможность мерджинга ветвей-кузенов при помощи patch reordering, как в darcs camp.

Не могу представить, что бы мне ещё было нужно от системы контроля версий, окромя, конечно, идеального визуального интерфейса, и высокой скорости работы с проектами любого размера.
ДР Цертуса 2011

А мир-то меняется!

Четыре дня назад DARPA показала первый компьютерный чип, работающий на частоте 1 ТГц: http://www.extremetech.com/extreme/193343-darpa-creates-first-1thz-computer-chip-earns-guinness-world-record!

Но конечно процессор так не сделаешь, потому что слишком высоки тепловые потери внутри выч.блоков, а они растут как минимум пропорционально тактовой частоте, то есть если оно на 3 ГГц генерит 25 ватт тепла, то на 1 ТГц оно будет генерить под 10 киловатт, столько рассеивать просто нереально. Так вот оказывается, в августе была статейка в Нейчур на эту тему, которую я пропустил (хотя reversible computing одна из моих любимых тем).

Оказывается народ уже вычислительные блоки на сверхпроводниках делает, у которых диссипация энергии внутри выч.единицы на бит оказывается вдвое ниже предела Ландауера для стирания одного бита (потому как используются обратимые логические элементы): http://www.nature.com/srep/2014/140815/srep06354/full/srep06354.html

Там тепловые потери составляют 2E−23 Джоуля на бит на цикл, представляете? Это процессор с мощными ALU и десятками ядер, работающий на терагерцевой частоте имеет суммарные тепловые потери в объёме заведомо меньше одного ватта, и ещё пару ватт с краю (куда выводятся ненужные концы).

Пока оно конечно требует охлаждения жидким гелием и плохо масштабируется, но лиха беда начало! Сделанный таким образом full adder уже затестили на тактовой частоте порядка 5 ГГц и он работает.