我们都在为单处理器编写代码。我想知道我们何时能够编写多处理器的代码?
我们需要什么(软件工具、逻辑、算法)来实现这种转换?
编辑:在我看来,正如我们同时执行许多任务一样,我们需要将那些真实的解决方案(算法)转换成计算机语言。就像面向对象编程对过程式编程所做的那样。面向对象编程是比过程式编程更接近真实生活的编码风格,所以我希望能有那种类型的解决方案。
我们都在为单处理器编写代码。我想知道我们何时能够编写多处理器的代码?
我们需要什么(软件工具、逻辑、算法)来实现这种转换?
编辑:在我看来,正如我们同时执行许多任务一样,我们需要将那些真实的解决方案(算法)转换成计算机语言。就像面向对象编程对过程式编程所做的那样。面向对象编程是比过程式编程更接近真实生活的编码风格,所以我希望能有那种类型的解决方案。
遗憾的是,在大规模并发编程方面,除非编译器有所突破,否则我们将会抛弃我们对算法的了解(我认为甚至Don Knuth也说过这个)。阅读Erlang,可以一窥这种可能的未来。
有几种工具/语言很受欢迎或正在变得流行。如果您使用FORTRAN、C或C++,可以使用OpenMP(实现不太困难)或消息传递接口(MPI)库(强大且具有最大加速潜力,但也复杂且困难)。OpenMP使用预处理器指令来标记可以并行化的区域,特别是循环。MPI使用消息在进程之间传递数据,最大的困难是在不触发瓶颈和保持进程等待的情况下保持所有内容同步。然而,我会说MPI肯定已经过时了。在科学/高性能计算社区中已经清楚地表明,加速比很少值得额外的开发时间。
关于即将推出的编程语言,可以看看Fortress。它仍在设计中,但目标是创建一种比FORTRAN更易于进行科学计算的语言。程序将采用非常高级的数学语法进行指定。此外,并行性将是隐式的;程序员必须努力以串行方式完成任务。另外,它由Sun发起并基于java,因此具有可移植性。对于Java,现在你可以看看Parallel Java Library或DPJ(确定性并行Java!) 它将为您提供从代码中提取并行性的巨大帮助!!
没有简单的答案,而且在很多方面,即使是复杂的答案目前也还不足或不完整。如果您更具体地说明您想要的回复:指向开发库和工具的指针、教学材料、指向当前研究项目和该领域的问题,或其他什么?那么您将得到更好的答案。