Skip to content

Commit 47bef34

Browse files
mul_strassen: avoid computing some entries twice (#2076)
* mul_strassen: avoid computing some entries twice
1 parent 02d4e5d commit 47bef34

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

src/fmpz_mat/mul_strassen.c

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,22 @@ void fmpz_mat_mul_strassen(fmpz_mat_t C, const fmpz_mat_t A, const fmpz_mat_t B)
122122

123123
if (a > 2*anr)
124124
{
125-
fmpz_mat_t Ar, Cr;
125+
fmpz_mat_t Ar, Br, Cr;
126126
fmpz_mat_window_init(Ar, A, 2*anr, 0, a, b);
127-
fmpz_mat_window_init(Cr, C, 2*anr, 0, a, c);
128-
fmpz_mat_mul(Cr, Ar, B);
127+
fmpz_mat_window_init(Cr, C, 2*anr, 0, a, 2*bnc);
128+
129+
/* don't compute the overlapping entries twice */
130+
if (c > 2 * bnc)
131+
{
132+
fmpz_mat_window_init(Br, B, 0, 0, b, 2*bnc);
133+
fmpz_mat_mul(Cr, Ar, Br);
134+
fmpz_mat_window_clear(Br);
135+
}
136+
else
137+
{
138+
fmpz_mat_mul(Cr, Ar, B);
139+
}
140+
129141
fmpz_mat_window_clear(Ar);
130142
fmpz_mat_window_clear(Cr);
131143
}

src/gr_mat/mul_strassen.c

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,22 @@ int gr_mat_mul_strassen(gr_mat_t C, const gr_mat_t A, const gr_mat_t B, gr_ctx_t
147147

148148
if (ar > 2 * anr)
149149
{
150-
gr_mat_t Ar, Cr;
150+
gr_mat_t Ar, Br, Cr;
151151
gr_mat_window_init(Ar, A, 2 * anr, 0, ar, ac, ctx);
152-
gr_mat_window_init(Cr, C, 2 * anr, 0, ar, bc, ctx);
153-
status |= gr_mat_mul(Cr, Ar, B, ctx);
152+
gr_mat_window_init(Cr, C, 2 * anr, 0, ar, 2 * bnc, ctx);
153+
154+
/* don't compute the overlapping entries twice */
155+
if (bc > 2 * bnc)
156+
{
157+
gr_mat_window_init(Br, B, 0, 0, ac, 2 * bnc, ctx);
158+
status |= gr_mat_mul(Cr, Ar, Br, ctx);
159+
gr_mat_window_clear(Br, ctx);
160+
}
161+
else
162+
{
163+
status |= gr_mat_mul(Cr, Ar, B, ctx);
164+
}
165+
154166
gr_mat_window_clear(Ar, ctx);
155167
gr_mat_window_clear(Cr, ctx);
156168
}

0 commit comments

Comments
 (0)