Как стать автором
Обновить

Комментарии 50

Спасибо, с нетерпением ждал продолжения!
Интересно получается, что самые прогрессивные люди — это вот такие дедки. Парадокс.
Почему парадокс-то? У него есть опыт глобальных разаботок, у молодежи — нет.
Другое дело что когда что-то долго делаешь сам, то потом порой тяжело взглянуть на это под другим ракурсом. Иэто может вылиться в догматизм. Люди с острым умом и восприятием действительности этого могут избежать. Я рад за Бабяна — он не просто интересно жил, он интересно живет)
Они не самые прогрессивные. Они самые «оторванные от жизни». Они ещё помнят времена, когда можно было, грубо говоря, решать — расстояние между рельсами будет 1435 мм, 1520 мм или аж прямо 1676 мм. И они реально это делали.

И когда они видят, что выбранная когда-то колея страшно тормозит движение составов они предлагают «простое и естественное» решение: изменить колею. Ну, скажем, сделать три рельса.

Люди же помоложе отлично понимают, что никто уже никогда колею менять не будет. То есть можно перейти от 1435 мм к 1520 мм или наоброт, но три рельса могут быть только на выставке или где-нибудь в карьере.
но три рельса могут быть только на выставке или где-нибудь в карьере
… и если они там приживутся и дадут большой прирост эффективности, то мне почему-то кажется, что со временем они станут использоваться всё шире и шире, и в конце концов войдут в повседневную жизнь.
Вы абсолютно правы (массивно-параллельные вычисления пришли в нашу жизнь через компьютерные игры, не так ли?), но Бабаян как бы даже не пытается задуматься на тему — а в какой бы такой карьер наши новые изобретения пристроить. Он всегда изобретает «новые рельсы для всех» и потом пытается всем объяснить что все пидорасы, а он один — д’Артаньян потому что смог «спалить» ещё сколько-то миллионов долларов, но его «гениальнейшие» изобретения все проигнорировали. Смешно просто.
Есть большая разница. Он предлагает не архитектуру, сулящую выгоду в некоторых частных случаях(как те же явно параллельные видео ускорители, которые адаптировали для смежных задач), а радикальное изменение подхода для вычислительных ядер общего назначения. Поэтому искать нишу по сути не его забота, у Intel полно людей. Другое дело можно было бы поискать общие задачи, где такой переход дает больший выигрыш, чем в среднем, но это отдельная история.
А коле именяются регулярно…
Локальная память, отсутствие кэшей — и программы общего назначения? Ну-ну. Удачи товарищу.

Вы на его «идеальную машину» посмотрите. Она подразумевает что программы для неё пишутся сугубо на специальном языке с явной параллельностью, причем он даже не в состоянии назвать как этот язык должен выглядеть ибо «над этим еще надо поработать».
В том то и дело, что программы пишутся как есть. Язык просто не мешает компилятору и железу распараллеливать граф вычислений. Язык судя по всему напоминает современные функциональные, возможно тот же Хаскель. Просто нужно еще промежуточное представление(аля сжатие) и железо-ориентированный компилятор. Возможно, часть работы современного компилятора мог бы делать и сам процессор аппаратно.

Локальная память, как я понял, это и есть замена кэшу, а может даже и регистрам. По сути это кэш L1 для данных, который не синхронизируется с остальными т.е. синхронизация только явная на основании анализа алгоритма.
Языка у Бабаяна нет, ни в каком виде. И предсказать сколько параллелизма он сумеет извлечь — невозможно. Функциональные языки типа Хаскеля, например, параллелят программу далеко не идеально. Программы на языке с высоким параллелизмом, «удобны» не только для бабаяновского компилятора — компилятор для «обычных суперскаляров» прекрасно себе способен использовать информацию о параллелизме для создания более быстрого и эффективного кода а следовательно при прочих равных подобная программа будет работать быстрее и на суперскаляре. Но вот только что-то Хаскель для высокопроизводительных вычислений не используется — странно, правда? А дело в том содержащейся в нем информации о параллелизме недостаточно чтобы автоматически создать код, который обогнал бы «линейную», но оптимизированную вручную программу (причем без каких-то особо фантастически сложных оптимизаций). С чего вдруг ситуация для бабаяновского процессора окажется иной? А ведь есть еще вопрос о том, насколько легко и быстро на этом языке будет создавать программы, поскольку в подавляющем большинстве случаев немного более медленная программа будет предпочтительнее втрое более дорогой в разработке быстрой — посмотрите за примерами на ту же Java. Так что вопрос языка важен. А Вы им пренебрегаете.
Колея меняется регулярно и потому сейчас идёт выбор между тем, что «придумал на коленке» Intel в 1978 году и тем, что придумал Acorn в 1985м?

