71 lines
2.1 KiB
C++
71 lines
2.1 KiB
C++
|
#include <cstdint>
|
||
|
#include <stdlib.h>
|
||
|
#include <iostream>
|
||
|
#include <vector>
|
||
|
#include <fstream>
|
||
|
#include <sstream>
|
||
|
|
||
|
void print_matrix(const std::vector<std::vector<uint64_t>>& 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<std::vector<uint64_t>> gemm_basic(const std::vector<std::vector<uint64_t>>& matrix1,
|
||
|
const std::vector<std::vector<uint64_t>>& matrix2) {
|
||
|
std::vector<std::vector<uint64_t>> output_matrix(matrix1.size(), std::vector<uint64_t>(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<std::vector<uint64_t>> read_csv(const std::string file_name) {
|
||
|
std::vector<std::vector<uint64_t>> output_matrix;
|
||
|
std::vector<uint64_t> 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;
|
||
|
}
|