Pull to refresh

Comments 101

Простите, в отличие от того процессора вообще не понимаю смысла этого языка, он что-то экономит или сделан «по приколу»?
Смысл в том, что язык позволяет работать на обычном «точном» процессоре так, как будто это был бы «неточный» процессор.

www.osp.ru/news/2012/0518/13013168/
UFO just landed and posted this here
Для чего нужны виртуальные машины? Разумеется язык нужен для тестирования алгоритмов при отсутствии необходимого железа.
А если он будет работать на неточном процессоре, то степень неточности вырастет на порядок.
Не факт (без шуток).
Если погрешности разнонаправленные, то точность может и возрасти.
Согласен, вполне возможно
UFO just landed and posted this here
Но для введения такой погрешности в программу, нужно знать, где именно и как неточен процессор.
image

Я вас выровняю, можно?
Аватарка Sterpa наклонена вправо и у неё есть кровь. Ваша — влево, и один глаз подмигивает.
Я вас обоих попытался привести к среднему арифметическому.
Тогда на среднем арифметическом должна быть кровь и один подмигивающий глаз
Ок, в таком случае, это наибольший общий делитель.
Тогда я снова с вами не согласен! -_____-
НОД дал бы одноглазый смайл с вырезом вместо крови :D
Пожалуйста, приведите формальное описание используемых вами правил деления смайлов :)
Как вариант
image

P.S.
Фото значка с обратной стороны не нашел, простите…
Так, предлагаю создать Круг, или блог ;)
«Watchers» или «Who watches the Watchers»
Хотя нет… РАО всех оберет до нитки…
Как раз подумал, что это отличный язык для написания ботов, если искажениями можно управлять.
Название языка как бы намекает.
Так вот ты какой, язык моей мечты.

Ну почему я не узнал об этом в универе?! Вот бы тонкий тролинг препода по методам оптимизации получился.
Думаю, препод бы не оченил тонкости тролинга.

Свел бы к простому «хороший программист и на неточном языке сможет точно описать нужные действия», мол, иди, оптимизируй.
> мол, иди, оптимизируй

По-моему, тема на хороший курсовик потянула бы — получение достаточной точности обработки данных в таких условиях.
Человек-то подумал было, что можно неплохо потролить. А ему, по сути, сказали бы — мол, уважаемый, «работать, работать и еще раз — работать», без нормальной работы зачет не поставлю :)

