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