«И было очень сложно кодировать в такой парадигме циклы, ветвления».
Однако, как я понимаю, в MCp параллелизм возможен только внутри параграфа, а параграф — линейный участок кода. То есть циклы и ветвления в MCp делаются как в фон-Неймановской машине и не распараллеливаются вовсе.
Все же хотелось бы понять вот что: процессор отличается от функционального устройства тем, что самостоятельно ведет поток исполнения программы. Обычно этот поток связан со счетчиком команд. Здесь команды выполняютсчя параллельно в рамках параграфа, соответственно поток связан с указателем параграфов. Параграф, можно считать, эдакая сверхширокая команда.
Так вот: в чем проявляется параллелизм на уровне клеткок? Они одновременно исполняют инструкции из разных параграфов, или одного и того же?
Так-то оно так, но разбираться в чужом говнокоде чем-то сродни чистке чужих сортиров. Это надо уважать, но делать это не хочется — вот почему это наказание.
Еще одна непрестижная профессия — написание тестов. Написать тест, способный поймать ошибку (да еще в сложных условиях, например в многопоточной среде) — большое искусство, но почему-то плятят за это меньше, чем тем, кто эти ошибки делает.
Не стоит, не стоит. Надо самому понимать каждый символ в своей программе. Конкретно while(running) приводит к тому, что ваша програмка жрет 100% времени ЦП, даже когда ей нечего делать. И нигде в программе нет running=false, даже пожаловаться на отсутствие синхронизации не получается :). То есть фактически while(true).
Я от геймдева далек, но мне кажется, основные проблемы там как большому количеству пользователей взаимодействовать с еще более большим количеством объектов, некоторые из них сами активные. И while(true) там совершенно недопустим — тормознет всех.
А то, что еще в 1962 году была разработана симметричная мультипроцессорная система Burroughs D825 с матричным коммутатором (а не с шиной), давно и прочно забыто.
Не согласен во всем:
Рекурсия в Jav'e есть.
Указатели: на объекты в куче есть.
На элементы массивов можно легко смоделировать парой (массив, индекс).
На поля объектов можно смоделировать через reflection. И хорошо, что это непросто.
Указатели на локальные переменные смоделировать нельзя, и это очень хорошо.
И, наконец, испорченную перфокарту необязательно выбрасывать. Можно недостающие дырки прорезать бритвочкой, а лишние заклеить (без клея, просто вставить прямоугольничек и разгладить ногтем). Прямоугольничек берется из контейнера перфоратора.
Я небольшой специалист по Itanium, но мне кажется, что с точки зрения рассматриваемого вопроса один Itanium-процессор — это просто один процессор. То что в нем несколько параллельно работающих устройств, дела не меняет. Главное, что счетчик команд — один. В конце концов, в Пентиуме тоже несколько параллельно работающих устройств, и за один такт может выполнится несколько команд.
Хотел поставить просто плюс, но не хватает кармы…
Вспомнил как на лабораторной работе собирал разрядно-модульный процессор из 4-битных модулей. Вынес острое ощущение того, что процессор — всего навсего тупая железяка, вроде выключателя.
Если Вы считаете процитированные места неправильными, то Вам стоило бы пояснить, почему. Или написать свой пост, где в нескольких словах был бы описан правильный вариант.
Ни слова не прозвучало о регистрах eax и прочих именно с целью экономии букв, в расчете на то, что читатель знает, что при вызове процедуры регистры упрятываются в стек, а при выходе из процедуры восстанавливаются. Переключение же потоков описано как вызов процедуры — смена указателя стека — выход.
Нет, именно вызов процедуры прерывания не задан в исполняемом коде. Сама процедура задана в коде ОС или драйвера, при исполнении этого кода может случиться прерывание, следовательно процедура прерывания может быть задана в исполняемом коде
Однако, как я понимаю, в MCp параллелизм возможен только внутри параграфа, а параграф — линейный участок кода. То есть циклы и ветвления в MCp делаются как в фон-Неймановской машине и не распараллеливаются вовсе.
Так вот: в чем проявляется параллелизм на уровне клеткок? Они одновременно исполняют инструкции из разных параграфов, или одного и того же?
Эльбрус-3 был VLIW но также как MCp адресовался к результатам предыдущих команд.
Еще одна непрестижная профессия — написание тестов. Написать тест, способный поймать ошибку (да еще в сложных условиях, например в многопоточной среде) — большое искусство, но почему-то плятят за это меньше, чем тем, кто эти ошибки делает.
Я от геймдева далек, но мне кажется, основные проблемы там как большому количеству пользователей взаимодействовать с еще более большим количеством объектов, некоторые из них сами активные. И while(true) там совершенно недопустим — тормознет всех.
Рекурсия в Jav'e есть.
Указатели: на объекты в куче есть.
На элементы массивов можно легко смоделировать парой (массив, индекс).
На поля объектов можно смоделировать через reflection. И хорошо, что это непросто.
Указатели на локальные переменные смоделировать нельзя, и это очень хорошо.
И, наконец, испорченную перфокарту необязательно выбрасывать. Можно недостающие дырки прорезать бритвочкой, а лишние заклеить (без клея, просто вставить прямоугольничек и разгладить ногтем). Прямоугольничек берется из контейнера перфоратора.
code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/client/samples/#samples%2Fisolate
Вспомнил как на лабораторной работе собирал разрядно-модульный процессор из 4-битных модулей. Вынес острое ощущение того, что процессор — всего навсего тупая железяка, вроде выключателя.
Ни слова не прозвучало о регистрах eax и прочих именно с целью экономии букв, в расчете на то, что читатель знает, что при вызове процедуры регистры упрятываются в стек, а при выходе из процедуры восстанавливаются. Переключение же потоков описано как вызов процедуры — смена указателя стека — выход.