尝试使用 UDF .xll 在 HPC 网格上并行化 Excel
Posted
技术标签:
【中文标题】尝试使用 UDF .xll 在 HPC 网格上并行化 Excel【英文标题】:Trying to use UDF .xll to parallelize Excel on HPC grid 【发布时间】:2013-02-27 14:04:12 【问题描述】:我希望在 HPC 网格上并行化 Excel 计算,我正在使用 Excel 2007,因此我试图通过 XLL 中的 UDF 对其进行多线程处理,因为这是唯一的方法(至少在 2007 年)。
我想用 C# 编写 XLL,正如this thread 建议的那样,我可以使用exceldna。
但我不明白我应该如何多线程。在多线程处理时,我是否必须在 C# 中重写所有 VBA 函数?我可以只创建几个线程,每个线程调用一个 VBA 宏吗?
【问题讨论】:
【参考方案1】:Excel-DNA 允许您使用可能有用的不同方法:
您可以将 UDF 标记为“线程安全”以使用 Excel's support for multithreaded calculation - 在这种情况下,Excel 控制线程,并将从不同线程同时调用您的 UDF, 您可以使用asynchronous functions in Excel-DNA(可能使用 .NET 4 任务 API)开始网格上的工作,完成后通知 Excel 重新计算, 您可以使用 Excel-DNA 中的Reactive Extensions support 并在 Rx 库上构建计算管道, 您可以使用 Excel 2010 中内置的 support for Windows HPC clusters,使用 Excel-DNA 在客户端和群集节点上托管托管代码。在这些情况下,调用 Excel VBA 没有任何意义 - Excel 将始终确保 VBA 代码在 Excel 的主线程上运行。
如果您的函数代码在 VBA 中,您可能会考虑使用 using VB.NET for your Excel-DNA add-in,而不是 C# - 它可能会使您轻松迁移到 .NET。您还可以在托管的 Excel-DNA 加载项中混合使用 C# 和 VBA。
【讨论】:
我正在浏览您的文档,它似乎符合我的要求,但我对第一个选项有一个问题,如何从 XLL 访问 Excel 文件?因为似乎只有 .COM 接口可以通信,我想从多个线程调用它。如何访问 google 组以查看所有消息?非常感谢。 在 Google 群组上查看帖子没有任何限制。使用 Excel 的多线程计算时,您不应该从 UDF 访问 Excel 文件,您只需返回一个值。 Excel 负责线程,您只需注册函数实现。以上是关于尝试使用 UDF .xll 在 HPC 网格上并行化 Excel的主要内容,如果未能解决你的问题,请参考以下文章
在 HPC 上使用 scikit-learn 函数的并行选项的简单方法
Selenium 网格 - 测试不是并行运行,而是在每个模拟器上运行两次