我的当前任务是优化一个蒙特卡罗模拟,该模拟计算一组债务人的区域资本充足率数据。
它目前运行速度太慢了,需要在生产中运行并进行每日多次运行。此外,结果数据的粒度将需要逐步提高到桌面甚至可能是书籍级别,我所得到的代码基本上是业务部门在半生产能力下使用的原型。
该应用程序目前是单线程的,因此我需要将其变为多线程的,可以考虑使用System.Threading.ThreadPool
或者Microsoft Parallel Extensions库,但是我在这家银行的服务器上受到.NET 2的限制,所以我可能必须考虑这个人的移植方案,http://www.codeproject.com/KB/cs/aforge_parallel.aspx。
我使用dotTrace(http://www.jetbrains.com/profiler)的试用版对应用程序进行了分析。还有哪些好的分析工具?免费的?
执行时间的很大一部分用于生成均匀随机数,然后将其转换为正态分布的随机数。他们使用C# Mersenne twister 实现。我不确定他们是否得到了它,或者这是否是生成均匀随机数的最佳方法(或最佳实现)。然后将其翻译为正态分布版本以供计算使用(我尚未深入研究翻译代码)。
此外,以下内容的使用体验如何?
http://quantlib.org(QuantLib官网)
http://www.qlnet.org(QuantLib的C#移植版)或者
http://www.boost.org(Boost库)
你知道其他的替代品吗?我是一名C#开发者,所以更喜欢C#,但是用C++封装也不是问题,对吧?
也许使用C++实现会更快。我在想这些库中可能有最快的方法直接生成正态分布随机数,无需转换步骤。此外,它们可能还有一些其他有助于后续计算的函数。
此外,这台电脑是四核Opteron 275,8 GB内存,但运行的是Windows Server 2003 Enterprise 32位。我应该建议他们升级到64位操作系统吗?如果有支持这个决定的文章链接,那真的太感谢了。
总之,非常感谢您提供的任何建议和帮助。