From 191b0205e6488655d9ed78f48fdaff62424cfd18 Mon Sep 17 00:00:00 2001 From: AZEN-SGG Date: Tue, 8 Apr 2025 20:22:08 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=20=D1=81=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=D0=BC=20=D0=BF=D0=BE=20=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D0=BB=D0=B1=D1=86=D0=B0=D0=BC,=20=D0=BD=D0=B5=20=D1=81=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=BB=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2025.04.04/dist/Krivoruchenko_SK/Makefile | 6 +++--- 2025.04.04/dist/Krivoruchenko_SK/solve.c | 17 +++++++++-------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/2025.04.04/dist/Krivoruchenko_SK/Makefile b/2025.04.04/dist/Krivoruchenko_SK/Makefile index b29f78f..b49b1fd 100644 --- a/2025.04.04/dist/Krivoruchenko_SK/Makefile +++ b/2025.04.04/dist/Krivoruchenko_SK/Makefile @@ -10,17 +10,17 @@ WFLAGS = -fstack-protector-all -W -Wall -Wextra -Wunused \ CFLAGS = -mfpmath=sse -std=gnu99 -O3 -TARGET = a.exe +TARGET = a.out OBJ = main.o solve.o array_io.o init_f.o matrix.o %.o: %.c gcc $(CFLAGS) $(WFLAGS) -c $< -o $@ $(TARGET): $(OBJ) - gcc $^ -o $@ -lm -lssp + gcc $^ -o $@ -lm gdb: CFLAGS = -mfpmath=sse -std=gnu99 -g gdb: clean $(TARGET) clean: - del -f *.o *.exe + rm -f *.o *.out diff --git a/2025.04.04/dist/Krivoruchenko_SK/solve.c b/2025.04.04/dist/Krivoruchenko_SK/solve.c index 22ad70f..b5c1a76 100644 --- a/2025.04.04/dist/Krivoruchenko_SK/solve.c +++ b/2025.04.04/dist/Krivoruchenko_SK/solve.c @@ -45,11 +45,11 @@ int t14_solve(int n, double * restrict A, double * restrict X, int * restrict c) int kn = k*n; int in = max_i*n; - for (int im = max_i, ik = k; im < n*n; im+=n, ik+=n) + for (int mj = in, kj = kn; mj < in+n; ++mj, ++kj) { - double swap = X[ik]; - X[ik] = X[im]; - X[im] = swap; + double swap = X[mj]; + X[mj] = X[kj]; + X[kj] = swap; } for (int i = k; i < n; ++i) @@ -91,7 +91,6 @@ int t14_solve(int n, double * restrict A, double * restrict X, int * restrict c) // print_matrix(X, n, n); } - transpose(n, X); gauss_back_substitution(n, A, X); // Возвращаем строки назад @@ -150,15 +149,17 @@ void gauss_inverse(const int n, const int k, double * restrict A, double * restr // Меняем обратную матрицу for (int j = 0; j < n; ++j) { + const int BS = 32; double xkj = X[kn + j]; if (fabs(xkj) <= eps) continue; xkj *= inv_akk; X[kn + j] = xkj; - - for (int i = k+1; i < n; i++) - X[i*n + j] -= xkj * A[i*n + k]; + + for (int i_block = k + 1; i_block < n; i_block += BS) + for (int i = i_block; i < i_block + BS && i < n; ++i) + X[i * n + j] -= xkj * A[i * n + k]; } for (int i = k+1; i < n; ++i)