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