В этом примере показано, как отключить автоматическую параллелизацию определенного 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]);
}
}