Матрица Python содержит numpy.dot ()

Во время моего знакомства с CUDA в Python (numba lib), я реализовал методы предоставления матрицы:

  • Просто с numpy.dot()
  • Алгоритм Strassen с numpy.dot()
  • Метод блоков на GPU
  • Алгоритм Strassen на GPU

Поэтому я тестировал его на двух типах данных:

  • numpy.random.randint(0, 5, (N, N)) # with int32 elements
  • numpy.random.random((N, N)) # with float64 elements

Для int32 я получил ожидаемый результат, когда мои GPG-альгроизмы выполнялись лучше, чем CPU с numpy: введите описание изображения здесь

Однако на float64 тип numpy.dot() превосходил все мои GPU-методы: введите описание изображения здесь

Итак, вопрос: почему numpy.dot() так быстро работает с массивами float64 , и использует ли numpy GPU?

2 Solutions collect form web for “Матрица Python содержит numpy.dot ()”

Типичная установка numpy будет динамически связана с библиотекой BLAS , которая предоставляет процедуры для матричной матрицы и умножения матрицы-вектора. Например, когда вы используете np.dot() в паре массивов float64, numpy dgemm процедуру BLAS dgemm в фоновом режиме. Хотя эти функции библиотеки работают на процессоре, а не на графическом процессоре, они часто многопоточны и очень точно настроены для производительности. Хорошая реализация BLAS, такая как MKL или OpenBLAS , вероятно, будет трудно превзойти с точки зрения производительности даже на графическом процессоре *.

Однако BLAS поддерживает только типы с плавающей точкой. Если вы np.dot() на целочисленных массивах, numpy вернется к использованию очень простой внутренней реализации C ++ , которая является однопоточной и намного медленнее, чем BLAS-точка на двух массивах с плавающей запятой.

Не зная больше о том, как вы проводили эти тесты, я бы поспорил, что простой вызов numpy.dot также с комфортом побьет ваши другие 3 метода для массивов float32, complex64 и complex128, которые являются другими тремя типами, поддерживаемыми BLAS.


* Одним из возможных способов превзойти стандартную BLAS будет использование cuBLAS , которая является реализацией BLAS, которая будет работать на графическом процессоре NVIDIA. Библиотека scikit-cuda кажется, обеспечивает привязки Python для нее, хотя я никогда не использовал ее сам.

Я понимаю, что numpy будет автоматически использовать несколько процессоров cpu, где у него есть скомпилированные библиотеки. Для некоторых функций (и я думаю, что точка () была одной из них, хотя я не могу найти ее сейчас). Я подозреваю, что это то, что происходит. Я не знаю никаких попыток получить конец nump gpu http://www.reddit.com/r/Python/comments/1mw9mb/is_there_a_gpu_backend_for_numpyscipy_money_is_no/

  • Улучшить pandas (PyTables?) Производительность записи таблицы HDF5
  • Почему pow (a, d, n) намного быстрее, чем ** d% n?
  • Почему log2 и log1p работают намного быстрее, чем log и log10?
  • Почему numpy медленнее, чем для цикла
  • Медленная производительность с мешком Python Dask?
  • Математика NumPy работает быстрее, чем Python?
  • Почему numpy медленнее, чем python? Как сделать код более эффективным
  • Насколько медленнее wxWidget написан на Python по сравнению с C ++?
  • Python - лучший язык программирования в мире.