Вам самому-то не смешно?

В том-то и дело, что моменты когда колея может быть сменены не редки, а исключительно редки: это можно сделать только тогда, когда «открывается» какая-то новая ниша. И количество людей у Intel'а тут ничего не изменит. Ну разве что позволит «спалить» вместо пары миллионов долларов пару сотен миллионов, но практическая-то разница какая?
Нет, совершенно не смешно. Я говорю даже не про колею применительно к архитектуре CPU, а в целом к любой области знания и технологии. История вычислительных устройств пока слишком молода. Еще даже одно поколение не сменилось. Чтобы поменять колею, как правило, нужна как минимум смена одного поколения людей, то есть около 50 лет. И я почти уверен, что в ближайшие лет 10 возникнет вторая колея, которая станет основной еще через лет 10-15. Дело не в нише. Революции случаются как правило по более глобальным причинам. Одна из таких причин в данном случае — больше половины площади CPU занимают костыли, эмулирующие поведение машин 60х годов разработки. А значит, теоретически, можно сделать вычислительное устройство до 2х раз быстрее только поменяв подход. И, поскольку развитие полоупроводниковых технлогий замедлется, это может стать единственным реальным выходом. И именнопо этому рельсы скоро поменяются.
Как раз ничего удивительного. Знания и опыт — как раз у них. И, что немаловажно, у них же есть нюх и интуиция, отполированные годами поисков. Побольше бы таких — и побольше бы им учеников!
Спасибо! Поправил. В тексте удивительным образом чередовались оба варианта. Подсознательная тяга к риску? :)
Все нынешние языки высокого уровня на две группы можно поделить: в одну входят языки типа Java, в другую – типа C. Java – это строгий контроль типов, но очень неэффективный. И динамики там нет. Никто даже не думает на Java операционную систему писать.


Как бы сказать, чтобы не обидеть… Был у нас преподаватель с кафедры ЭВМ, лет 70-десяти. Очень хороший человек. Так вот, когда он рассказывал нам про сканер (устройство такое), начинал он так: «Сканер — это такое устройство на чугунной станине, к станине прикреплена штанга, по которой ездит камера ...»

Собственно по цитате два вопроса:

1. Куда делся (скажем) Haskell?
2. Как быть с Android-ом?
А что не так со сканером? Подумаешь заменили чугуний пластиком — точность даже понизилась из-за вибраций.
По чугунию, в общем-то, вопросов нет, все нормально, дедок старый.
Но за Haskell и Java немного обидно
Не знаю, за что вам ставят минусы, но на всякий случай компенсировал.
Спасибо
Не совсем понимаю, как именно вы восприняли этот фрагмент, но основная мысль такова (по Бабаяну): язык высокого уровня должен иметь адекватную аппаратную поддержку. Я думал, эта мысль проглядывается через весь текст. Возможно, я где-то не доработал.

В указанном смысле можете приписать Хаскель рядом с Джавой. Сути бабаяновской позиции это не изменит.
Попробую расшифровать как я понял цитату:

Все нынешние языки высокого уровня на две группы можно поделить: в одну входят языки типа Java, в другую – типа C

1. Не совсем понятно, по какому критерию деление?

a) статическая/динамическая типизация?
б) JIT/Native компилятор?
в) присутствие/отсутствие адекватной аппаратной поддержки?
г) высокого/низкого уровня???

2. На мой взгляд, деление всех современных языков всего на два класса, по любому критерию, получается каким-то слишком грубым

Никто даже не думает на Java операционную систему писать.

Людям еще и не то в голову приходит. Не стоит вот так вот категорично

