作者ggg12345 (ggg)
站内Programming
标题Re: [问题] 有关古老程式跑在多核平台上的问题?
时间Mon Aug 3 12:50:45 2009
※ 引述《lkerr (kerr)》之铭言:
: 这样就能不用更改程式却能大大提升程式的效能.
把 cpu clock 加快, 周边 I/O 处理加快, 才能 "完全都不更改程式"
却能提升程式效能.
这句 "不更改" 要看如何下定义. 指令码都不变, 但解译执行时却随
使用者与设定状况而不同, 这算不算更改? 如果原执行的效果结果都
不变, 但速度有异, 这算不算更改 ?
要加速, 显然就是只要求结果不变. 那麽, 结果不变, 速度也变快,
但插入或修改适当的执行码又如何 ? 所以不更改, 是指原始程式不
再找人更改修订罗 !
问题出在没有原 programmer 的协助, 能否辨识或学习出程式码
块可以同时并行处理的区段, 然後自动调派多个实核PU来同时执行,
合并後的结果跟原来循序跑必须是一样的, 再把这些辨识, 调派, 合
并的成本时间也都算进去, 结果是变快有赚, 那就达成目标了.
intel 公司 以 预取指令 再做"错序并行"调派, 资源冲突则迟延,
这种硬体支援算是正确的做法. Intel 似乎已把此一部份改进到
compiler 里面, 如同 RISC 想法以精减硬体.
整件事的重点就是在做程式码的区块转译, 这个转译的成本先不
算在内. 这是传统 parallel compiler 的变形, 只是处理对象是机器
码, 结果也可能是 machine-dependent.
严格说应该是 Emulater 不是 VM , 利用 Emulater 协助, 是先不做
硬体, 弄对所有关键处才来做该做的大投资. 弄清楚该插断拦截的片
段(这可能已经不是单一指令的事了), 清楚敏感的(sensitive)部位,
VM 就可以上阵了.
假如在 VMM 之下有多个实核, 之上的 VM 是传统的单 CPU OS 与古老
的程式. 再假设 VMM 就是要让多个实核并行的执行多段片段程式码
块, 也就是用多核来模拟单核的行为特性, 使执行结果如同单核.
所以 VMM 将之上的 VM/OS/AP 预取 L 个可并行的码块, 馈入 M 个
cpu chip , 每个 chip 各有 N 组实核可并行处理, M*N = 1 就是老
式的单机单核逐一执行.
如果 M*N > 1 且 L >= M*N 那就是企图用并行处理来加速老式程式的
执行, 而且不会在使用的资源上造成干扰与无效率, 这就达到不更改
原始程式与程式码, 但执行速度因多机多核而提速.
这件事当然是电脑业的大事, 有如基因改造 !
(确实没错, 懂的人稍一涂鸦, 举例为证, 就掰出论文了 !)
1F:推 lkerr:完全正确, 这个正是我所需要的VMM 202.175.78.74 08/03 17:25
2F:→ lkerr:可惜之前所列出的VMM都没有这样的功能 202.175.78.74 08/03 17:26
=======
上面的说法不是 Goldberg 的 sensitive instruction model 能叙述的.
特权指令, 敏感指令是因为这类指令的执行生效与否, 是依赖状况而定,
不能迳自执行.
想像有一长串指令合在一起时, 都是被视为一堆 illegal instruction ,
这一堆指令经由拦截解译的机制, 被重组为几段码块, 分别让多个实核对
这几段码块同时执行.
再假设这个拦截解译的机制是 VMM 功能的一部份, 这个问题就变为原来
一堆长串循序执行的非法指令被识别出来, 并能转换为 n 堆合法指令让
n 个实核同时执行. 这个 n 堆合法指令如果直接让 VMM 再执行, VMM
会将之视为合法指令不必再转换. 此时, 如果 VMM 只能操控 m 个实核,
但 m < n , 这 n 个码块就被分批让 m 及 (n-m) 个实核分批次执行.
当 m = 1 时, 长串循序执行指令都可直接对应, 被视为合法. 若 m > 1
只有 VMM 检视转译过的码块才被视为是合法的.
Parallel Compiler 就是 VMM 的预处理器, 可先做检视, 并做大部份的
转换, 可能有一部份的转换才由 VMM 做最後检视与解译.
这是个 Block Code Extented VM , 并不是 Goldberg 的 Single
Instruction VM.
假设单核/多核的相容架构可如上运作, 关键问题就落在长串指令对并行
码块间的转换规则.
※ 编辑: ggg12345 来自: 140.115.4.12 (08/04 00:49)