GeMM
Genel matris çarpımı (General Matrix Multiply, GeMM) yöntemi, iki matrisin genel çarpımını uygular. İşlem C ← α A B + β C olarak tanımlanır, burada A ve B matrisleri isteğe bağlı olarak devrik olabilir. AB matrislerinin (MatMul) normal çarpımı ile alpha skalerin 1'e eşit olduğu, beta'nın da sıfıra eşit olduğu varsayılır.
Verimlilik açısından GeMM ve MatMul arasındaki temel fark, MatMul'un her zaman yeni bir matris/vektör nesnesi oluşturması, GeMM'in ise mevcut matris nesnesi üzerinde çalışması, onu yeniden oluşturmamasıdır. Bu nedenle, GeMM'i kullandığınızda ve ilgili matris için belleği önceden tahsis ettiğinizde, devamında aynı matris büyüklüğüyle çalışırken bellek yeniden tahsisi olmayacaktır. Bu, örneğin strateji sınayıcıda optimizasyon veya sinir ağı eğitimi gerçekleştirilmesi gibi toplu hesaplamalarda GeMM'in önemli bir avantajı olabilir.
MatMul'a benzer şekilde, GeMM de 4 aşırı yüke sahiptir. Ancak, dikey vektörün yatay vektörle çarpılmasının sağlanması amacıyla dördüncü aşırı yükün anlamı değiştirilmiştir.
Mevcut bir matris/vektör nesnesinde, belleği önceden tahsis etmek gerekli değildir. Bellek, ilk GeMM çağrısında tahsis edilecek ve 0'larla doldurulacaktır.
Bir matrisi bir matrisle çarpma: matrix C[M][N] = α * ( matrix A[M][K] * matrix B[K][N]) + β * matrix C[M][N]
bool matrix::GeMM(
|
Bir vektörü bir matrisle çarpma: vector C[N] = α * ( vector A[K] * matrix B[K][N]) + β * vector C[N]
bool vector::GeMM(
|
Bir matrisi bir vektörle çarpma: vector C[M] = α * ( matrix A[M][K] * vector B[K] * ) + β * vector C[M]
bool vector::GeMM(
|
Bir vektörü bir vektörle çarpma: matrix C[M][N] = α * ( vector A[M] * vector B[N] * ) + β * matrix C[M][N]. Bu aşırı yük, bir skalerin geri döndürüldüğü MatMul'un aksine, bir matris geri döndürür.
bool matrix::GeMM(
|
Parametreler
A
[in] Matris veya vektör.
B
[in] Matris veya vektör.
alpha
[in] AB çarpımı için alpha çarpanı.
beta
[in] Ortaya çıkan C matrisi için beta çarpanı.
flags
[in] A, B ve C matrislerinin devrik olup olmadığını tanımlayan ENUM_GEMM numaralandırması değeri.
Geri dönüş değeri
Başarılı olursa true, aksi takdirde false geri döndürür.
GeMM metodu için bayrakların numaralandırması.
Kimlik |
Açıklama |
---|---|
TRANSP_A |
Devrik A matrisini kullan |
TRANSP_B |
Devrik B matrisini kullan |
TRANSP_C |
Devrik C matrisini kullan |
Not
float, double ve complex türdeki matrisler ve vektörler, A ve B parametreleri olarak kullanılabilir. GeMM metodunun şablon varyantları aşağıdaki gibidir:
bool matrix<T>::GeMM(const matrix<T> &A,const matrix<T> &B,T alpha,T beta,ulong flags);
|
Temel olarak genel matris çarpımı fonksiyonu şu şekilde tanımlanır:
C[m,n] = α *Sum(A[m,k]*B[k,n]) + β*C[m,n] |
Burada A matrisi M x K, B matrisi K x N ve C matrisi de M x N büyüklüğündedir.
Bu nedenle, matrisler çarpma işlemi için uyumlu olmalıdır, yani birinci matristeki sütun sayısı, ikinci matristeki satır sayısına eşit olmalıdır. Matris çarpımı değişmeli değildir: genel olarak, birinci matrisin ikinci matrisle çarpımının sonucu, ikinci matrisin birinci matrisle çarpımının sonucuna eşit değildir.
Örnek:
void OnStart()
|
Ayrıca bakınız