У меня есть следующий простой код C, который скомпилирован в MATLAB с использованием mex -v COMPFLAGS="$COMPFLAGS -fopenmp" LDFLAGS="$LDFLAGS -fopenmp" MEXTESTER.c
. Я использую MATLAB R2019a, работающий на Windows 10 Home 64-бит с 6 доступными ядрами. Mex настроен на использование компилятора MinGW64.
#include "mex.h"
#include <stdio.h>
#include <omp.h>
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
printf("max threads = %d\n",omp_get_max_threads());
#pragma omp parallel
{
printf("ID = %d\n",omp_get_thread_num());
printf("nThreads = %d\n",omp_get_num_threads());
}
printf("End\n");
return;
}
Однако при запуске этого кода я получаю следующий результат:
max threads = 6
ID = 0
nThreads = 1
End
Почему выполняется только 1 поток? Если я перенесу код из Mex и просто скомпилирую его как обычный файл C, это даст ожидаемый результат (поэтому ID = 0-5 и nThreads = 6)
Я прочитал Почему OpenMP в mex-файле создает только 1 поток? , однако ответ заключался в том, чтобы обеспечить поддержку OpenMP при компиляции, что, как мне кажется, я уже сделал.
Кто может помочь?