Деление очень простое: языки, гарантирующие (в каком-то смысле), безопасность и универсальные языки, на которых можно написать нечто «живущее» (в каком-то смысле) прямо на железе.

Все современные «высокоуровневые» языки (Java, Haskell, etc) предполагают наличие некоей «основы», которую на них самих написать (и скомпилировать в машинные коды) не получится. Все «универсальные» языки (C, Forth, Pascal, etc) позволяют написать функцию, которая, будучи вставлена в отлаженную и безошибочную программу её уничтожит.

Есть даже языки, которые могут работать в обоих режимах (скажем Ada), но… не одновременно. А Бабаян указывает на то, что это — не случайность, это вызвано особенностями современного состояния железа.
Людям еще и не то в голову приходит. Не стоит вот так вот категорично
+1. Первым же запросом в гугл нашёл три операционных системы на Java в первых результатах выдачи.
Если бы вы не просто посмотрели сниппеты гугла, а разобрались, то обнаружили бы, что во всех них есть сишное или ассемблерное ядро. Сюрприз-сюрприз!
Еще поясню: на java везде написан юзерспейс. Где-то его больше, где-то меньше, но всегда есть ядро, которое не на java, и не потому, что даже производительность, а просто на java его написать невозможно. Именно это подразумевается в статье под неуниверсалиным языком программирования.
Что вы имеете в виду под «невозможно»? Java — это язык программирования (т.е. набор синтаксических конструкций), а не конкретная реализация среды исполнения или компилятора. Да, этот язык спроектирован таким образом, чтобы для него можно было написать удобную и быструю виртуальную машину. Однако, во-первых, ничто не запрещает вам создать компилируемую реализацию Java. А во-вторых, ничто не мешает вам создать виртуальную машину, работающую без ОС — и уже на ней запускать всю ОС, включая ядро. Более того, даже вполне возможно написать саму виртуальную машину на Java. Конкретно для Java я таких примеров не скажу (потому что это было никому не надо), но могу привести в пример Smalltalk, который даже сильнее завязан на виртуальную машину, и в котором даже нету примитивных типов. Так вот, есть реализации Smalltalk, в котором виртуальная машина писалась на самом Smalltalk (а потом, естественно, компилировалась в машинные коды).

Так что никакой «невозможности» в этом нет, это исключительно ментальное ограничение. Другое дело, что на Java писать ОС очень _неудобно_, и _лучше_ для этого подходят другие языки (которые, в частности, специально проектировались для того, чтобы писать ОС — сюрприз-сюрприз).
Под «невозможно» я имею ввиду именно невозможно. Дело даже не в интерпритируемости. Дело в высокоуровневости и безопасности. Грубо говоря, нет указателей. Нет работы с машиной напрямую. Много чего нет.
А ваша «виртуальная машина, работающая без ОС» будет написана на си и заменять ядро той самой ос :)
Про смолтолк не скажу, языка не знаю.
На счет поддержки в железе, не стоит забывать про Jazelle, которая что-то не сильно большое распространение получила.
хаскель можно отнести к классу java, поскольку эффективность программы определяется оптимизацией при компиляции и сложная абстрактная программа будет медлнее аналогичной на С.
и это печально, и безысходно.
Это ничего, что Haskell — компилятор?
А я думал, что это Haskell — это язык программирования
из последних статей что я тут видел код на хаскеле работает в среднем быстрее.
Хотя это может за счет встроенных средств паралелизации исполнения
2. А что не так с Android? Предположу вопрос и отвечу, что он не на Java писан.
Ну и на Java в нем порядочно всего написано, аналогично тому как в Unix-е очень много написано на Си, а не ассемблере
Не нужно путать ядро и обвязку. Ядро Android — на базе ядра Linux, последнее в основном на Си. В интервью речь идет о ядре.
Ядро или микроядро как например здесь, разумеется всегда будет написано на чем-то низкоуровневом, но это не делает мне понятным критерия деления всех языков на два класса: «как Java» и «как Си»
У Android-а ядро все-таки на Си. А ОС на Java никто никогда не напишет потому, что писать ОС для Фон-Неймановской машины на управляемом языке — нонсенс.
Кстати Хаскель(да и в общем то все остальные функционально-ориентированные языки) как раз ближе к идеальному языку в его понимании, поскольку дает компилятору больше информации о структуре данных и графе вычислений, чем традиционные языки.
НЛО прилетело и опубликовало эту надпись здесь
Я так понимаю, это прямая речь Бабаяна.
НЛО прилетело и опубликовало эту надпись здесь
> Первый в истории out-of-order суперскаляр – тема, вокруг которой сломано много копий.

