omp以随机顺序并行写入

时间:2015-05-02 05:52:01

标签: c++ openmp rcpp armadillo

我正在使用omp来编写像

这样的数组
    mat out(numGenes,8);
    pragma omp parallel for  schedule(static)
        for (int gene2 = 0; gene2< numGenes; gene2++)        
        {
            scna2 = scnaq.col(gene2);
            out(gene2, 0) = myRanksum(scna2(grp1), scna2(grp2));
            out(gene2, 1) = myRanksum(scna2(grp1), scna2(grp3));
            out(gene2, 2) = myRanksum(scna2(grp2), scna2(grp3));
    }

然而,我发现以变量out写的输出是随机顺序的。我的意思是out(1,)没有对应于&#34; gene2 = 1&#34;的输出。我认为每个作业都是按随机顺序排列的,但out是用公共数组的当前索引编写的。我正在使用http://arma.sourceforge.net/docs.html和Rcpp(http://cran.r-project.org/web/packages/Rcpp/index.html)。

1 个答案:

答案 0 :(得分:0)

我找出了问题的原因。 gene2变量在pragma中声明,因此它是每个线程的私有变量,并在out变量中随机写入。正确的方法是在pragma之外声明gene2变量。