加速互联网用户可访问的服务器上的科学计算的方法

时间:2010-09-27 03:10:38

标签: performance math parallel-processing

我对如何处理以下问题的任何传统智慧感兴趣。请注意,我是一个硬件人员,所以要小心使用行业知识/术语/首字母缩略词。

我正在提供一个在线应用程序,其中包括非常复杂的数学计算,例如快速傅里叶变换,涉及嵌套的for循环和非常大的数据阵列(每个1.6GB)。 Internet上的用户将访问此应用程序,输入一些自定义参数,并提交调用这些数学计算的作业。为了让用户的等待时间降到最低,并为多个同时用户(每个用户都有一个单独的线程)允许多个独立会话,我想知道如何加快数学计算,我预计这将是一个瓶颈。

我不是在寻找有关如何构建程序的建议(例如,尽可能使用整数数据类型而不是浮动,使用较小的数组等),但是我很感兴趣,一旦程序完成,可以做些什么来加快速度。

例如,如何根据需求自动访问CPU中的多个内核? (这是默认完成的还是我需要以某种方式管理过程?

或者,如何进行并行处理(在多个内核和/或机器之间打破循环)?

非常感谢任何实用建议。我确信我不是第一个需要这样做的人,因此我希望有可行的最佳实践方法随着需求而扩展。

提前致谢!

2 个答案:

答案 0 :(得分:4)

FFT方法可高度并行化。特别是在多维度上。

经典实施是FFTWIntel MKL

一种方法(取决于可用的硬件)是工作线程池(或进程,取决于配置)。

在我的工作中,我们在PC池和尽可能简单的数据包上取得了很大成功,这些数据包由一台PC排队,计算(以多核方式),并发送回用户。

不要尝试微量优化数学内容,而是使用上述库之一。专注于设计数据包,对计算进行排队(不要忘记某种配额/优先级),确保计算出的数据可靠地发送回必须对数据包进行连接的线程。

根据硬件(巨大的SMP计算机或PC场),问题不同。

(如果您可以选择,请去PC农场。)

编辑:您可能需要考虑使用OpenMP来自动进行并行化循环。至于PC农场,从灵活性的角度来看,它们比大型计算器具有优势:它们可以很好地扩展,它们并不昂贵,并且可以有效地购买/出售/重复使用。 Linux可能是一个不错的选择,但这取决于你习惯的环境。

可悲的是,我必须说(据我所知)没有好的库可以在PC场上可靠而有效地分发计算请求。这个问题很难,因为你必须考虑到故障,网络通信,拥塞,分发过程......

答案 1 :(得分:1)

你没有说明你的设置是什么(java,php,.net你将主持系统还是将它托管在某处)所以这只是一些关于袖口的想法:

据我所知,您可能使用的大多数现代系统都会在可用的处理器核心上传播作业。

通过负载平衡http://www.loadbalancing.org/

,可以相对轻松地将工作负载分散到多个服务器上

您还可以查看“云计算”,您的应用程序将由亚马逊等人托管,您支付的费用(或多​​或少)

http://aws.amazon.com/ec2/

其他提供商可用。

我相当确定如果您提供更多详细信息,您将获得更具体的答案。