LabVIEW 编译器的发展历史

前阵子为了准备一个关于LabVIEW编译器的讲座,查找整理了一些关于LabVIEW早先版本编译器的信息。

LabVIEW 1.0 版本是在1986年(NI公司成立的第十年)发布的。第一个版本的LabVIEW只能能运行在当时最流行的个人电脑:苹果机上;那时的Apple电脑的CPU采用的是摩托罗拉68000。LabVIEW 1与之后的LabVIEW语言都不同,它是解释型语言。语法和功能都相当简单,比如:每个函数只能用于一种类型的数据;唯一的数值类型是浮点数等。

LabVIEW 1.1 中引入了LabVIEW的一个重要优化技术:缓存重用。LabVIEW程序采用的数据流驱动方式,最大的效率隐患就是产生了过多的数据拷贝。采取缓存重用机制,LabVIEW会尽量减少不必要的数据复制、利用已有的内存控件,从而大大提高的LabVIEW的效率。知道今天,LabVIEW程序员在为自己的程序做内存优化时,主要考虑的依旧是如何有效利用LabVIEW的缓存重用机制。

LabVIEW 2.0 最重要的革命性改进是它使用编译器代替来原来的解释器,LabVIEW从此变成编译型语言了。它首先把一段程序编译成为针对摩托罗拉68000 CPU机器码,然后再运行。这样执行速度就有了质的飞跃。LabVIEW 2.0 在编译程序时同时会对程序做语法检查,比如:把两个不同数据类型的控件连在一起,LabVIEW 会给出相应错误提示。LabVIEW 2.0另外一项重大的创新是开始支持并行计算。当时的LabVIEW并不支持多线程,但是,它在程序内部实现了类似多线程的调度。LabVIEW 会把代码中没有先后顺序依赖的部分分成不同的“模块”,然后快速交替执行各个模块,让它们在宏观上看起来是并行执行的。

LabVIEW 跨平台是从 LabVIEW 2.5开始的。在这个版本中,它首次开始支持x86架构的CPU。在之后的版本中,LabVIEW陆续开始支持PowerPC以及其它一些当年比较常用的CPU。

为了更有效的支持多种硬件设备,LabVIEW从5.0版开始引入了一项新的模块GenAPI。GenAPI可以生成多种CPU的程序执行代码,这样一来,LabVIEW就具备了交叉编译的能力,比如在一台x86的电脑上,可以编译出在RT设备上运行的程序。LabVIEW 5.0的另一项重大改进是它开始支持多线程了。

LabVIEW 8.0针对于编译器最主要的改进是优化了CPU寄存器的分配机制。再此之前,LabVIEW采用固定的模式为数据分配寄存器,8.0开始采用了动态分配方式。同时8.0的编译器也开始加入优化方式,比如移除无效代码分支等。

LabVIEW 2009是编译器改进比较重大的一个版本。首先,它加入了64位的编译器,可以生成64位的执行程序。再有,它开始对LabVIEW的编译器分层化。首先细分出来的是DFIR(Dataflow Intermediate Representation)-位于程序框图和可执行代码之间的逻辑表达层。有了这样一层中间层,LabVIEW编译器可以做更多的优化工作了,比如:常数合并,无效代码删除,循环内不变代码移出等。

在LabVIEW 2010中,编译器在DFIR与机器码之间又细化出一层:LLVM(Low-Level Virtual Machine),底层虚拟机。在这一层上,编译器可以进行如:指令调度,循环判断条件外提,指令组合,以及更复杂的寄存器分配等优化。2010在已有的DFIR层上也引进了新的优化方式,比如:运算关联,相同代码合并,达式消除,循环展开,以及子VI内联等。

Advertisements

ArrayList 与 List<T> 不一致的Range行为

今天发现C#中泛型和非泛型集合的某些方法,行为不一致。

比如下面这段程序,运行之后,test中有4个元素,而test1中只剩下两个元素。

System.Collections.Generic.List<string> test = new System.Collections.Generic.List<string>();
test.Add("1");
test.Add("2");
test.Add("3");
test.Add("4");
test.GetRange(1, 2).Clear();

System.Collections.ArrayList test1 = new System.Collections.ArrayList();
test1.Add("1");
test1.Add("2");
test1.Add("3");
test1.Add("4");
test1.GetRange(1, 2).Clear();

翻墙软件

大概只有中国才会产生这么多五花八门的翻墙工具。最近接触了几款,对它们最深的印象是:名字真好听,浸润了浓郁的中国文化韵味。

