FORTRAN或C(或托管代码)中的数据挖掘模型?

时间:2009-10-19 07:41:13

标签: f# fortran data-mining

我们正计划为windows开发一个数据挖掘包。程序核心/计算引擎将在F#中使用GUI填充/数据库绑定等在C#和F#中完成。

但是,我们还没有决定模型的实现。由于我们需要高性能,我们可能不能在这里使用托管代码(这里有任何异议吗?)。问题是,在FORTRAN中开发模型是否合理,或者我们应该坚持使用C(或者C ++)。我们正在考虑在某些时候使用OpenCL来获得合适的模型 - 从托管代码开始感觉很有趣 - > FORTRAN - > C - >针对这些情况的OpenCL调用。

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

F#编译到CLR,它有一个即时编译器。它是ML的一种方言,它是强类型的,允许所有与这种类型的架构相关的好的优化;这意味着您可能会从F#获得合理的性能。为了进行比较,您还可以尝试将代码移植到OCaml(IIRC编译为本机代码)并查看是否会产生重大差异。

如果真的太慢,那么看看缩放硬件会给你多远。通过现代PC或服务器提供的性能,除非您使用真正的brobdinagian数据集,否则您似乎不太需要去寻找任何异国情调。拥有较小数据集的用户在普通PC上可能没问题。

工作站可能比标准的dekstop PC提供的容量大一个数量级。像HP Z800XW9400这样的高端工作站(其他几家厂商提供的类似工具包)可以使用两个4或6核CPU芯片,数十GB的RAM(一些高达192GB)并且有各种高速I / O选项,如SAS磁盘,external disk arraysSSDs.这种类型的硬件价格昂贵,但可能比程序员的大量时间便宜。您现有的桌面支持基础架构不应该能够使用此类套件。最可能的问题是在64位O / S上运行32位软件的兼容性问题。在这种情况下,您可以使用各种选项(如VM或KVM切换器)来解决兼容性问题。

下一步是4或8套接字服务器。相当普通的wintel服务器最多可以支持8个插槽(32-48个内核)和512GB内存 - 无需离开Wintel平台。在您必须选择任何异国情调1之前,这为您提供了相当多的选择。

最后,如果你无法在F#中快速运行,请验证F#原型并使用F#prototype作为控件构建C实现。如果那还不够快你就会遇到问题。

如果您的应用程序可以以适合平台的方式构建,那么您可以查看更具异国情调的平台。根据您的应用程序的工作原理,您可以在集群,云提供商上托管它,或者在GPU, Cell processorFPGA.上构建核心引擎但是,这样做您可能会遇到(非常可观的)额外成本和可能导致支持问题的异国情况。您可能还需要聘请知道如何对平台进行编程的第三方顾问。

毕竟,最好的建议是:吮吸它,看看。如果您对F#感到满意,您应该能够快速地对应用程序进行原型设计。看看它的运行速度有多快,在你明确表明它确实存在问题之前不要过多担心性能。请记住,Knuth说过早优化是所有邪恶的根源大约97%的时间。如果您认为性能确实会导致问题,请密切关注问题并重新评估您的策略。

编辑:如果您想制作打包的应用程序,那么您可能会比其他方式更具性能敏感性。在这种情况下,性能可能会比定制系统更快地成为一个问题。但是,这并不影响基本的“吮吸和看”原则。


  1. 例如,冒着开始使用流行语宾果游戏的风险,如果您的应用程序可以并行化并使其在无共享体系结构上工作,您可能会看到是否可以将其中一个云服务器提供程序[ducks]引入主持它。可以构建适当的前端以在本地或通过浏览器运行。
    然而,在这种类型的架构中,与数据源的互联网连接成为瓶颈。如果您有大型数据集,那么将这些数据集上传到服务提供商就成了问题。在本地处理大型数据集可能比通过互联网连接上传它更快。

答案 1 :(得分:3)

我建议不要再考虑优化了。首先尝试获得一个工作原型,然后找出计算时间花在哪里。如果需要,您可以将最大的瓶颈移到C或Fortran中 - 然后看看它有多大差异。

正如他们所说,通常90%的计算花费在10%的代码中。