【问题标题】:Multithreading in MATLAB compiled .NET assemblyMATLAB 中的多线程编译的 .NET 程序集
【发布时间】:2011-09-19 20:24:22
【问题描述】:

我正在研究使用 .NET 编译的 MATLAB 程序集(使用 Matlab 编译器运行时获得)来同时(以多线程方式)执行多段代码的可能性。

我的代码读取

Thread t = new Thread(new ThreadStart(
    () =>
    {
        dotnetclass AClass_1 = new dotnetclass();
        Stopwatch sw = new Stopwatch();
        sw.Start();
        AClass_1.math_on_numbers(2, a, b);
        sw.Stop();
        Console.WriteLine("Elapsed (1): " + sw.Elapsed);
    }));
Thread t2 = new Thread(new ThreadStart(
    () =>
    {
        dotnetclass AClass_2 = new dotnetclass();
        Stopwatch sw = new Stopwatch();
        sw.Start();
        AClass_2.math_on_numbers(2, a, b);
        sw.Stop();
        Console.WriteLine("Elapsed (2): " + sw.Elapsed);
    }));  
t.Start();
t2.Start();

其中dotnetclass 在 MATLAB .NET 程序集中定义,函数 math_on_numbers 执行一些伪数学运算并在返回前休眠 3 秒。

执行上面的代码,我在 3 秒后观察到“Elapsed (1)”消息,在 6 秒后观察到“Elapsed (2)”消息。这会让我觉得对 MATLAB 运行时的并发调用将始终以单线程方式排队。

我的问题:

  1. 有没有办法在这种情况下允许多线程?

  2. 在其他框架中(我对 Java 环境特别感兴趣),还会出现这种限制吗?

【问题讨论】:

    标签: c# java multithreading matlab


    【解决方案1】:

    您有 MATLAB 的并行计算工具箱吗?您可以将其与 MATLAB 编译器结合使用,以生成 .NET 程序集,这些程序集可以使用本地计算机上可用的处理器内核或通过将作业提交到集群来执行并行计算。否则,您的 MATLAB 代码将按顺序运行。顺便说一下,并行计算工具箱是基于 MPI 的,并且被构造为对“作业”和“任务”进行操作。线程是一种低得多的抽象,更难正确使用。

    【讨论】:

    • 嗨,马特,感谢您的回答。如果我理解正确,即使使用并行计算工具箱,并发运行作业的数量也会受到可用处理器数量的限制。对吗?
    • 您可以运行尽可能多的工作进程,只要您有足够的许可。但是,出于性能原因,只运行与可用处理器内核数量相等的工作程序(或者更少,如果除了 MATLAB 之外还有其他应用程序也在使用 CPU 资源)才有意义。
    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多