Vector ile çarpma yaparken hangi algoritma/işlem kullanılıyor


#1

Vectorization dersinde for loop ile çarpmak yerine numpy kütüphanesinin çarpma yöntemi anlatılıyor. (kendi bilgisiyarımda denediğim örnekte de CPU ile yaklaşık 70 kat hızlıydı.)
İki matrisi çarparken bir şekilde elemanlara tek tek ulaşmak gerekmiyor mu, nasıl bu kadar hızlı oluyor?
Koordinaat düzlemi vs başka bir uzay ile mi çarpma işlemi gerçekleştiriliyor?
Burada kullanılan (np.dot) algoritma nasıl çalışıyor?


#3

Sorunun cevabı paralel computing.

Yobaz stili, worst case’de (edit: hatta bütün caselerde) O(n^2) sürecek bir çarpım işlemini, tek thread üzerinden yapılırsa; bir ömür training bitmez. Neyseki computer scientistler bu tip durumlar için paralel computing diye bir şey bulmuş, vectorization’da bunu sonuna kadar sömürüyor.

Detaylarını anlatmak isterim ama zaten anlatılmışı var.


#5

Cevap/link için teşekkürler. :slight_smile:
Sadece merakımdan soruyorum, for loop kodunu paralelleştirsek numpy ile aynı süreleri elde edebilir miyiz?


#2

np.dot işlemi
dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
eşit, yani a ve b matrislerinin elemanlarının çarpımının toplamı, burada b matrisini ters çevirmeniz gerekmekte.
Vektör çarpımında skalar sonuç verir, iç çarpım (inner product) hesaplar, 2 ve üstü boyutta dış çarpım (outer product) hesaplar. N boyutlu (çok büyük) matriste, a ve b’nin son satır-sütunları ve sondan bir önceki satır-sütunlarının bir toplam çarpımıdır, tüm elemanları hesapmamaz.
np.dot için alternatif matmul işlemidir, matmul ile skalar çarpım yapılmaz, matris boyutları mutlaka tam uyumlu olmalıdır…
detaylar için numpy dökümantasyonunu okuyabilirsiniz.
https://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html


#6

Hızlandırır ama numpy kadar hızlandıramazsın. Numpy arka planda C/C++ libararylerini vs. kullanıyor, kısaca bu işleri en hızlı şekilde yapabilmek için optimize edilmiş.

Matrix/vector çarpımı nasıl paralelleştirilir diye merak ediyorsan da bu linke bakıver (google’da çıkan ilk linki kopyaladım)