所以我试图以这样一种方式并行化我的矩阵,即矩阵行除以提供的线程数,然后它们计算分配给它们的行数。关键是每次迭代都会减小矩阵的大小。
所以在主矩阵中,我将对子矩阵进行计算,并将该矩阵划分为多个线程。
为了使其更易于可视化,我将提供一些伪代码。
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
}
}
}问题是设置begin和end的值。因为矩阵的大小可能是质数,比方说991,所以计算的第一个“块”将不得不做额外的一行。
发布于 2015-09-25 07:38:11
问题是设置begin和end的值。因为矩阵的大小可能是质数,比方说991,所以计算的第一个“块”将不得不做额外的一行。
您可以计算每个线程的行数为
rowSize = (matrixSize - i)/numOfThreads这可能会给您留下一些剩余的行。您可以确定剩余的数量为
extraRows = (matrixSize - i) % numOfThreads您可以将额外的行赋给其中一个线程,或者在某些线程之间平均分配这些行。
https://stackoverflow.com/questions/32772574
复制相似问题