Параллельное заполнение матриц - PullRequest
0 голосов
/ 24 марта 2020

Я использую библиотеку 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 асинхронным / параллельным способом?

...