论文部分内容阅读
随着英特网的爆炸性增长,网络系统必须在满足不断增长的网络链接速度的同时,能够灵活的应对网络的不断演化。对速度和灵活性的双重需求催生了新一代的网络硬件——网络处理器。为了适应新情况,网络处理器往往被设计成为并行多处理机系统。如果底层的体系结构的细节被原样暴露给程序员,编写这样的系统就意味着程序员必须进行直接的资源管理,分配和协调,这会使得编程成为一件不仅十分麻烦,而且非常容易犯错的工作。为了让程序员关心的焦点从这些细节转移到程序本身上面,高级语言和编程模型则隐藏了底层细节,并且用串行语义来描述程序,正如传统的C程序一样。如果采用高级语言编写程序,编译器就需要对程序进行自动并行化,把串行程序转换为并行程序,从而使得生成的代码能够正确的运行于多个处理器上。当针对多处理机系统对源程序进行自动并行化时,被高级语言和编程模型隐藏的细节必须得到正确的处理。其中,编译器必须保证引入了适当的同步代码,从而保持原来程序的串行语义。从网络程序的角度来看,需要进行同步的变量往往都是在处理不同的包时共享的程序内部状态。而另一方面,随着网络的爆炸和复杂化,不少网络程序变得拥有越来越多的状态,尤其是对网络协议栈中第四层以上的程序来说。其中的一个例子就是上层协议的网络程序中的会话状态。在这样的程序中,有更多的共享变量以及更多的数据相关。因此,编译器面临着的问题就是生成复杂的同步代码来保护程序中大量的内部状态在并行处理时不受到破坏。为了对编译器生成的同步进行优化,我们研究了针对Intel IXPauto-partitioning C编程模型的并行编译器,提出了一个全新的编译优化框架。在这个框架中,我们采用程序划分的方法来解决同步不同的线程时面临的各种困难和议题。实验给出了一个很好的性能结果,证明了我们的方法提升程序的并行性方面获得了可观的效果。