Fri Oct 03 2003 00:05, Oleksandr Redchuk wrote to "Alex Kouznetsov":
OR> "Это" - это то, что для современных процессоров с несколькими исп. OR> устройствами, переименованием регистров, out of order исполнением и т.п. OR> на асме ручками тяжело всё учесть и _хороший_ компилятор ЯВУ уделывает OR> среднего программиста на асме -- это понятно всем, кроме тех
Ага... именно так. Написать на асме программу даже для первого пентиума с двумя конвейерами, учитывая порядок выполнения, возможность спаривания и т.п.
- уже нетривиальная задача. К тому же при работе на ассемблере вне пределов вылизываемой вставки кода бывает трудно отследить использование регистров и не скатиться к обычному load/store стилю.
OR> ассемблерррррррщиков, котороые ведут себя как форррррррррррррррртеры OR> (не путать с фортерами :-) и в качестве примера берут какой-нибудь OR> зачуханный C-компилятор против кода, долго лизанного хорошими OR> ассемблерщиками.
Ну это фанатство... оно что в Африке фанатство, что в среде фортеров (линуксоидов, сишников и т.д.....)
OR> Hо про ЯВУ такое начали говорить совсем недавно, именно когда процессоры OR> стали слишком умными. А вот то, что форт-программы быстрее ассемблерных OR> -- я лично слышу со времён 80386. И сейчас -- зачастую без уточнения OR> процессора. OR> Я ещё не слышал, что после хорошего С-компилятора программа для OR> AVR|MCS51|PIC|MSP430 работает быстрее, чем написанная на ассемблере. OR> Про форт такое слышал. Впрочем, заодно с тем, что "у него ядро 17 байт, OR> а вот у С!!!!"
Это тоже фанатство. После "усредненного" Форта получается все же чуть медленнее, хотя бы накладные расходы на вызовы слов (call/ret) и стековые манипуляции. Конечно, можно это убрать оптимизацией... но закавыка в том, что такая оптимизация не есть неотъемлемое свойство именно Форта.
OR> Поэтому ссылки на O'Caml и VC7 в данном случае не канают, OR> давай ограничимся PIC*|AVR|MCS51|MSP430|...ну давай ARM7 и повторим OR> эксперимент. И неплохо бы не только на функции Аккермана, а на чём-нибудь OR> менее рекурсивном и более применимом в эхотаге, скажем, FIR, CRC16, OR> подстановка байтов SLIP или PPP, ...
Если в лоб, то естественно, Форт будет медленнее. Хотя я недавно на 8 МГц форт-процессоре с треском обогнал MB90F549. 5 сек против 3,5 мин. И загадки никакой нет - шла работа с 96-битными числами, которые на MB90 считались ... ну понятно как считались, с битом переноса. А в Форт-процессор был встроен
96-битный арифметический блок... :)))) Пояснение смахивает на шутку, но в действительности Форт здесь выступил в своей обычной роли - не так сложно в реализации, как Си (или процессоры "общего назначения"), с другой стороны, работа уже не на уровне машинного кода. Обвязать 96-битный арифметический блок приемлемой по удобству дальнейшей работы логикой (речь о внутренностях ПЛИС) - очень непросто. Привязать этот блок к софтовому ядру форт-процессора - уже можно, причем сразу получается "чуть больше, чем ассемблер".