Так что с такой попытки поиздеваться над преподавателем выиграл бы именно преподаватель — и знания уважаемого spiff, если бы такое задание он сделал бы хорошо и качественно.
Я так полагаю, «неточность» закладывается на уровне компилятора, и может быть также изменена.
Как платформа для тестирования неточных процессов — забавно, возможно практично для создания самих неточных процессоров.
Иного применения для языка не вижу…
Так о том и речь — как платформа для тестирования неточных алгоритмов и вообще — иного подхода к написанию кода.
Но тут тогда нельзя говорить о минимизации обращений к памяти. Выполнение (практически) любой инструкции процессора вызывает обращение к памяти. Даже сама инструкция может быть выполнена с ошибкой. Даже простой может вызвать деструкцию памяти — утечка заряда в ячейке памяти, произвольое срабатывание транзисторного ключа. В чем тогда заключается иной подход?
Я тут наоборот вижу усложнение программного кода, придется реализовывать программные проверки целостности данных, или т.п. Например несколько раз производить одну и туже операцию, и брать результат по выборке (с вероятностью такой-то). Хотя, это можно назвать своеобразным подходом, да…
Сдается мне, что даже в неточном процессоре — не все неточно. Область памяти, где хранится код — должна быть обычная, точная. Иначе можно вообще словить жесткий батхёрт, в т.ч. и зависон. А это уже будет не неточный процессор, а жестко глючащий.
Не факт…
Представьте, что архитектура процессора такова, что он «проглатывает» любую ошибку.
Не знаю, как это реализовать в рамках одного процессора, и возможно ли это…
Но при работе с несколькими запараллеленными ядрами, думаю, вполне возможно — зависшие просто перегружаются. Естественно, код хранится в кеше каждого ядра, многократно.
Думаю, такое нерационально. Одно дело — прочитать из памяти 9.99942 вместо 10.0, а совсем другое вместо «MOV AX, 10» сделать «JMP -100» ;)
Но между «MOV AX, 10» и «JMP -100» у Вас погрешность не 0.05
Я имею в виду, что ошибки могут вкрадываться на бинарном уровне, т.е. из 64 бит 1 может быть ложным. Поэтому у неточных процессов есть показатель точности. Но одна процедура или функция не могут превратиться в другую, это 100% несовпадение, и, следовательно, практически невозможно.
Ээээ… Что? Например, «mov ax, XXXХ» шифруется как «00 ХХ ХХ», а «jmp XXXX» — как «01 ХХ ХХ». Несовпадение 1 бита и вот вам mov превращается в jmp.
Да, был не прав, уже понял…
Кста. Зашел по ссылке на страницу автора. У него есть еще один изотерический язык. Не менее интересный Velato исходным кодом к которому является музыка — MIDI файлы. Помойму — чудесно! Захотел программу — написал песню, скомпилил, искусство :)
Представляю тему на форуме: «Хелп! Людипамагите! Не компилируется программа, ошибка в третьей ноте!»
Вспомнилась шутка про шарпы: «Разница между C и C# — всего-то в пол тона»
эти пол-тона, кстати, очень неприятны для слуха. называется такой интервал «малая секунда». попробуйте нажать на фортепьяно одновременно две соседние клавиши (включая чёрные). или дёрнуть на гитаре пурвую открытую и вторую на 4-м ладу. это я к чему… для музыканта такая штука принимает совсем другой смысл)
С другой стороны в песне «Black Sabbath — Black Sabbath» на этом дизонансе и тритоне всё и строится. По сути сменяются две соседние ноты. Более того, в гамме A# есть что C что С# и звучат вместе тоже ничего)
[grammarNaziMod]диссонанс[/grammarNaziMod]
рифф там G3-G4-C#4 (октава вверх, тритон вниз), и малой секунды там формально нету. Фактически, из-за того, что перегруженная гитара сильно квинтит (усилен третий обертон, отстоящий на квинту через октаву; ударение на последний слог) образуется таки малая секунда.

Кстати, в Cornucopia во вступлении лад (неожиданно) состоит из малой секунды, вписанной в тритон (c# g# g g# g# d d d c# c# d g c#).
рифф там G3-G4-C#4 (октава вверх, тритон вниз)

Послушайте внимательно, риф там G3-G4-C#4-(Hammer-on)D4-(pull-off)C#4-(Hammer-on)D4-(pull-off)

Вот это вот C#4-D4 и есть малая секунда.

В этом уроке www.youtube.com/watch?v=mPkhnZBkp5Q видно, что один раз он теппингом играет легато в малой секунде, а потом действительно просто держит одну ноту.

Спасибо за «диссонанс», чёт я глупо ошибся)
Мои уши воспринимают это как вибрацию.
А если уж приводить пример на м. 2 как резкое звучание, так это первый гитарный звук в Iron Man — точно она :)
Ну уши многих это вообще вопримут как шум, тем не менее там как раз малая секунда)
Кстати, там трель только один раз — первый, а потом просто g-g-cis
Тоже бы не согласился. Сам по себе интервал не может быть приятным или неприятным. Он диссонирующим называется, это да. Но многие сложные музыкальные композиции строятся на диссонансах. Как мне кажется, вообще, отличие попсы от серьезной музыки именно в том и состоит, что автор плюет на принятые ходы (которые избегают диссонансов) и делает то, что ему нравится.

