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)