User Tools

Site Tools


muszaki_informatika:matrix_szorzas_gyorsitasa

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
muszaki_informatika:matrix_szorzas_gyorsitasa [2025/02/12 10:22] knehezmuszaki_informatika:matrix_szorzas_gyorsitasa [2025/02/12 10:29] (current) knehez
Line 72: Line 72:
 \begin{bmatrix} 3 & 4 \\ 7 & 8 \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+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\cdot1 + 2\cdot0 & 1\cdot0 + 2\cdot1 \\ 5\cdot1 + 6\cdot0 & 5\cdot0 + 6\cdot1 \end{bmatrix} =
Line 85: Line 85:
 === Végeredmény === === Végeredmény ===
  
-Hasonlóan számolva az összes blokkot:+Hasonlóan számolva az összes blokkra ez lesz a végeredmény:
  
 $$ C = $$ C =
Line 95: Line 95:
 \end{bmatrix} $$ \end{bmatrix} $$
  
 +Miért gyorsabb ez a módszer?
 +  * Cache-hatékonyság: Egy blokk adatai könnyebben beleférnek a CPU gyorsítótárába.
 +  * Kevesebb memória-hozzáférés: A kisebb méretű részmátrixok többször felhasználhatók anélkül, hogy újra és újra be kellene tölteni a RAM-ból.
 +  * Jól párhuzamosítható: Az egyes blokkok párhuzamosan is számolhatók több CPU magon vagy GPU-n.
 +
 +**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];
 +                        }
 +                    }
 +                }
 +            }
 +        }
 +    }
 +}
 +</sxh>
muszaki_informatika/matrix_szorzas_gyorsitasa.1739355741.txt.gz · Last modified: 2025/02/12 10:22 by knehez