C#中2个很大矩阵相乘,如何用多线程来实现?

 我来答
雨兰吟G
2012-12-01 · TA获得超过1082个赞
知道小有建树答主
回答量:282
采纳率:100%
帮助的人:445万
展开全部
a*b的矩阵乘b*c的矩阵得a*c的矩阵。
我们可以对a中的每一列分配一个线程进行单独计算。因为列中元素的值之间计算互不影响。
所以大致可以这样:
static double[,] MatrixMultiply(double[,] aMat, double[,] bMat)
{
int aRow = aMat.GetLength(0), aCol = aMat.GetLength(1);
int bRow = bMat.GetLength(0), bCol = bMat.GetLength(1);
if (aCol != bRow) throw new InvalidOperationException("矩阵无法相乘");
int cRow = aRow, cCol = bCol;
double[,] cMat = new double[cRow, cCol];
Action<int> calcRow = (r) =>
{
for (int i = 0; i < cCol; i++)
{
for (int j = 0; j < aRow; j++)
{
cMat[i, r] = cMat[i, r] + aMat[j, i] * bMat[r, j];
}
}
};
Parallel.For(0, cRow, calcRow); //直接使用Parallel.For来处理并行,而不需要自己控制线程。
/*
不并行的话就是这样。
for (int i = 0; i < cRow; i++)
{
calcRow(i);
}
*/
return cMat;
}
百度网友22b0977
2012-12-01 · TA获得超过278个赞
知道小有建树答主
回答量:268
采纳率:0%
帮助的人:166万
展开全部
简单的线程的话,可以使用线程控件,很方便。
如果你想问的是超大的矩阵,计算数据量特别大的话,多线程也没办法提速,只能让你在计算的时候,软件可以响应你的系统消息。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhou2214
2012-12-01 · TA获得超过706个赞
知道小有建树答主
回答量:495
采纳率:0%
帮助的人:510万
展开全部
1.创建一个委托,并用一个函数接口实例化委托。
2.创建一个辅助线程,并用上面的委托初始化线程。
3.开启线程,注意在辅助线程结束后,返回主线程想要的数据。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式