Существуют ли какие-либо алгоритмы, которые позволяют эффективно создавать (заполнять элементами) разреженную (например, CSR или координатную) матрицу параллельно?
Параллельное создание разреженных матриц
Ответы (2)
Если вы храните свою матрицу как карту координат, любой язык, имеющий доступную параллельную реализацию словаря, должен сделать эту работу за вас.
У Java есть ConcurrentHashMap, а у .NET 4 есть ConcurrentDictionary, оба из которых позволяют многопоточную неблокирующую (афаик) вставку элементов параллельно.
Не существует эффективных алгоритмов для создания разреженных матриц параллельным по данным способом. Правдоподобным является тип координатной матрицы, который требует сортировки после заполнения содержимого, но этот тип медленный для матричных продуктов и т. д.
Решение заключается в том, что вы не строите разреженную матрицу — вы не храните ее в памяти; вы выполняете неявные операции на месте, когда вычисляете элементы разреженной матрицы.