muszaki_informatika:matrix_szorzas_gyorsitasa
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| muszaki_informatika:matrix_szorzas_gyorsitasa [2025/02/12 10:15] – created knehez | muszaki_informatika:matrix_szorzas_gyorsitasa [2025/02/12 10:29] (current) – knehez | ||
|---|---|---|---|
| Line 61: | Line 61: | ||
| \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} | \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} | ||
| \end{bmatrix}$$ | \end{bmatrix}$$ | ||
| + | |||
| + | === Mátrix szorzása blokkonként === | ||
| + | |||
| + | $$ C_{ij} = \sum_{k} A_{ik} \cdot B_{kj} $$ | ||
| + | |||
| + | Ahol minden C blokk a megfelelő A és B blokkok szorzataként adódik. | ||
| + | |||
| + | Első blokk (C₁₁): $$C_{11} = A_{11} \cdot B_{11} + A_{12} \cdot B_{21}$$ | ||
| + | $$ \begin{bmatrix} 1 & 2 \\ 5 & 6 \end{bmatrix} \cdot \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} + | ||
| + | \begin{bmatrix} 3 & 4 \\ 7 & 8 \end{bmatrix} \cdot \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}$$ | ||
| + | |||
| + | Számoljuk ki az egyes részmátrixok szorzatát: | ||
| + | |||
| + | $$ \begin{bmatrix} 1\cdot1 + 2\cdot0 & 1\cdot0 + 2\cdot1 \\ 5\cdot1 + 6\cdot0 & 5\cdot0 + 6\cdot1 \end{bmatrix} = | ||
| + | \begin{bmatrix} 1 & 2 \\ 5 & 6 \end{bmatrix}$$ | ||
| + | |||
| + | $$\begin{bmatrix} 3\cdot1 + 4\cdot0 & 3\cdot0 + 4\cdot1 \\ 7\cdot1 + 8\cdot0 & 7\cdot0 + 8\cdot1 \end{bmatrix} = | ||
| + | \begin{bmatrix} 3 & 4 \\ 7 & 8 \end{bmatrix}$$ | ||
| + | |||
| + | Összeadva: | ||
| + | $$ \begin{bmatrix} 1 & 2 \\ 5 & 6 \end{bmatrix} + \begin{bmatrix} 3 & 4 \\ 7 & 8 \end{bmatrix} = \begin{bmatrix} 4 & 6 \\ 12 & 14 \end{bmatrix}$$ | ||
| + | |||
| + | === Végeredmény === | ||
| + | |||
| + | Hasonlóan számolva az összes blokkra ez lesz a végeredmény: | ||
| + | |||
| + | $$ C = | ||
| + | \begin{bmatrix} | ||
| + | 4 & 6 & 4 & 6 \\ | ||
| + | 12 & 14 & 12 & 14 \\ | ||
| + | 20 & 22 & 22 & 20 \\ | ||
| + | 28 & 30 & 30 & 28 | ||
| + | \end{bmatrix} $$ | ||
| + | |||
| + | Miért gyorsabb ez a módszer? | ||
| + | * Cache-hatékonyság: | ||
| + | * Kevesebb memória-hozzáférés: | ||
| + | * Jól párhuzamosítható: | ||
| + | |||
| + | **C** implementáció: | ||
| + | |||
| + | <sxh c> | ||
| + | void multiplyMatricesBlocked(int A[N][N], int B[N][N], int C[N][N]) { | ||
| + | // Eredménymátrix nullázása | ||
| + | for (int i = 0; i < N; i++) { | ||
| + | for (int j = 0; j < N; j++) { | ||
| + | C[i][j] = 0; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // Blokkosított szorzás | ||
| + | for (int bi = 0; bi < N; bi += BLOCK_SIZE) { | ||
| + | for (int bj = 0; bj < N; bj += BLOCK_SIZE) { | ||
| + | for (int bk = 0; bk < N; bk += BLOCK_SIZE) { | ||
| + | |||
| + | // Blokkon belüli műveletek | ||
| + | for (int i = bi; i < bi + BLOCK_SIZE; i++) { | ||
| + | for (int j = bj; j < bj + BLOCK_SIZE; j++) { | ||
| + | for (int k = bk; k < bk + BLOCK_SIZE; k++) { | ||
| + | C[i][j] += A[i][k] * B[k][j]; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
muszaki_informatika/matrix_szorzas_gyorsitasa.1739355343.txt.gz · Last modified: 2025/02/12 10:15 by knehez
