Я запускаю цикл в mex-файле из Matlab, используя OpenMP, и он не останавливается после достижения заранее определенного числа итераций.
Я компилирую файл с помощью этой команды:
mex myfile.c CFLAGS= \$CFLAGS -fopenmp LDFLAGS=\$LDFLAGS -fopenmp
и мой код выглядит следующим образом:
#include <stdio.h>\n'
#include "mex.h"\n'
#include "omp.h"\n'
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
int i;
int numthreads = 8;
#pragma omp parallel for default(none) num_threads(numthreads) private(i)
for (i = 0; i < 20; i++) {
int tid = omp_get_thread_num();
printf("Hello world number %d from omp thread %d\n", i, tid);
}
}
Я ожидал получить «Hello world 0 ...» через «Hello world 19 ...», только по одному в любом порядке.Вместо этого они продолжают повторяться бесконечно.
Hello world number 0 from omp thread 0
Hello world number 1 from omp thread 0
Hello world number 2 from omp thread 0
Hello world number 3 from omp thread 1
Hello world number 4 from omp thread 1
Hello world number 5 from omp thread 1
Hello world number 12 from omp thread 4
Hello world number 13 from omp thread 4
Hello world number 16 from omp thread 6
Hello world number 17 from omp thread 6
Hello world number 18 from omp thread 7
Hello world number 19 from omp thread 7
Hello world number 6 from omp thread 2
Hello world number 7 from omp thread 2
Hello world number 8 from omp thread 2
Hello world number 8 from omp thread 2
Hello world number 9 from omp thread 3
Hello world number 10 from omp thread 3
Hello world number 11 from omp thread 3
Hello world number 14 from omp thread 5
Hello world number 15 from omp thread 5
Hello world number 0 from omp thread 0
Hello world number 1 from omp thread 0
Hello world number 2 from omp thread 0
Hello world number 12 from omp thread 4
Hello world number 13 from omp thread 4