【发布时间】:2015-09-24 23:33:05
【问题描述】:
所以我试图以这样一种方式并行化我的矩阵,即矩阵行除以提供的线程数,然后它们计算分配给它们的行。更重要的是,每次迭代都会减小矩阵的大小。
所以在主矩阵中,我将计算一个子矩阵并在线程之间划分该矩阵。
为了使这更容易可视化,我将提供一些伪代码。
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,所以第一个“块”计算将不得不多做一行。
【问题讨论】:
-
计算是什么?可能不值得做这个平行!考虑过使用 GPU 吗?
-
我正在做高斯消元并行,这是为了测试以查看性能增强 - 为学校!
-
考虑工作线程。过于平行不会有很好的好处。尝试将其限制为 CPU 的数量。
-
是的,我们正在开发一个 24 CPU 的系统,我打算看看线程的增加和 CPU 的增加将如何影响性能以及是否值得。
-
@EdHeal 如果您甚至不确定计算是否值得并行运行,那么 GPU 有什么意义?
标签: c multithreading matrix parallel-processing