兼论spatial和simulink,PTX及其他
从工匠(工程师)的角度看,并行计算的构造最直观的一种方式共享内存的构架,从计算上讲就是数据级并行,比如单指令多数据流SIMD。
这种构造可以是从应用层来看,也可以是底层的硬件实现,比如cpu,gpu,dsp,fpga的芯片构架,或者现场总线,也可以是实时操作系统和中间并发软件所模拟的并行计算效果,MPI所模拟的分布式并行效果等等。
从工匠的角度看,这里面其实并没有太多新奇的原理,更多的是一些自然的设计。
从计算的角度看,我更愿意统一到控制论常说的差分方程组上来。
simulink虽然作为matlab的一个子品牌和紧密协作体存在,但是simulink和matlab的方向是截然不同的。
窃以为,simulink究其后台的实现语义,其实就是一个差分方程组。
所谓计算不过是差分方程组的步进。这种计算的本质,与用什么芯片,什么操作系统没有关系。方程组本身是并行的,就是可以同时计算的,互不干涉的。
而通常我们涉及到的这些方案,不过是在不同层面去实现这些计算。
比如PTX,本质上不过是GPU的多核并行与共享内存之间的关系。
MPI无非是用消息来模拟分布在多个机器上的内存,对应用程序来说,感觉不出来,内存在本地还是在远端。
而simulink不过是用图形和matlab脚本来表达这些差分方程组,几乎是跟差分方程组一一映射。当然这模型可以存储成xml和matlab脚本结合的一种文本形式。
由于xml的笨拙和掺杂了一些图形表示的内容,以至于显得其本身不过是一个差分方程组变得不那么明显了。
matlab本身没有采取静态强类型,simulink过于体现图形化,这些都降低了研发的效率,但是不管怎么说,simulink是最接近差分方程组的。这方面Labview和PLC的阶梯图要差很多。
SCADE实际上也是基于差分方程的,但是非常严格限制的强类型。
spatial是一种披着scala外壳的专门的并行计算语言,它从语义上支持并行计算和流水线式计算。并且提供一种机制把这种计算直接翻译成数字逻辑电路。
CUDA也是一种并行计算的语言,但是显得没有那么纯粹了,虽然更实用,它主要是用共享内存和计算核这样的东西来表达并行计算的,也就是说它生成的对象还是一个软件和硬件的结合体,而不是像spatial这样直接变成硬件。
目前看起来C++和scala都有很强的类型检查和编译时元编程能力,比较符合控制系统的高可靠性要求,因为问题暴露在编译时,是一个基本要求。
ADA语言虽然也很不错,但是缺点在于生态相对封闭。过于封闭的生态对于语言的推广和发展是一个严重缺陷。
开放的生态,可以使得语言的演进能够发挥群体的智慧。个体的智慧哪怕是一个巨无霸企业的智慧,最后还是会钳制语言的发展。
就并行计算本身来说,spatial给出了非常有潜力的途径。即从应用层的并行计算原语,直达芯片硬件电路硬编码,并暗示了另外一些可能,比如应用层并行计算原语转化为串行计算,比如并发计算的可能性,从而起到应用层和实现层分离的效果。
作者提出一个纲领,就是设计一种强类型和非常方便进行类型组合的,强编译时检查,支持纯函数,原生支持差分方程,基于文本的,并行的,确定性的,开放式的设计语言。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931801.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!