В качестве примера могу порекомендовать послущать еще Liza Gerrard «The mirror pool» — вокалистка Dead Can Dance — она там много где по хроматической гамме гуляет.
по очереди-то да, ничего. но вы их вместе сыграйте, тут-то уши в трубочку и сворачиваются
Да это я знаю, сворачивались :)
Но снова хочу поупрямиться, например в джазе очень много используется септ-нон-и-дальше аккордов, в которых таких интервалов навалом и играются они вместе. И ничего, очень красиво местами получается.

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

Мне просто обидно за полутона, хочу за них заступиться. Я их очень люблю.
Не надо за них заступаться, кто знает, что это такое — тот и сам поймет, а кто не знает — совсем не поймет.
Кстати, 4 малые секунды подряд — это… «К Элизе» ;)
Вот за что я люблю хабр. Заходишь почитать про язык программирования — натыкаешься на отличную музыку ))
Или все начнут компилить Бахов, Моцартов и смотреть что получилось. А бояться надо тех программ, которые получатся из какого-нибудь «trash-power-black-death-metal core».

Думаю Metallica или AC/DC отлично компилиться будет.
Какой нибудь house можно представить как цикл :)
Дабстеп должен скомпилиться в виндовый FoxPro. Жуткая вещь, никогда не знаешь, что от него ждать.
Хороший дабстеп может быть скомпилирован, вполне возможно, в алгоритм сортировки.
У него есть еще один изотерический язык.


Какой-какой язык?
Равночудовищный подозреваю? :)

ἴσος (равный) + τέρας (чудовище)
τέρᾰς, ᾰτος — знамение, чудесная примета, предвестник :-)

чудовище — θήρ, gen. θηρός, или θηρίον
Кстати, (граммар наци включен) мне кажется, правильно писать «эзотерический» — в оппозиции к экзотерическому(граммар наци выключен)
Скорее, грэмэ-интеллигент ;-) Наци не применяют оборота «мне кажется»!
Да что Вы говорите? Никогда бы не подумал!
На сколько я знаю, в нечеткой логике данные не разрушаются, а берутся примерное значение близкое к оригиналу. Тоесть данный язык ну вообще никак не связан ни с нечеткой логикой, а «неточный» процессор, подозреваю, работает по принципу нечеткой логики, а не тупо уничтожает данные после каждого запроса их.
Процессор не уничтожает данные (хотя их запись в кеш и возможна с ошибкой), он производит неточные вычисления, на уровне битов. Должна была быть 1, но транзисторный ключ не открылся, и остался 0. В следующий раз ключ может сработать, поэтому «неточный», а не «испорченный».

Кстати, ноги, думаю растут гораздо глубже, чем просто разработки дешевого процессора небольшим коллективом энтузиастов.
При определенной структуре (схеме) процессора, все отбракованные на конвейере процессоры могут становиться «неточными» и не идти на выброс (или переработку), а находить применение в других процессах.
Для «сами знаете кого» это огромный экономический потенциал.
Да автору просто скучно было, захотелось что-нибудь этакое написать, а вы тут развели в камментах про платформы какие-то. Глупости это, в «неточном процессоре» неточность хоть и случайная, но некоторым образом распределенная величина и нет никаких случайных подергиваний навроде «a = rand() > 0.33? (rand() > 0.66? a++: a--): a».
Более того, она распределена вполне определенно, в соответствии с допустимыми эффектами в связи с убранными из конструкции страховочными элементами.
Это понятно, что случайная, но распределенная определенным образом.
Но, все таки, представьте, чтобы применять такой процессор в ПК, нужно (ну хоть ты тресни), чтобы он был точным. Переписывать системы и софт, чтобы вычисления повторялись многократно, а результат брался по выборке — ну, не вариант.
А как на счет пула (облака) множества дешевых «неточных» процессоров (напр. Армовских), которые в своем облаке работают параллельно и результат аппаратно выбирается по выборке, без участия софта?
Если вероятность ошибки каждого ядра не велика, то на выходе можно получать систему с приемлемой для обычного пользователя точностью.
Но стоимость такого пула-облака? Если учитывать, что неточные процессоры много дешевле и много быстрее (опять же, ресурсы для аппаратной проверки самого себя), то… фантазия стремиться материализоваться в весьма перспективный проект, для «сам знаете кого».
Пул — это когда много. А когда много медленная коммуникация по причине больших линейных размеров. Тут-то и компенсируется большая скорость самого процессора. Не, как концепт-то может быть, но реально пока непонятно, как сделать это выгодным где бы то ни было, кроме генерации случайных чисел.
> На данном примере хорошо видно, как данные постепенно разрушаются. И, следовательно, программисту нужно думать о том, чтобы обращаться к данным как можно меньше.

