Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# FORTRAN或C(或托管代码)中的数据挖掘模型?_F#_Fortran_Data Mining - Fatal编程技术网

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

F# FORTRAN或C(或托管代码)中的数据挖掘模型?,f#,fortran,data-mining,F#,Fortran,Data Mining,我们计划为windows开发一个数据挖掘包。程序核心/计算引擎将在F#中开发,GUI材料/数据库绑定等将在C#和F#中完成 然而,我们还没有决定模型的实现。因为我们需要高性能,所以这里可能无法使用托管代码(这里有任何异议?)。问题是,用FORTRAN开发模型是否合理,还是我们应该坚持使用C(或者C++)。我们正在考虑在某个时候使用OpenCL来创建合适的模型——对于这些情况,从托管代码->FORTRAN->C->OpenCL调用开始感觉很有趣 有什么建议吗?我建议现在还不要为优化而烦恼。首先尝试

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

然而,我们还没有决定模型的实现。因为我们需要高性能,所以这里可能无法使用托管代码(这里有任何异议?)。问题是,用FORTRAN开发模型是否合理,还是我们应该坚持使用C(或者C++)。我们正在考虑在某个时候使用OpenCL来创建合适的模型——对于这些情况,从托管代码->FORTRAN->C->OpenCL调用开始感觉很有趣


有什么建议吗?

我建议现在还不要为优化而烦恼。首先尝试获得一个工作原型,然后找出计算时间花在哪里。如果需要,您可以将最大的瓶颈转移到C或Fortran中,然后看看它有多大的不同

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

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

如果它真的太慢了,那么看看扩展硬件能让你走多远。由于现代PC或服务器提供的性能,除非您使用的是真正的数据集,否则您不太可能需要访问任何异国情调。拥有较小数据集的用户在普通PC上也可以

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

下一步是4或8套接字服务器。相当普通的wintel服务器最多可使用8个插槽(32-48核)和512GB的RAM,而无需离开wintel平台。这在你选择的平台中为你提供了相当广泛的选择,然后你就可以去任何异国情调的地方了

最后,如果不能使其在F#中快速运行,请验证F#原型并使用F#原型作为控件构建C实现。如果这还不够快,你就有问题了

如果您的应用程序能够以适合该平台的方式进行结构化,那么您可以选择一个更奇特的平台。根据您的应用程序的工作方式,您可能能够将其托管在集群、云提供商或在服务器上构建核心引擎,但是,这样做会带来(相当可观的)额外成本和可能导致支持问题的外来依赖性。您可能还需要带一位知道如何为平台编程的第三方顾问

毕竟,最好的建议是:吮吸它,然后看看。如果您对F#感到满意,那么您应该能够相当快地对应用程序进行原型化。看看它的运行速度有多快,不要太担心性能,除非你有明确的迹象表明它确实会成为一个问题。记住,Knuth说过早的优化在97%的时候是万恶之源。如果你认为业绩真的会带来麻烦,请密切关注天气问题,重新评估你的策略

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


  • 例如,如果您的应用程序可以并行化并在无共享体系结构上工作,您可能会面临启动buzzword bingo游戏的风险,您可能会看到是否有一个云服务器提供商[ducks]可以托管它。可以构建适当的前端以在本地或通过浏览器运行

    然而,在这种类型的体系结构上,与数据源的internet连接成为瓶颈。如果您有大型数据集,那么将这些数据集上载到服务提供商将成为一个问题。在本地处理大型数据集可能比通过internet连接上载数据集更快
    甚至在瓶颈处投入更多的硬件。这可能比浪费开发人员的时间要便宜。无论如何:让它工作,衡量性能,然后优化。谢谢你的回答。这当然是一个正确的观点。无论如何,我们可能会使用F#作为原型,因为它是一种非常好的语言。让我们看看这个问题到底有多严重。虽然我有一种直觉,认为需要的优化算法(支持向量机训练等)将是大数据集的一个很大的瓶颈。@ Richard:在C++(和其他语言)中有很多优秀的开源SVM库。您可能可以从F#与这些进行交互。谢谢。我们的目标是普通用户PC,而不是专用工作站(我们的目标基本上是一个易于使用的应用程序,类似于excel,但具有强大的线性代数支持和易于使用的集成数据挖掘模型)。我们先试试F。