我有一个功能,我需要使用多线程来加快处理时间。该函数用MATLAB / MEX编写。该功能的一般概述如下所示。 NI
,NJ
,NK
的订单为200
,N
是5
到32
之间的整数。
#include "mex.h"
#include <omp.h>
double spawn_threads(/*my variables in the argument*/)
{
for( int k = 0; k < NK; k++ )
for( int j = 0; j < NJ; j++ )
for( int i = 0; i < NI; i++ )
{
// a small for-loop.
for( k1 = 0; k1 < N; k1++ )
for( j1 = 0; j1 < N; j1++ )
for( i1 = 0; i1 < N; i1++ )
{
// Do some calculation.
}
// another small for-loop.
for( k1 = 0; k1 < N; k1++ )
for( j1 = 0; j1 < N; j1++ )
for( i1 = 0; i1 < N; i1++ )
{
// Do some calculation.
}
call_a_function_using_omp();
call_a_function_not_using_omp();
// another for-loop.// another small for-loop.
for( k1 = 0; k1 < N; k1++ )
for( j1 = 0; j1 < N; j1++ )
for( i1 = 0; i1 < N; i1++ )
{
// Do some calculation.
}
// A small linear system of size 3x3.
call_LAPACK_linear_system_solver();
}
void mexFunction(int nlhs,mxArray* plhs[], int nrhs, const mxArray* prhs[])
{
// Some initialization
/*Do the parallel computing*/
spawn_threads(/*my variables for performing the computation*/);
}
在线搜索后,我发现我可以在函数spawn_threads
的开头使用以下内容:
#pragma omp parallel for shared(/*my variables in the argument*/) num_threads(8)
我将使用Microsoft Visual C++ 2013 Professional (C)
编译它:
mex my_multithreaded_openmp.c COMPFLAGS="/openmp $COMPFLAGS"
如果我有三个嵌套循环,每个循环大小为200
,如果我在外循环之前使用#pragma omp parallel for
会发生什么情况,例如8
个线程?
#pragma omp parallel for
是MATLAB parfor
中的m
的等效版本 - 文件吗?
我很高兴知道可以使用哪些方法来使函数spawn_threads
成为多线程。我可以就此问题征得社会各界的意见吗?