F# 编译为具有即时编译器的 CLR。它是 ML 的一种方言,它是强类型的,允许所有与该类型架构相关的不错的优化;这意味着您可能会从 F# 获得合理的性能。为了比较,您还可以尝试将您的代码移植到 OCaml(IIRC 编译为本机代码),看看这是否会产生重大影响。
如果它真的太慢了,那么看看扩展硬件能让你走多远。通过现代 PC 或服务器提供的性能,除非您使用真正的 brobdinagian数据集,否则您似乎不太可能需要去任何异国情调的东西。数据集较小的用户在普通 PC 上可能没问题。
工作站为您提供的容量可能比标准桌面 PC 多一个数量级。像 HP Z800或XW9400 (其他几家制造商提供类似套件)这样的高端工作站可以采用两个 4 或 6 核 CPU 芯片、数十 GB 的 RAM(在某些情况下高达 192 GB),并具有多种用于高- 高速 I/O,如 SAS 磁盘、外部磁盘阵列或SSD。 这种类型的硬件很昂贵,但可能比大量的程序员时间便宜。您现有的桌面支持基础架构应该能够使用这种工具包。最可能的问题是在 64 位操作系统上运行 32 位软件的兼容性问题。在这种情况下,您可以使用各种选项(例如 VM 或 KVM 切换器)来解决兼容性问题。
下一步是 4 或 8 插槽服务器。相当普通的 wintel 服务器最多可以使用 8 个插槽(32-48 个内核),可能还有 512GB 的 RAM - 无需离开 Wintel 平台。这为您提供了在您选择的平台内相当广泛的选择,然后您必须去任何异国情调的1。
最后,如果您不能使其在 F# 中快速运行,请验证 F# 原型并使用 F# 原型作为控件构建 C 实现。如果这还不够快,你就有问题了。
如果您的应用程序可以以适合平台的方式构建,那么您可以查看一个更奇特的平台。根据您的应用程序的工作情况,您可以将其托管在集群、云提供商上,或者在GPU、 Cell 处理器或FPGA 上构建核心引擎。 但是,在这样做时,您会产生(相当可观的)额外成本和可能导致支持问题的外来依赖项。您可能还必须带一位知道如何对平台进行编程的第三方顾问。
毕竟,最好的建议是:吸吮它,看看。如果您对 F# 感到满意,您应该能够相当快地制作应用程序原型。看看它的运行速度有多快,不要太担心性能,直到你有一些明确的迹象表明它确实会成为一个问题。请记住,Knuth 说过,过早的优化在大约 97% 的情况下是万恶之源。如果您认为性能确实会造成麻烦,请留意天气问题并重新评估您的策略。
编辑:如果你想制作一个打包的应用程序,那么你可能会对性能更加敏感。在这种情况下,性能可能会比定制系统更早成为问题。但是,这并不影响基本的“试一试”原则。
- 例如,冒着开始流行词宾果游戏的风险,如果您的应用程序可以并行化并在无共享架构上运行,您可能会看到是否可以诱导其中一个云服务器提供商 [ducks] 托管它。可以构建适当的前端以在本地或通过浏览器运行。
然而,在这种类型的架构上,与数据源的互联网连接成为瓶颈。如果您有大型数据集,那么将这些数据上传到服务提供商就会成为问题。在本地处理大型数据集可能比通过 Internet 连接上传更快。