#multicore #forth
#многоядерный #forth
Вопрос:
Существует ли такая реализация Forth, которая позволяет вам в полной мере использовать преимущества многоядерных процессоров?
Ответ №1:
Недавно я узнал о colorForth, который является последним изобретением мистера Мура (не совместимым с ANS) и используется в его новых многоядерных чипах.
Он оснащен 144 маленькими компьютерами forth на одном чипе (и без часов!) для обеспечения высокой эффективности.
РЕДАКТИРОВАТЬ: На самом деле colorForth — это IDE, используемая для чипов. Разновидность (цвет) Forth, работающая на чипе, называется arrayForth.
Комментарии:
1. Теперь в arrayForth Institute открылись зеленые массивы . Пока что есть только один вводный курс для посещения; но другие находятся в стадии разработки.
Ответ №2:
По-видимому. Я мало что знаю об этом, см. Многоядерные процессоры, программирование FORTH и взаимосвязь между программным обеспечением и кремнием (опубликовано 2008-09-24).
Вы хотите воспользоваться «всеми преимуществами» многоядерных процессоров. Оправданием многоядерного программирования является то, что вам нужна производительность (вы можете выполнять многопоточность только с одним процессором).
В таком случае я не думаю, что стал бы использовать Forth, поскольку по сути это интерпретатор (да, довольно быстрый). Хуже того, для современных процессоров каждая отправка Forth word, являющаяся косвенным вызовом, скорее всего, является разрывом конвейера, что действительно снижает производительность процессора, а выполнение Forth word работает с элементами стека вместо регистров. Таким образом, используя Forth, вы отказываетесь от вычислительного преимущества по сравнению с C или C или даже Fortran. Это означает, что вам почти гарантированно придется использовать более одного процессора с Forth, чтобы соответствовать производительности более традиционно закодированного и скомпилированного языка. Зачем начинать с недостатка?
Ребята, которые хотят сделать MP на Python, озадачивают меня по той же причине.
Комментарии:
1. Вы действительно классифицировали бы Forth как интерпретатор? Конечно, вам решать, что компилируется и что интерпретируется?
2. @sheepez: Да, он не генерирует машинные инструкции, поэтому вы не можете назвать его компилятором собственного кода. На самом деле, то, что он генерирует, не очень сложно: для каждого Forth слова сохраните указатель, соответствующий этому Fort слову. AFAIK, он скомпилирует любую последовательность Forth word; семантические проверки полностью предоставлены среде выполнения. Это соответствует тому, что обычно делают интерпретаторы.
3. На самом деле существуют реализации, которые компилируют слова в последовательности собственных инструкций вызова. Некоторые даже будут вставлять определенные слова.
4. Мне действительно следовало бы поставить вам -1 за этот ответ, но сегодня я веду себя мило. Вы путаете язык FORTH с обычной реализацией FORTH в качестве интерпретатора кода с косвенными потоками. Это очень распространенная ошибка. Нет никаких причин, по которым FORTH нельзя было бы реализовать с помощью традиционного компилятора, выполняя традиционную оптимизацию, кэшируя первые несколько местоположений стека в выделенных регистрах. (И обратите внимание, что архитектура x86 с нехваткой регистров, включая многоядерные компоненты, УЖЕ тратит много времени на перебрасывание элементов стека, даже на C / C или даже FORTRAN.)
5. @John: OP спросил, существует ли реализация, которая позволила бы ему эффективно работать параллельно. Мой ответ: скорее всего, нет, поскольку большинство реализаций являются традиционными, а они губительны для параллельного программирования. Если вы знаете об одной реализации, которая обладает описанными вами приятными свойствами и может быть эффективно использована OP, вы можете опубликовать ее как прямой ответ на вопрос OP. Если вы не знаете ни одного, то я думаю, что мой ответ разумен. Успешные параллельные программы — это не то, что может быть теоретически возможным.
Ответ №3:
Существуют реализации Forth, работающие на «голом металле», которые компилируют машинный код, и если вы проведете небольшое исследование, прежде чем начать печатать, вы увидите, что на самом деле:
- Forth была персональной системой, используемой Чаком Муром с 1958 года
- Forth — это язык, компилятор и операционная система, интерактивный отладчик (где вы получаете представление о том, что это «интерпретируется») система Forth, основанная на чистом металле по назначению, становится еще лучше, если учесть, что всему этому МИРУ для запуска нужны только 2 регистра, ALU и счетчик программ. Программирование в Forth полностью отличается от того материала, из которого, вероятно, сделана ваша операционная система, и поэтому я думаю, что действительно следует взглянуть на «голый металл» или даже на собственные (да, есть собственные процессоры stack machine) Форты, прежде чем судить, что есть что.
- именно эти «голые металлические» реализации Forth использовались десятилетиями и все еще широко используются сегодня во встроенных устройствах, на которые ваша настольная ОС, вероятно, никогда не должна переходить.
Комментарии:
1. ой, извините, я должен был просто добавить комментарий выше … не хотел помещать ответ. на самом деле я не из тех, кто умеет отвечать.
2. Я не думаю, что это отвечает на вопрос?
Ответ №4:
С помощью iForth возможно программирование многоядерного Forth. Существуют 32/64-разрядные реализации, которые работают на Win7, Linux и OS X. Если он генерирует машинный код: http://home.iae.nl/users/mhx/i4faq.html