TopCoder开发大赛优胜者:仅为兴趣或展示自我参加竞赛

原文地址:http://www.intel.com/cd/ids/developer/apac/zho/307726.htm

作者:Geoff Koch

我们必须承认,某些人具有与生俱来的编程天分。

Fred Batty 就是其中之一。

现供职于 Sun Java System Messaging Server 团队的 Fred Batty 曾在 Sun Microsystems 公司工作达九年之久,他的大部分职业生涯一直用于编程方面。然而,仅在工作时间调试和维护消息存储代码远远不够,因此,Batty 喜欢在下班时间通过参加竞赛(如 TopCoder 网站上的竞赛)来展示其编程天赋。

第一场竞赛,要求采用线程技术来绘制虚拟无线网络周围数据包的最佳访问路径。Batty 对为期两周的主要赛况进行了跟踪,并在 2 月 15 日截止日期前提交了他的算法。最终,Batty 的算法从 TopCoder 众多方案中拔得头筹。

通过代码编写和修改,Batty 得以对线程和并行有所了解,并形成了他自已的一套想法。Batty 在介绍他的获奖算法时表示:"在使用线程时,重要一点是把不同线程间的同步和闭锁限制在较小的时间帧内,使线程完全独立地工作,并在余下时间里充分利用内存高速缓存的优势。此外,尽可能改变每个线程处理的数据或算法以减少线程间冗余操作也非常关键。"

Batty 对这次竞赛产生了浓厚的兴趣,他决定参加随后一轮的 TopCoder 竞赛。到 6 月 1 日分区竞赛结束时,Batty 再次获胜。在 TopCoder 网站上一篇关于 Batty 获奖作品的文章中,Batty 表示:"通过在初始配置中添加一些随机性的内容,使其能够运行在全部八个内核之上,从而每个线程都有一个不同的解决方案,这使得我提交的解决方案得以实现线程操作。"

对于开始接触线程的开发人员,Batty 有几条建议。他建议那些希望实现 C++ 编程线程操作的人员,应首先充分理解互斥(mutex)和条件变量背后的逻辑概念,这要比单从硬件方面考虑重要的多。

Batty 认为,在进行深入研究并开始设计多线程软件时,第一步是从逻辑上以并行任务的形式分配工作,使其关联性尽可能降低。这些任务应有足够大的能力,从而并行性能带来的性能优势要大于同步所带来的开销(如刷新内存高速缓存,等等)。但是,这些任务并不一定必须是 CPU 密集型任务。在一次电子邮件采访中,Batty 表示:"举例来说,一个简单的服务器设计有多个线程,每个线程都等待用户的输入。在这种情况下,一次仅有几个线程处于活状状态,服务器在几个甚至是一个 CPU 上,都能进行很好的工作。"

Batty 继续说道,第二步需要考虑这些逻辑线程间的共享数据,以及在数据改变时需要发生哪些事件。然后,相应地创建互斥和条件变量。其它注意事项还包括:学会编写线程安全库代码以及处理内存带宽限制。

在两度折桂之后,Batty 会去寻求其它方式来消磨业余时间吗?这种可能性可谓微乎其微。作为 Sun 高级开发人员,Batty 极力避开管理事务而热衷于技术工作。事实上,至少 5,000 美元的奖金仅是其吸引他投身此项事务的其中一个原因。另一项原因在于:Batty 认为,和网络中其它顶级编程人员一比高低,是一件更为有趣的事情。

Batty 表示,"随着个人电脑迈向多核世纪,线程很可能成为程序员的一项基本技能。 参加竞赛则是练习和学习这类技术问题的一种很好的方法。"

如欲了解更多信息,请参阅多线程竞赛系列* 

位于密歇根州兰辛市、从事有关科学和软件写作的前英特尔公司编辑 Geoff Koch,最近在另一项英特尔® 软件网络竞赛——DARPA Grand Challenge 比赛中,描绘了英特尔所扮演的角色。如果希望与他取得联系,请发送电子邮件至 [email protected]

TopCoder 竞赛有一定难度,拥有高超技艺者方能表现上乘。尤为令人印象深刻的是,来到硅谷前曾在法国学习计算机科学的 Batty, 赢得了最近两项赛事的桂冠。这两项赛事由英特尔® 软件网络提供赞助,是在多核微处理器上进行 12 个月全球多线程竞赛系列的一部分。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章