Теоретически iAPX 432 является таким процессором — конвейер в 3 шага есть, декодирование в полтакта тоже присутствует.
Секвенсор тоже присутствует. OoO проводится правда над мопами уже, а не просто над инструкциями как в Эльбрусе.
Btw, разбивка сложных условных «CISC» инструкций в несколько простых RISC-микроопераций уже была в этом процессоре. (8086 вышел только на пару лет раньше).
То же самое сейчас происходит почти в каждом x86-ядре.

Правда на практике всё сложнее, но надеюсь скоро попробовать in vivo.
ОЧЕНЬ самоуверенных высказываний

Это же Бабаян. Это его фирменный стиль.
Оговорюсь, что локальную память я очень осторожно предлагаю. Я эту идею пока ещё не прорабатывал. Но думаю, это можно сделать.

Cell'ы содержали 256Kb Local Storage на каждом SPU ядре.
Как-то мне довелось программировать для такой системы, это было весело, но довольно трудно.
Спасибо большое за статью!

По существу материала: Бабаян, ИМХО, изобретает велосипед. К примеру, «пространственный дескриптор», по сути мало чем отличается от виртуальной памяти (которую ему все равно приходится в системе делать!). «Временной дескриптор» — тот же стек. «Удобная и надежная отладка» — от юнит-тестов (которые, как прекрасно известно, ловят и близко не все баги). «Явный параллелизм и локальная память» — один-в-один подход CUDA / OpenC (тоже, как известно, работает далеко не везде). Бахвальства много, а интересных идей не видно (о них «нельзя подробнее писать», ага). Проблем много, преимуществ мало.
Собственно проблема ровно одна, но такая, что может все остальные идеи похоронить: совместимость. Кто будет покупать эту систему? И для чего?

Я такой класс людей про себя называю «эсперантисты»: да, возможно, если вдруг все люди выучат эсперанто жить на Земле станет лучше и веселее. Да, возможно если все эти специализированные приборы заменит «универсальный вычислитель с пространственными и временными дескрипторами», то наступит больше такое ЩАСТЯ. Но… перехода от точки A к точке B нет и, стало быть, и говорить особо не о чем.

Ну и бесконечное надувание щёк, конечно. Вся эта Бабаяновщина начиная с его 22 операций за такт и прочим — всё при нём. Вы думаете речь идёт о сложениях вычитаниях? Неа: и обращения в память и вычисления адресов и прочее — всё в эти 22 операции входит отдельно… современный Intel по такой методике подсчёта будет иметь параллелизм не 3-4 инструкции за такт, а штук примерно 12-16 (смотря насколько нагло считать).

То есть нет, всё это очень интересно, только… бессмысленно, что ли. Самое главное — отсутствует.
Спасибо за статью. Интересный взгляд, интересный человек. По сути, он вышел на последствия введения фон-неймановской машины, ее ограничения, и назревшую необходимость пересмотра этой концепции или дополнения другими. Самый глубокий материал по it, который видел за последнее время.
Так как фон Нейман разрабатывал архитектуру в 40-х, когда минимизация аппаратной и логической сложности была ключевой для реализации проекта (лампы!). С тех пор технология шагнула настолько далеко, а область применения настолько изменилась и расширилась, что столь красивая модель упрощения будучи прорывной в 40-х, на данный момент уже порядком жмет в подмышках.

И последовательность исполнения, и шина, и пространственная однородоность — оттуда.
А под фон Неймановскими идеями — и концепт машины Тьюринга — оказавший на них определяющее влияние. В данном случае оба концепта проясняют на мой взгляд, о чем статья, а также на каком уровне анализа человек изъясняется :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации