- UID
- 19172
- 帖子
- 14
- 精华
- 3
- 积分
- 81
- 阅读权限
- 10
- 在线时间
- 17 小时
- 注册时间
- 2007-4-9
- 最后登录
- 2008-7-3
|
2楼
发表于 2007-4-24 14:28
| 只看该作者
奋斗
次日,接到Intel的电话:
“我们这里有一题目,就是将原来用C写的算法,转成硬件描述语言,不知你有没有兴趣?”
“也就是算法的硬实现吧,我很感兴趣。”以前想过硬实现方面的问题,没想到竟与Intel的题目不谋而合。
“那好,现在我们会发一道题目到你邮箱里,如果你能在一个星期内完成,我们将进一步规划你实习的事宜。”
“好的,谢谢您。”
很快,我的信箱里就收到了一封新的邮件。
在题目中,包含了上千行的C++代码,描述了一个用于统计计算的算法。其实刚拿到代码,我头就有点晕,不知道它具体实现的是什么功能。不过不管它的功能如何,按照题目的要求,都要保证在转为硬件描述语言后要使输出相同的结果。所以我第一步要作的是先把代码编译一遍,看一下输出。
在它的源代码文件夹下有一个makefile,这就需要在linux下进行编译。我找了一台装有linux的计算机,对代码进行了成功编译。但当我把它运行起来的时候,我不尽吃了一惊,也感觉莫名奇妙----它竟然没有任何输出。我离开了座位,开始踱来踱去思考这个问题。可以是当我再次看屏幕的时候,发现了一行“run ok!”,随后是几个数据。我的天!这个程序运行了足足有三分钟啊。区区一千多行代码竟然运行了这么长时间。我的第一感觉是,这个算法一定很复杂,运算量一定很大,看来Intel是在故意为难我。
这样足足一个星期的奋斗开始了……
第一步是把现在的用C++写成的算法钻研透,能够作到真正掌握它,知道它每一个细节。所以我花了整整一天的时候来研读算法。程序中除了与算法相关的内容,还有一些是调用linux系统的一些API,来实现对程序运行时的监控,用来模拟硬件仿真。这些代码是与算法无关的,因此可以把它们剔除。
剩下代码有很大一部分在描述一个数学模型,刚开始看那可是一头雾水。其实我最发怵看别人的代码,有一种自己的思想受制于人的感觉,多半时候都看不下去。但现在代码就摆在面前,还是要硬着头皮看。我想,我要想把这个算法看懂,我首先要把这个模型搞清楚。于是决定上网google一下。
Google…. Google…. Google….
呵,还不错,搜到了两个资料,虽然是E文的,但还算是自然语言。仔细研读了一个上午,终于算是有了个眉目。
这回再回到那一堆代码里,感觉才不那么抽象了。一看又是大半天,总算对它八九不离十了。
我才明白它为什么要run那么长时间了,也才领悟到为什么要进行算法的硬实现了。程序的功能是进行一种统计性的运算,设定一个动作重复400000000次,最终统计它各种情况出现的概率,这漫长的三分钟就花在这个400000000次上了。而如果把这些耗时很多的算法作成ASIC的芯片,那就将会从数量级上缩短运行的时间,最终实现所谓的HPC(高性能计算)。
要对现有代码有很深刻的了解,我想我有必要把它亲手改写成纯C的,并且保证输出结果相同。这样不仅能够证明我已经掌握了该算法,也从一定程度上说明最终转为HDL的可行性,同时其实也降低了转换的难度,从面向对象的C++到面向过程的C,再从面向过程的C到用于描述的HDL,此时我已经站在C的层次上了,我有信心完成从C到HDL的转换。
我装上了久违的ISE,还是ModelSim,这些软件在Sunwise的时候都接触到过,现在又拿来安装,还算比较亲切,不过还需要温习一下。于是,又从网上baidu了一些相关资料,熟悉了半天的开发软件,感觉ISE的环境确实比Altera的MAXPLUS和QUARTUS要好,还有就是重新见识到了Modelsim的强大。OK,欲善其事,先利其器!
其实从C++到C,再到熟悉IDE都算简单,最难的部分在于HDL。对于VHDL,其实我也是个二把刀,原来学过的那点皮毛到现在已经剩不下什么了。但对于基本语法和描述结构还在脑子里。所以我打算来一个星火燎原,凭着这点仅剩的零星知识,编干编学,估计这样的学习效果更好呢。
毕竟这里不比在哈尔滨,纸质的资料有限,所以我又从网上下了些HDL的教程,就这样看一段C的函数,查一查资料,编一些代码。如此重复,几百行代码不到一天的时间已经转换了80%了。其实,大部分和底层电路的关系不是很紧密,转换的过程考虑得只是逻辑实现方式的转变。
|
|