2016-04-04 5 views
1

У меня есть большая матрица - 1045506 x 3, которую я хочу отсортировать, основываясь на 1-й колонке. Так как, это NumPy матрица, я могу использовать argsort, чтобы получить результатсортировка матрицы numpy на gpu

mat_sorted = mat[mat[:,0].argsort()]

Она занимает около 69ms, чтобы завершить этот шаг, который, кажется, немного высоко для меня.

Вопрос в том, есть ли способ ускорить вычисление с использованием графического процессора? Я смотрел на некоторые библиотеки, такие как pycuda, theano, но мне трудно понять документацию. Специально, часть вокруг передачи numpy массивов и матриц в gpu. Любые указатели будут чрезвычайно полезны.

+0

Интересный вопрос. Для меня не очевидно, есть ли простой способ распараллеливать операции сортировки в принципе. – roadrunner66

+0

@ roadrunner66: google "radix sort". – talonmies

ответ

0

В PyCUDA или scikit-cuda нет встроенных функций сортировки, о которых я знаю. Однако эффективная параллельная сортировка на графическом процессоре является в основном решаемой проблемой, и вы можете найти самые современные алгоритмы сортировки в библиотеке шаблонов Thrust, которая поставляется с каждой версией инструментария с момента выпуска CUDA 4.0.

Вики-панель PyCUDA включает в себя код complete example, вызывающий алгоритм сортировки по вертикали от PyCUDA.

Смежные вопросы