我目前的任务是优化蒙特卡洛模拟,该模拟按地区计算一组债务人的资本充足率数据。
它的运行速度要慢约 10 倍,这对于需要在生产中运行以及需要运行次数或每日运行的地方来说太慢了。此外,在某个阶段,结果数据的粒度可能需要改进到桌面级别,我得到的代码基本上是一个原型,业务部门在半生产能力中使用它。
该应用程序当前是单线程的,因此我需要将其设为多线程,可能会查看Microsoft Parallel ExtensionsSystem.Threading.ThreadPool
库,但我受限于该银行服务器上的 .NET 2,因此我可能不得不考虑这个人的端口,http://www.codeproject.com/KB/cs/aforge_parallel.aspx。
我正在尽我最大的努力让他们升级到 .NET 3.5 SP1,但对于这种规模的组织来说,这是一项重大的工作,在我的合同期限内可能是不可能的。
我已经使用dotTrace ( http://www.jetbrains.com/profiler )的试用版分析了应用程序。还有哪些其他好的分析器?免费的?
大量执行时间用于生成均匀随机数,然后将其转换为正态分布的随机数。他们正在使用 C# Mersenne twister实现。我不确定他们从哪里得到它,或者它是否是最好的方法(或最好的实现)来生成统一的随机数。然后将其转换为用于计算的正态分布版本(我还没有深入研究翻译代码)。
另外使用以下内容是什么体验?
http://www.qlnet.org(quantlib 的 C# 端口)或
你知道的任何替代方案?我是 C# 开发人员,所以更喜欢 C#,但是C++ 的包装器应该不是问题,不是吗?
利用 C++ 实现可能更快。我认为其中一些库将具有直接生成正态分布随机数的最快方法,而无需转换步骤。他们也可能有一些其他的功能,这将有助于后续的计算。
此外,这台计算机是四核 Opteron 275、8 GB 内存,但 Windows Server 2003 Enterprise 32 位。我应该建议他们升级到64 位操作系统吗?任何支持此决定的文章链接都将不胜感激。
无论如何,非常感谢您提供的任何建议和帮助。