В этом примере показано, как отключить автоматическую параллелизацию определенного for цикл в MATLAB® код при помощи coder.loop.parallelize('never') директива.
Определите функцию MATLAB autoparExample:
Эта функция содержит два цикла:
mtimes (матричное умножение) функция содержит неявное for цикл, который итерируется над элементами матрицы x.
Явное for цикл, который вычисляет квадратный корень подмножества элементов матрицы y. The 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]);
}
}