Pull to refresh

Comments 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 никто никогда не напишет потому, что писать ОС для Фон-Неймановской машины на управляемом языке — нонсенс.
Кстати Хаскель(да и в общем то все остальные функционально-ориентированные языки) как раз ближе к идеальному языку в его понимании, поскольку дает компилятору больше информации о структуре данных и графе вычислений, чем традиционные языки.
UFO just landed and posted this here
Я так понимаю, это прямая речь Бабаяна.
UFO just landed and posted this here
> Первый в истории 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-х, на данный момент уже порядком жмет в подмышках.

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

Articles