我正在使用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)。
答案 0 :(得分:0)
我找出了问题的原因。 gene2变量在pragma中声明,因此它是每个线程的私有变量,并在out变量中随机写入。正确的方法是在pragma之外声明gene2变量。