并行矩阵计算

时间:2015-09-24 23:33:05

标签: c multithreading matrix parallel-processing

所以我试图以这样的方式平行我的矩阵,即矩阵行除以提供的线程数,并计算分配给它们的行。踢球者是每次迭代都会减小矩阵的大小。

因此,在主矩阵中,我将对子矩阵进行计算,并在线程之间划分该矩阵。

为了使这更容易可视化,我将提供一些伪代码。

for (i = 0; i < matrixSize; i++)
{
     begin = (((matrixSize - i)/numOfThreads) * threadNum + i);
     end = (((matrixSize - i)/numOfThreads) * (threadNum + 1) + i - 1);

        for(j = begin ; j < end; j++) {
            // get which row to calculate within the main matrix
            for (k = i + 1; k < nsize; k++) {
                // calculations for the columns
            }
         }    
}

问题是设置开始和结束的值。因为矩阵的大小可能是素数,比如991,第一个&#34;块&#34;计算将不得不做一个额外的行。

1 个答案:

答案 0 :(得分:0)

  

问题是设置开始和结束的值。因为矩阵的大小可能是素数,比如991,所以计算的第一个“块”将需要额外的行。

您可以将每个线程的行数计算为

rowSize = (matrixSize - i)/numOfThreads

这可能会留下一些遗留的行。您可以确定剩余的数量为

extraRows = (matrixSize - i) % numOfThreads

您可以将额外的行分配给其中一个线程,或者在某些线程之间平均分配它们。