Excel中的多线程计算速度很慢

Yug*_*orf 5 architecture excel performance multithreading

我想知道是否有任何方法可以控制excel计算,以使WB中的几张纸并行地重新计算,而其他的则没有。我的问题是,在当前设置下,我拥有的顺序计算过程花费的时间太长。该序列是从VBA驱动的,如下所示:1)vba调用一个插件(excel-dna vb.net插件,它控制数据读取器和附加的数据库)2)插件将数据返回到工作表1。重新计算工作表2-3按顺序(第2页,然后3)3)第4至10页是按顺序重新计算的,但是由于每个独立地仅链接到第2页,因此理论上它们可以并行地重新计算-对吗?但是该怎么做呢?4)通过1)中所述的vba addin调用新数据再次开始过程

在笔记本电脑上运行数据的子集(64位,32位excel,intel i7)需要54.6秒。有趣的是,如果我关闭多线程,则需要25.8秒!而且,如果我在超高速计算机(2 x Intel Xeon X5570,四核“ Nehalem”架构,64位和64位excel)上运行它,它的速度比我的笔记本电脑还要慢,多线程处理需要230秒,而无线程处理则需要26秒。

我想知道是否有更好的方法可以利用多核和多线程。慢位似乎是excel重新计算,而不是加载速度。任何建议表示赞赏。

编辑:上面的描述有点简化-实际上,我还有一个迭代的“ calc / paste-vales / recalc”过程,该过程在工作表4-10上运行(迭代一直进行到达到所需的灵敏度为止,然后才算出整张纸)。我认为这使得在当前设计下运行wb计算不可行。

表格4-10相同(除了硬编码的输入参数外),彼此之间没有计算依赖性。如果每个的计算过程(提到的迭代过程和工作表计算)可以并行执行而不是顺序执行,我认为整个过程将会更快。

仅供参考,我已经进行了更明显的简化和测试(分解公式,分离易失函数等)。

在整个过程中运行我的整个数据集大约需要16个小时,这就是为什么我渴望找到一些改进方法。

谢谢!

Gov*_*ert 4

  • 这是阅读有关 Excel 计算性能的良好开端:http://www.decisionmodels.com/calcsecretsc.htm

  • 您可以使用 [ExcelFunction(IsThreadSafe=true)] 等属性将 Excel-DNA 函数标记为线程安全的,尽管这听起来不像这里的瓶颈。这将允许同时评估这些函数。

  • 如果您的 i7 处理器具有超线程(因此它向 Windows 报告 4 个核心,但实际上只有两个真正的核心),那么将 Excel 线程数设置为核心数(例如 2)而不是数字会更快处理器可以运行的线程数(Excel 默认值 - 可能是 4)。