Задайте максимальное количество потоков в parfor- Циклы

В этом примере показано, как задать максимальное количество потоков для parfor-цикл. Поскольку вы задаете максимальное количество потоков для использования, сгенерированная MEX-функция выполняет итерации цикла параллельно на таком количестве ядер, как доступно, до максимального количества, которое вы задаете. Если вы задаете больше потоков, чем доступно ядер, MEX-функция использует доступные ядра.

  1. Написание MATLAB® функция, specify_num_threads, который использует один вход, чтобы задать максимальное количество потоков для выполнения parfor-цикл в сгенерированной MEX-функции. Для примера:

    function y = specify_num_threads(u) %#codegen
      y = ones(1,100);
      % u specifies maximum number of threads
      parfor (i = 1:100,u)
        y(i) = i;
      end
    end
    

  2. Сгенерируйте MEX-функцию для specify_num_threads. Использование -args {0} чтобы указать, что входной u является скалярным двойником. Использование -report чтобы сгенерировать отчет генерации кода. В командной строке MATLAB введите:

    codegen -report specify_num_threads -args {0}
    codegen генерирует MEX-функцию, specify_num_threads_mex, в текущей папке.

  3. Запустите MEX-функцию, указав, что она пытается работать параллельно в четырех потоках. В командной строке MATLAB введите:

    specify_num_threads_mex(4)

    Сгенерированная MEX-функция работает до четырех ядер. Если доступно менее четырех ядер, MEX-функция выполняется на максимальном количестве ядер, доступном во время вызова.