正文

Forth 这个东西(10)2005-08-05 15:35:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/forth/3477.html

分享到:

发信人: lmy@cis_nctu (Daemon of Andromeda), 信区: programming
标  题: Re: 大发现!! FORTH 无所不在!!!  :))
发信站: 交大资科_BBS (Apr 24 10:53:46 1994)
转信站: cis_nctu

==>[Author]: mr814305@g814305.hung.ab.nthu (Hong-Yung Lee) on board
> 我不知你们的 real-time 定义如何, 但我隔壁化工所室友的整套蒸馏塔监控程序,
> 就是用 QBASIC 写的. 这提供你们一个参考.

    我相信 BASIC 来应付蒸馏塔监控程序没有问题. 因为该系统的瞬时及稳态响应的变化速率应该在 BASIC 能够应付的能力之内. 但如果更快的系统, 可能连 C都无法应付, 而须用汇编语言.  数字控制有一个基本要求, 你的取样及处理频率, 必须大于 2倍的系统自然频率以及外加驱动频率, (也就是受限于 Nyquist rate 的取样定理) 否则系统将无法 stable, 或是 steady state error 会太大.

    用高级语言在最佳化的瓶颈就是许多缓存器被用掉去 keep 一些 virtual machine的状态, 如堆栈框, loop count等, 导致最佳化时自由缓存器不足. 还有堆栈框的epilog, prolog等, 都是 overhead. 用 forth chip 时, 这些问题都被消除, 你可以这样想, 该chip 的machine language 就是forth, 这些 overhead 在芯片设计时就被消除. 此外, 该芯片最多可以并行三个 machine instruction (尤其是返回指令EXIT) 一般高级语言用function call 虽可以增加模块化, 却增加了进出的 overhead,C++ 的 inline 虽有部分效果, 却无可避免的增加 size overhead, 对 programmer 是一种看不见的惩罚. forth 芯片的 word (可看成function) 的进出可说几无 overhead.用那样的芯片写汇编语言 (就是forth), 在同样的频率下, 我想没有其它芯片的高阶语言可以及得上它的速度.

--------------------------------------------------------------------------------地山谦, 亨, 君子有终
==============================================================================




发信人: william (C++/ASM/Win Master), 信区: 'programming'
标  题: Re: 大发现!! FORTH 无所不在!!!  :))
发信站: 交大资科_BBS (Apr 25 00:08:36 1994)

==>[Author]: lmy@cis_nctu (Daemon of Andromeda) on board 'programming'
>     我相信 BASIC 来应付蒸馏塔监控程序没有问题. 因为该系统的瞬时及稳态响应
> 的变化速率应该在 BASIC 能够应付的能力之内. 但如果更快的系统, 可能连 C都无
> 法应付, 而须用汇编语言.  数字控制有一个基本要求, 你的取样及处理频率, 必须
> 大于 2倍的系统自然频率以及外加驱动频率, (也就是受限于 Nyquist rate 的取
> 样定理) 否则系统将无法 stable, 或是 steady state error 会太大.

对时序要求如此严格的场合, 应该都是用 asm 吧? 毕竟高级语言也不是万能的。
即使是 Ada, 在做 embedded system 时还是要动到 asm。

> 用高级语言在最佳化的瓶颈就是许多缓存器被用掉去keep 一些virtual machine
> 的状态. 如堆栈框, loop count等, 导致最佳化时自由缓存器不足. 还有堆栈框的
> epilog, prolog等, 都是 overhead. 用 forth chip 时, 这些问题都被消除, 你可
> 以这样想, 该chip 的machine language 就是forth, 这些overhead在芯片设计时就
> 被消除.

这是自然的, 用各 CPU 的母语来写程序, 自然最好。没听过在 Lisp machine 中的C 程序能拼过 Lisp 的。

问题是:若是在非 Forth chip 里, Forth 该如何避免这种 overhead? 我很感兴趣。

> 一般高级语言用function call 虽可以增加模块化, 却增加了进出的 overhead,
> C++ 的 inline 虽有部分效果, 却无可必免的增加 size overhead. 对 programmer
> 是一种看不见的惩罚.

这怎么能算是「看不见的惩罚」? 要不要 inline 全看 programmer, 这是「看得见」的。即使用 macro assembler, 也会碰到用 CALL 或是 MACRO 的抉择。

在 Forth中大量动到 threaded code, 还不是会遇到传统子程序的 overhead 问题?这是宿命。

> forth 芯片的 word(可看成function)的进出可说几无 overhead. 用那样的芯片写
> 汇编语言(就是forth), 在同样的频率下, 我想没有其它芯片的高级语言可以及得
> 上它的速度.

这是自然。哪天出了一个 Ada chip 来发展 embedded system 的话, 他们也是可以如是说。

对了, 哪儿可找到 NOVIX 的数据? 有点兴趣...

阅读(3868) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册