Многопоточность в скомпилированной MATLAB сборке .NET - PullRequest
2 голосов
/ 20 сентября 2011

Я изучаю возможность использования скомпилированной .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 секунды перед возвратом.

Выполнение вышеуказанного кода,Я наблюдаю сообщение «Elapsed (1)» через 3 секунды, а сообщение «Elapsed (2)» через 6 секунд.Это заставило бы меня думать, что одновременные вызовы среды выполнения MATLAB всегда будут ставиться в очередь однопоточным способом.

Мои вопросы:

  1. Есть ли способ разрешитьмногопоточность в этом сценарии?

  2. В других средах (особенно меня интересует среда Java), будет ли это ограничение по-прежнему встречаться?

1 Ответ

3 голосов
/ 20 сентября 2011

У вас есть Parallel Computing Toolbox для MATLAB?Это можно использовать в сочетании с компилятором MATLAB для создания сборок .NET, которые выполняют параллельные вычисления с использованием процессорных ядер, доступных на локальном компьютере, или путем отправки задания в кластер.В противном случае ваш код MATLAB будет выполняться последовательно.Кстати, Parallel Computing Toolbox основан на MPI и структурирован для работы с «заданиями» и «задачами».Потоки - это абстракция гораздо более низкого уровня, и ее сложнее правильно использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...