首页 > 解决方案 > 如何设置矩阵的值与 mex 和 openmp 并行?

问题描述

我在处理 mex 中的巨大矩阵时遇到问题。这是我的代码。我想在索引相同时对值求和。

#pragma omp parallel for schedule(static)
      for( i=0; i<n; i++ ) {
          C[(mwSize)*Ar++ - 1] += *Av++;
      }

它得到了分段错误。我认为这是因为我们并行更新了矩阵。但我不确定如何处理它,因为尺寸太大(800000x1)。请帮帮我,谢谢。

已编辑。这是完整的代码。

#include <omp.h>
#include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    mwSize i, n, m ;
    double *Ar, *Av, *C ;

      n = mxGetNumberOfElements(prhs[0]);
      m = mxGetNumberOfElements(prhs[2]);

      Ar = mxGetPr(prhs[0]);
      Av = mxGetPr(prhs[1]);
      plhs[0] = mxCreateDoubleMatrix(m,1,mxREAL);
      C = mxGetPr(plhs[0]);

#pragma omp parallel for schedule(static)
      for( i=0; i<n; i++ ) {
          C[(mwSize)Ar[i] - 1] += Av[i];
      }
  }

标签: c++multithreadingmatrixopenmpmex

解决方案


推荐阅读