Распараллеливание numpy.sortPython

Программы на Python
Anonymous
Распараллеливание numpy.sort

Сообщение Anonymous »

Мне нужно отсортировать массивы uint64 длиной 1e8-1e9, что является одним из узких мест в моем текущем проекте. Я только недавно обновил версию numpy v2.0, в которой алгоритм сортировки значительно оптимизирован. Тестируя его на своем оборудовании, он примерно в 5 раз быстрее, чем версия numpy v1.26. Но в настоящее время алгоритм сортировки numpy не может использовать многоядерные процессоры, хотя он использует SIMD.
Я пытался распараллелить его и сортировать несколько np.array одновременно. Один из возможных подходов — использовать numba prange, но numba всегда плохо поддерживала сортировку numpy. numba.jit даже замедляет работу np.sort, а numba v0.60.0 не поддерживает оптимизацию сортировки numpy v2.0 (https://github.com/numba/numba/issues/9611). Альтернативой является cython prange, но cython не позволяет создавать объекты Python в nogil. Есть ли способ параллельно сортировать numpy.array, используя cython или иначе? Если вы используете библиотеки параллельной сортировки cpp, будут ли они быстрее, чем собственная сортировка numpy, принимая во внимание накладные расходы на преобразования типов данных?
arr=np.random.randint(0,2**64,int(3e8),dtype='uint64')

sorted_arr=np.sort(arr) # single thread np.sort takes 4 seconds (numpy v2.0.0)


Подробнее здесь: https://stackoverflow.com/questions/786 ... numpy-sort

Вернуться в «Python»