【发布时间】:2018-03-01 21:59:59
【问题描述】:
我们都知道矩阵转置有多大用处,写一个通用的算法供顺序使用是没问题的。但是,我在为多线程目的做同样的事情时遇到了一些麻烦,并且只有这个 4 x 4 的小机箱才能正常工作。
我的方法是将 double[][] 结构的相等部分(在本例中为 2 x 2)分配给四个线程中的每一个。在这种情况下,这意味着起始位置为 0,0 & 0,2 & 2,0 & 2,2。这是通过“kol”和“rad”传入的。
但是,我不能让它在更大的矩阵上工作,所以任何帮助都将不胜感激。我发现这个问题最接近的答案是:How to to parallelize the matrix transpose?
这也是我将 double[][] 结构拆分为四部分的灵感。我的(工作)4 x 4 代码可以在下面找到,那么如何修改它以适用于四个线程?
干杯!
public double[][] transponerMatrise(double[][] matrise, int rad, int
kol, int id)
{
if((id != 2))
{
for (int i = rad; i < n/2 + rad; i++)
{
for (int j = kol+1; j < n/2 + kol; j++)
{
System.out.println("Traad " + id + " bytter " + i + "," + j + " med " + j + "," + i);
System.out.println("Value is " + matrise[i][j] + ", " + matrise[j][i]);
element = matrise[i][j];
matrise[i][j] = matrise[j][i];
matrise[j][i] = element;
}
}
}
else
{
for (int i = rad; i < n/2 + rad-1; i++)
{
for (int j = kol; j < n/2 + kol; j++)
{
System.out.println("Traad " + id + " bytter " + i + "," + j + " med " + j + "," + i);
System.out.println("Value is " + matrise[i][j] + ", " + matrise[j][i]);
element = matrise[i][j];
matrise[i][j] = matrise[j][i];
matrise[j][i] = element;
}
}
}
return matrise;
}
PS:我知道代码可以正常工作,因为我有一个针对工作顺序变体的检查方法。
【问题讨论】:
标签: java multithreading matrix parallel-processing transpose