比如有一款软件叫“张生”:咱们探头探脑的翻墙寻求真相的网民,和当年冲破专制家长阻挠追求爱情的张生真有几分神似。

另一款软件叫“红杏”:名字同“张生”比,也有异曲同工之妙,可惜意境变了味。

前面是闲话,下面介绍两个翻墙工具。其实翻墙的方法非常多,我介绍这两个工具并不是最强大的,也比较容易被封杀。但它们也有一些特别的优点:

  1. 使用简单。安装工具后浏览器上会多一个按钮,又不能访问的网页,点一下按钮,就翻过去了。
  2. 安全,基于proxy和Google APP Engine。这比链接到某些组织的网站,更让人放心。

由于我目前使用的Chrome浏览器,所以推荐的这两个工具,都是Chrome的插件。它们也有对应的Firefox插件。

  1. 1-Click Web Proxy: https://chrome.google.com/extensions/detail/kjdehhkgdgjcekacdccoflccmhbkefce

  2. 红杏浏览:https://chrome.google.com/extensions/detail/kkoddkighkbcpjdcmldppjanjbcfflcf

一些免费、简洁、好用的软件

 

1. 视频播放 – 射手播放器
http://www.splayer.org/
亮点就在自动链接射手网对字幕匹配搜索, 并且可以很容易加载第二字幕实现双语.

2. 文件解压 – 7zip
就好了, 支持格式同样全面, 也有右键菜单支持, 就是图标可能丑了点.
http://www.7-zip.org/

3. 文件下载 – 下载链接转换
下载协议太多, 迅雷, ed2k, bt, 快车, qq旋风, rayfile, 纳米盘, 一人一个专用地址, 十分受不了.
为了减少下载工具的数量, 在此有专用软件转换一部分下载链接
http://www.appinn.com/down-link-c/
http://www.uushare.com/user/appinn/file/2094577

4. 文件下载 – 英文版迅雷Gigaget
取代迅雷
其实就是迅雷自己出的国际版, 但是没弹出广告, 没界面广告, 没自动更新, 没会员登录, 什么乱七八糟的玩意都没有, 不会有讨厌的小动作, 因此很适合取代张牙舞爪的迅雷自己.
http://www.gigaget.com/download.htm
http://www.appinn.com/gigaget-encoder/

5. 文件下载 – 原版eMule/电骡-
取代阉割的easymule, 同时拒绝用迅雷吸血
http://www.emule-project.net/home/perl/general.cgi?l=42
ed2k服务器更新列表:
http://ed2k.2x4u.de/index.html

6. 杀毒 – Avira小红伞免费个人版 支持中文界面
自我保护能力差一点, 但查杀一点也不差
http://www.free-av.de/en/trialpa … free_antivirus.html
最近推出了中文版, 同时也有了简体中文的页面

7. CCleaner 专职清理
http://www.ccleaner.com/
有注册表清理, 软件卸载, 临时文件清理这几个主要功能. 其中软件卸载比windowsxp自带的那个列表要快得多. 还有简单/简陋的启动项查看以及系统还原点管理

8. ProcessExplorer 增强的进程管理–微软出品
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
可以在菜单里设置取代windows自带的任务管理器, 以后用组合键就直接蹦出这个来了. 可以显示每个进程对应的主程序外, 还有其相应的程序信息, 比如xx公司什么的. 具体还可以查看进程调用的所有文件. 整体结构树形显示出进程间的启动关系. 总之很实用

9. Autoruns 全面的专职启动管理–还是微软出品
http://technet.microsoft.com/en-us/sysinternals/bb963902.aspx
捕捉所有启动项, 一个不落下, 适合仔细检查, 去掉多余和无用的启动项

10. Everything 飞速全盘搜索+简单局域网http/ftp共享
http://xbeta.info/everything/index.htm
一直在用这个, 回复里也有人推荐了.
这个东西搜索非常的快, 每打一个字母就瞬间刷新出结果.
原理是每次启动都会自动把整个硬盘的所有文件和文件夹都索引出来, 而制作索引的时间是很短的, 一旦启动完成, 就可以瞬间在整个硬盘中找出所有你要查询的名字.
仅支持文件名和目录名搜索, 而不能根据内容搜索. 仅支持NTFS分区格式
可以自由设定索引的范围而不必担心隐私暴露. 可以设置规则屏蔽指定关键词, 指定文件, 指定目录等等
有简单的http/ftp服务器功能. 启动http服务之后在同一局域网的人在浏览器输入你的内网地址就可以进入搜索页面, 快速搜索和下载你的东西; 若是ftp服务, 那就要用FTP工具了. 当然搜索范围你可以事先限定好以免被全面曝光.

