#include #include #include #include #include #include const std::size_t N = 32, M = N * N; const int A = 1, B = 2; int v1[N][M], v2[M][M], v3[N][M]; struct initializer { initializer() : father(getpid()) { for (std::size_t i = 0; i < N; ++i) for (std::size_t j = 0; j < M; ++j) { v1[i][j] = A; for (std::size_t k = 0; k < M; ++k) v2[j][k] = B; v3[i][j] = 0; } } ~initializer() { if (getpid() == father) { long long sum = 0; for (const auto &i : v3) sum += std::accumulate(std::begin(i), std::end(i), 0ll); // std::cout << sum << std::endl; assert(sum == A * B * M * M * N); } } pid_t father; } _; void work(std::size_t begin, std::size_t end) { for (std::size_t i = begin; i < end; ++i) for (std::size_t k = 0; k < M; ++k) for (std::size_t j = 0; j < M; ++j) v3[i][j] += v1[i][k] * v2[k][j]; }