Задайте максимальное количество потоков в 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-функция работает на максимальном количестве ядер, доступных во время вызова.