11. Paint.NET 简化免费的photoshop
http://www.getpaint.net/download.html
基本功能, 比如图层, 各种滤镜效果, 画笔刷子, 魔棒选择等等都具备, 占用内存比PS好多了.
*最新版增加了PSD格式的支持, 可以读取photoshop的PSD文件了

12. 网络聊天IM – Pidgin
多协议聊天软件, 支持qq msn gtalk AIM ICQ 等等协议
http://www.pidgin.im/
绿色版下载[推荐这个]: http://portableapps.com/apps/internet/pidgin_portable
此软件支持多种不同协议的IM帐号, 可以同时登陆在线, 也可以只在线一部分, 帐号管理方便. 且如果对方也用pidgin, 就可以开启加密.
聊天窗口也是标签化的, 每多一个人聊天就多一个标签, 而不是多一个窗口, 界面简洁. 群聊也是一个标签.
原本是linux系统的软件, 现在跨平台了

13. Tencent Messenger : QQ的无广告无插件无乱七八糟的干净版本
http://im.qq.com/tm/
同样是腾讯出品, 差距就是这么大. TM原本是用来模仿MSN的商务版界面QQ, 只有最基本的文字聊天和语音视频互传文件, 没有界面广告QQshow之类乱七八糟的东西, 内存占用也不是少了一点半点.

[3]. LibFetion: 飞信的第三方客户端, 多平台.
http://www.libfetion.cn/
飞信的最大用途就是可以发短信, 其他那些功能恐怕大部分人不会多看一眼. LibFetion本来是为了解决非windows系统的用户登录飞信(谁让白痴中国移动只知道windows), 现在也跨平台了. 界面简洁内存占用少. 就是有点难看.

周末在老婆单位拍的照片

周末又练习一下摄影。这次有个惊喜的发现:有几张照片拍的很清晰。可能调节到某种合适的拍照姿势,可以在一定程度上减少手抖带来的影响。

前几天,我还特地试验了一下这个相机的防抖功能。打开和关闭防抖功能,对于我来说区别相当明显。现在觉得,选这款相机还是正确的。

生化所的小白楼:
DSC00150
DSC00145

原法国领事馆(大概是解放前的)的官邸:
DSC00165

硬盘的速度

以前一直没有考虑过,不同硬盘的读写速率是有很大区别的。因为硬盘上标注的参数一般就只有容量和转速,所以我一直以为转速是影响硬盘速度的唯一指标。最近才发现,其实不是这样的:

我自己的笔记本电脑有一块7200转的硬盘,数据读写速度不到70MB/s。这个速度还不如我工作电脑上那个5400转的硬盘(约80MB/s)。而最近同事们新换的电脑硬盘速度已经超过130MB/s了,比我的笔记本快了一倍还不止。

自己上网查了一下,又朝同事了解了一下,才知道硬盘的速度还受磁性颗粒密度、盘片数量、磁头移动速度、存储算法等的影响。电脑几大配件中,硬盘是最不受关注的,没想到它也是很有技术含量的嘛。

了解了这些以后,我估计将来民用的硬盘也会细分。存储系统和应用程序的硬盘需要高速度,正好由固态硬盘来承担;存储不经常访问的数据的硬盘,会着重考虑容量、价格等因素,传统硬盘只能退守这一块了。笔记本上带两块硬盘比较麻烦,可能混合式的硬盘用的会比较多。

话说我现在工作用的这两块旧硬盘,性能上与两年前的主流产品持平。难怪我平时总是发现电脑一顿一顿的,只有硬盘在吭哧吭哧的转。忍无可忍了,周末的时候,我自己动手,把它们组成了一个RAID0,现在硬盘综合性能总算和同事们的新电脑差不多了Smile

终于搬到WordPress上来了

前一阵子一直在犹豫要不要搬到这里,主要是怕这个网址将来被和谐。后来想想,还是先不管了,不搬家就没法发新贴了。就算和谐了,翻墙也不算难事。

搬了家之后,发现打开Wordpress的速度比以前的LiveSpaces还慢,并且常常是根本打不开(但连上vpn马上就好),大概墙已经开始起作用了。

为豆豆买了个相机

我本来对摄影没啥兴趣。因为我的手比较抖,拍什么都不清楚。
不过和很多人一样,为了记录下一代的成长,我也在豆豆出生前买了一个单反。
我特意选了Sony的单反,因为它有机身防抖功能,不过试用过后,对它的防抖效果比较失望–还是不清楚。
贴一张我给老婆拍的大肚照。