Я использую библиотеку ExtremeOptimization для 2D-симуляции. У меня есть огромные разреженные матрицы, которые мне нужно заполнить. Одна возможность состоит в том, чтобы заполнить их синхронно l oop, как в этом коде:
int amountX = 10;
int amountY = 10;
SparseMatrix<double> J = Matrix.CreateSparse<double>(amountX, amountY);
for (int i = 0; i < amountX; i++)
{
for (int j = 0; j < amountY; j++)
J[i, j] = i + j;
}
Но поскольку мои матрицы довольно большие (порядка 10000x10000), я бы предпочел заполнить их параллельно l oop как в этом коде:
int amountX = 10;
int amountY = 10;
SparseMatrix<double> J = Matrix.CreateSparse<double>(amountX, amountY);
Parallel.For(0, amountX, i =>
{
for (int j = 0; j < amountY; j++)
J[i, j] = i + j;
});
Однако, если я делаю это параллельно, программирование НЕ работает нормально. (Иногда происходит сбой, потому что «Невозможно найти свободное место, даже если оно должно существовать.», И иногда оно работает до конца, но числа в матрице на самом деле не верны.)
Есть ли В любом случае, чтобы заполнить разреженную матрицу в ExtremOptimization асинхронным / параллельным способом?