#include #include #include #include #include #include void print_matrix(const std::vector>& matrix) { for (uint64_t column_index = 0; column_index < matrix[0].size(); column_index++) { for (uint64_t row_index = 0; row_index < matrix.size(); row_index++) { std::cout << matrix[row_index][column_index] << " "; } std::cout << "\n"; } } std::vector> gemm_basic(const std::vector>& matrix1, const std::vector>& matrix2) { std::vector> output_matrix(matrix1.size(), std::vector(matrix2[0].size(), 0)); uint64_t sum; for (uint64_t i = 0; i < matrix1.size(); i++) { for (uint64_t j = 0; j < matrix2[0].size(); j++) { sum = 0; for (uint64_t k = 0; k < matrix1.size(); k++) { sum += matrix1[i][k] * matrix2[k][j]; } output_matrix[i][j] = sum; } } return output_matrix; } std::vector> read_csv(const std::string file_name) { std::vector> output_matrix; std::vector row; std::string line; uint64_t column_index = 0; std::ifstream input_stream(file_name); while (std::getline(input_stream, line)) { uint64_t vertex_count = (line.length()+1)/2; output_matrix.resize(vertex_count); for (uint64_t row_index = 0; row_index < vertex_count; row_index++) { output_matrix[row_index].push_back(0); } row.clear(); std::stringstream ss(line); std::string token; char delimiter = ';'; while (getline(ss, token, delimiter)) { row.push_back(strtoul(token.c_str(), NULL, 0)); } for (uint64_t row_index = 0; row_index < row.size(); row_index++) { output_matrix[row_index][column_index] = row[row_index]; } column_index++; } return output_matrix; }