В этом примере показано, как отключить автоматическую распараллеливание определенного for цикл в коде MATLAB ® с помощью coder.loop.parallelize('never') директива.
Определение функции MATLAB autoparExample:
Эта функция содержит два цикла:
mtimes (матричное умножение) функция содержит неявное for цикл, который итерирует элементы матрицы x.
Явное for цикл, который вычисляет квадратный корень подмножества элементов матрицы y. coder.loop.parallelize('never') директива отключает автоматическое распараллеливание для этого цикла.
Создание объекта конфигурации создания кода для статической библиотеки. Установите EnableAutoParallelization свойство для true. Укажите типы ввода как векторы строк 1 на 2000 и создайте код.
Code generation successful: View report
Откройте отчет о создании кода и проверьте созданный код. autoparExample функция:
Сгенерированный код содержит параллельный цикл для операции умножения.
Явное for цикл преобразуется в последовательный цикл в сгенерированном коде. Этому циклу предшествовал coder.loop.parallelize('never') директива в коде MATLAB. Так, генератор кода не распараллелил его.
void autoparExample(double x[2000], double y[2000])
{
int b_i;
int i;
if (!isInitialized_autoparExample) {
autoparExample_initialize();
}
#pragma omp parallel for num_threads(omp_get_max_threads()) private(i)
for (i = 0; i < 2000; i++) {
x[i] *= 17.0;
}
/* Pragma to disable automatic parallelization of for-loops */
for (b_i = 0; b_i < 1991; b_i++) {
y[b_i + 9] = sqrt(y[b_i + 9]);
}
}