当前位置:  开发笔记 > 编程语言 > 正文

在为C#程序编写数学函数时,F#能否表现良好?

如何解决《在为C#程序编写数学函数时,F#能否表现良好?》经验,为你挑选了1个好方法。

与C#相比,有没有人知道F#在性能方面的衡量标准.我有一个带有大量矢量操作,光线碰撞算法等的C#光线跟踪器,并认为它们可能更容易用F#表示.我不是要问F#在表达数学问题上有多好,这里已经回答了这个问题,而是我应该期待更好或更差的表现?由于光线跟踪是非常高性能的,即使是性能不佳的小案例也可能是错误的地方.

编辑:

似乎已经有很多关于这个问题的问题我找不到了(如果你真的用"F#"这个词搜索任何东西都没有结果).这里有一个好处是以下答案:

F#提供了一些可以带来改变的与性能相关的功能.

首先,.NET上委托的实现目前效率很低,因此,F#使用自己的FastFunc类型来实现高性能的一流功能.

其次,F#使用.NET元数据来传递内联函数,以便可以跨API导出它们,当然,这可以在某些情况下显着提高性能.

最后,模式匹配在C#中表达非常费力,因为语言缺少模式匹配,但几乎不可能保持优化的C#代码等同于许多非平凡模式匹配.相反,F#编译器在编译期间积极优化模式匹配.

相反,C#编译器更擅长使用IEnumerables优化循环,并且更好地优化值类型的计算(例如复杂算术).

干杯,Jon Harrop.

Rinat Abdull.. 7

是的,F#表现更好.

以下是在不同语言中实现的单线程算法的一些性能结果(基准激活函数方法用于神经网络):

C#:

10^7 iterations using Sigmoid1() took 3899,1979 ms
10^7 iterations using Sigmoid2() took 411,4441 ms

纯C:

10^7 iterations using sigmoid1: 628 ms
10^7 iterations using sigmoid2: 157 ms

F#:

10^7 iterations using sigmoid1: 588.843700 ms
10^7 iterations using sigmoid2: 156.626700 ms

更多细节



1> Rinat Abdull..:

是的,F#表现更好.

以下是在不同语言中实现的单线程算法的一些性能结果(基准激活函数方法用于神经网络):

C#:

10^7 iterations using Sigmoid1() took 3899,1979 ms
10^7 iterations using Sigmoid2() took 411,4441 ms

纯C:

10^7 iterations using sigmoid1: 628 ms
10^7 iterations using sigmoid2: 157 ms

F#:

10^7 iterations using sigmoid1: 588.843700 ms
10^7 iterations using sigmoid2: 156.626700 ms

更多细节

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有