А что мы делаем в реальной жизни? Делаем копию, дабы не разрушилось все совсем. И проверяем, что данные еще в том состоянии, в котором их можно использовать. Бэкапы например на CD — сделали, а оно со временем рассыпается. Прошло время — еще копию сделали. Потом еще. И так получается сохранять до какого-то момента.

Интересно, можно ли для тех же бутылок, если значение отличается от целого не более, чем на 40%, округлять его, т.о. приводя его к целому, т.е. имитируя реальное восстановление данных? Судя по приведенному примеру, там даже понятия константы нет, раз написанный в кавычках код сам по себе мутирует. Он просто должен был перестать выполняться, а не чепуху выводить на монитор…
Товарищи-комментаторы, Entropy не имеет никакого отношения к неточным процессорам кроме общей подстроки в названии (неточный язык).
Пример с бутылками наглядно демонстрирует разрушение данных, которое просто невозможно при применении неточного процессора, потому что используемые там строковые константы постоянны (да, тавтология, но, судя по всему, многим не очевидно очевидное).
А значит, при выполнении детерминированного варианта этой программы на неточном процессоре ошибки в строках не будут накапливаться, так как последние будут храниться в ОЗУ в неизменном виде.

Так что популярное здесь в комментариях предположение о том, что Entropy сродни эмулятору неточного процессора, в корне неверно. Безусловно, после должного изучения распределений и характеров ошибок неточного процессора можно будет написать такой эмулятор, но у Entropy с ним из общего будет только идея.
Не могли бы вы, в таком случае, привести примеры областей применения программ для неточных процессоров и программ на Entropy? Хотелось бы разобраться на приближённых к жизни примере.
Entropy — это эзотерический язык программирования, и у программ под него областей применения не существует.

Неточный процессор — это обычный процессор, не слишком аккуратно работающий с вещественными числами. Кроме того, я подозреваю, что у них еще и разрядность порезана (для точности в 0,25% 16 бит более чем достаточно). Потому под такой процессор можно скомпилировать любую программу, и в случае с текстовым редактором вы даже не заметите разницы, да и фильм можно будет посмотреть спокойно. А вот 3D-игрушка на таком процессоре не потянет, заглючит намертво.
Да не заглючит. Ну, будут где-то объекты слегка не того размера, где-то текстура «поедет».
Я как-то подсчитывал, что точности типа double достаточно для представления модели Солнечной Системы до Плутона с точностью до метра. Значит, при неточном процессоре в видеокарте, погрешность будет практически незаметна.
Опять же — где ставить такой процессор? Если на пиксельные шейдеры — то проблема минимальна, если на тесселяцию — может быть существенна. Значит часть процессора видеокарты можно заменить на более производительную. Почему бы и нет?
Объект «слегка не того размера» — это может быть дверь, в которую не получится войти. Или нос ГГ при виде от первого лица, вылезший прямо в центр экрана (в некоторых игрушках я видел ноги ГГ, значит и нос должен там где-то быть).

