Точечная операция разреженных матриц с выделением вершины n на пикуде - PullRequest
0 голосов
/ 24 апреля 2020

Я хотел бы вычислить произведение собственной точки разреженной матрицы с помощью Pycuda. Дело в том, что он может быть огромным (1 м x 50 КБ), поэтому он не помещается в ОЗУ.

Моя идея заключалась в том, чтобы делать именно то, что sparse_dot_topn , но перемещать его на основе графического процессора на pycuda, чтобы сделать это быстрее. Поэтому основная идея состоит в том, чтобы вычислить все результаты, но оставить только n лучших, чтобы ограничить использование памяти. Sparse_dot_topn делает это строка за строкой, поэтому моя идея состоит в том, чтобы сделать это путем набора строк в графическом процессоре, чтобы ускорить процесс.

Мой сценарий (см. Ниже) в настоящее время работает, но немного медленнее, чем реализация C ++ sparse_dot_topn, который находится на процессоре. Это заставляет меня думать, что у меня, вероятно, есть неоптимальная реализация с множеством узких мест (особенно когда речь идет о разделяемой памяти между потоками, потому что у меня нет опыта в параллельных вычислениях на GPU) шаг сравнения (чтобы сохранить только лучшие) очень медленный, но я действительно не знаю, как еще это сделать в pycuda. ​​

Пожалуйста, найдите код ниже, где A_csr - матрица в csr разреженный формат и A_cs c - это та же матрица, что и в формате cs c. Заранее благодарю за ваши идеи и / или идеи:)

...