在Windows中使用OpenMP实现MATLAB / MEX功能

时间:2014-12-22 21:18:04

标签: c multithreading matlab openmp mex

我有一个功能,我需要使用多线程来加快处理时间。该函数用MATLAB / MEX编写。该功能的一般概述如下所示。 NINJNK的订单为200N532之间的整数。

#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成为多线程。我可以就此问题征得社会各界的意见吗?

0 个答案:

没有答案