А если «чуть-чуть поедет текстура», на которой нарисована карта перемещений для NPC…
сокращение энергопотребления в 3,5 раза при допуске ошибок всего 0,25%

Для двухметровой двери ошибка позиционирования (на экране, я говорю о неточном процессоре внутри GPU) будет примерно 5мм. По-моему, мои двери более кривые…
Да, но в игрушках любят делать ширину проема впритык. А для проверок допустимости движения зачастую именно GPU и используют
по-моему все, кто так рассуждают, забывают, что с данными еще приходится выполнять некоторые арифметические операции, например:

1 / 0,000001 = 1000000
-
1 / 0,0000010025 = 997506,23..
=
2493,77


так что искажение на 0.25% аргументов (скажем второй аргумент — результат предыдущей арифметической операции) может принести серьезные последствия. конечно, если учитывать это в алгоритмах — проблем не должно быть, но «учитывать» в ряде случаев будет значить «переписывание».
Я уже думал, что никто кроме меня этого не заметит...

Перескажу на всякий случай в двух словах разницу:
В языке Entropy данные искажаются при чтении, в процессоре — при выполнении арифметических действий с плавающей запятой (целочисленная арифметика остается точной)
Результат выполнения программы, написанной неточным программистом на неточном языке программирования, с использованием неточного процессора можно будет определить только с помощью теории вероятности)
и это будет неточная оценка
Ну почему же? Вероятность — точная величина.
она будет точной величиной, только если ее точно вычислить.
а если ее вычислять «с помощью программы, написанной неточным программистом на неточном языке программирования, с использованием неточного процессора» :)
К счастью, нам не нужно рассчитывать вероятность на неточном процессоре с помощью неточной программы. Потому что проще выполнить исходную программу.
UFO just landed and posted this here
Вы изобрели (кажется) новый вид квайна! Ну или я не точно выразился, не квайна…
«Неточные процессоры» полезны для того, чтобы кардинально ускорить производительность и снизить расходы энергии на выполнение некритичных к точности операций.
А какой смысл от этого языка? По-моему что-то из категории брейнфака — весело, но бесполезно.
DRUNK ELIZA: RI! I'M DLIZA. WHAT'S YOUR PROBLCM?
YOU: hi
DRUNL ELIZA: HNW DO YOU DO,-PLFASE STATE YOVR PROBLEM.
YOU: hi
DRUNL ELIZA: PLEASE DON'T REPEAT YOURSELF!
YOU: hi
DRUNL EKIZA: PKEASE DPN'T REQFAT YOURSELF!
YOU: hi
DRUNK EKIZA: PKDDSE DPN'T RFQFAS YOURSELF!
YOU: ok
**** ELIZA HAS CRASHED ****
UFO just landed and posted this here
Я думаю, что для такого языка нужно программировать методом искусственных нейронных сетей. Только вот проблема — сами ИНС надо как-то написать на детерминированном языке.
UFO just landed and posted this here
Я правильно понимаю, что этот ЯП — один большой троллинг от автора языка мировому сообществу? :)
Но ведь выполнение программы это тоже чтение данных — исходного (или скомпилированного) кода. Он тоже должен искажаться при каждом чтении. Тогда будет совсем весело.
Интересно, как будет выглядеть написанная не нем игра «Жизнь».
Интересно, как программист поступит с отрисовкой −0,13847 организма в клеточке поля.
Заметьте, нигде в листингах результатов работы программы про пиво не печаталось число более 99. То есть этот нечеткий язык портит только данные, но не портит логику? Как то это все искусственно.
Забавно.
Интересно попробовать что-то подобное к Java прикрутить с помощью AspectJ — модифицировать возвращаемые методами значения.

Кстати, для одного интересного «недетерминированного» языка программирования esolangs.org/wiki/Thue я когда-то написал интерпретатор — archive.org/details/ThueInJava (да, shameless selfpromotion (-: )
Может кому будет интересен/полезен.
Sign up to leave a comment.

Articles