Почему параллельная версия умножения редкой матрицы CSR не дает правильного результата?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему параллельная версия умножения редкой матрицы CSR не дает правильного результата?

Сообщение Anonymous »

Почему это: < /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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»