我需要写的软件,将做大量的数学。大多数情况下,计算DCT将是整数的矩阵乘法。与VB .Net相比,我期望代码在原生C中运行的速度要快多少?2的因子,10的因子,1000的因子…?是否有人尝试并收集了这方面的统计数据?
发布于 2010-03-04 21:39:54
.NET代码由JIT编译器编译成本机代码,因此在这两种情况下都会得到本机代码。
不同之处在于,C代码在计算方面的开销较少,因此您可能会预期性能差异为2倍。
发布于 2010-03-04 21:41:46
.Net代码在执行前会被即时编译为本机代码,因此它通常不应该比本机代码慢。我期望因子小于10。
此外,自适应优化技术在代码运行时分析代码,获得比典型静态编译器更多的信息。因此,JIT可以为进一步的优化做出更明智的决策
发布于 2010-03-06 05:08:02
如果你选择了正确的场景,VB的速度是C的93.7%。
实际上,如果你的“原生C”包含对malloc()和free()的常规调用,任何像VB.Net这样的垃圾收集语言都会绕过它。GC可以比内部循环中的mallocs快10倍。
如果您分解并使用C,请尝试重用您只声明一次的结构,而不是创建新的结构,以避免此问题。即使在VB中,如果您的解决方案适合它,这也可能是有益的。然而,它将更难编程,而且GC非常快。
至于边界/溢出检查,如果速度很重要,并且测试表明它们不会发生,并且您不会因为错误或异常而冒生命或数百万人的风险,那么它们就是浪费时间。但是如果你不能摆脱它们,你的时间很可能在一种你可以更快编程的语言中更有价值。
如果你期望任务的大小和使用量很大,那就用一个控制程序拆分任务,并将分配的“任务定义”存储到一个共享目录中,每个任务求解器有一个文件,或者是一个数据库。然后,您可以为每个处理器(每个HT CPU 2个)或网络计算机运行一个求解器。厌倦队列结构--很难原子地“标记并获取数据如果不被获取”。你知道你要启动多少任务解算器。我用我开发的一个图像工具来做这件事,它比预期的要容易得多,而且它比以前的版本更好用。另外,如果您将多个进程与一个可适当划分的问题域结合使用,则可以避免多线程带来的轻微到严重的编程负担。或者让你的同事相信你的大括号放在了正确的位置。和平。
https://stackoverflow.com/questions/2379590
复制相似问题