Почему это: < /p>
public static double[] Multiplication(int order, double[] d, List A, List J, int[] I)
{
double[] q = new double[order];
// Gather all local results here:
List localQs = new List();
Parallel.For(
0, order,
() => new double[order], // init thread-local qSection
(i, state, localQ) =>
{
for (int j = I; j < I[i + 1]; j++)
{
int col = J[j];
double a = A[j];
localQ += a * d[col];
if (col != I)
localQ[col] += a * d;
}
return localQ;
},
localQ =>
{
lock (localQs)
{
localQs.Add(localQ);
}
});
// Now merge with Kahan sum:
double[] c = new double[order];
KahanSum(localQs, order, q, c);
return q;
}
}
///
/// Kahan summation to merge multiple partial vectors for numerical consistency.
///
private static void KahanSum(List input, int order, double[] sum, double[] c)
{
foreach (var section in input)
{
for (int i = 0; i < order; i++)
{
double y = section - c;
double t = sum + y;
c = (t - sum) - y;
sum = t;
}
}
}
< /code>
Не такая же работа, как эта? < /p>
public static double[] Multiplication(int order, double[] d, List A, List J, int[] I)
{
double[] q = new double[order];
for (int i = 0; i < order; i++)
{
for (int j = I; j < I[i + 1]; j++)
{
int col = J[j];
double a = A[j];
q[i] += a * d[col];
if (col != I)
q[col] += a * d[I];
}
}
return q;
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... provide-th
Почему параллельная версия умножения редкой матрицы CSR не дает правильного результата? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему параллельная версия умножения редкой матрицы CSR не дает правильного результата?
Anonymous » » в форуме C# - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Самый быстрый способ вычислить сумму квадратов элементов результата умножения матрицы?
Anonymous » » в форуме Python - 0 Ответы
- 36 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Самый быстрый способ вычисления суммы квадратных элементов результата умножения матрицы?
Anonymous » » в форуме Python - 0 Ответы
- 33 Просмотры
-
Последнее сообщение Anonymous
-