lab 3 working
This commit is contained in:
73
03-MatrixAddition (fork)/matAddSingle.c
Normal file
73
03-MatrixAddition (fork)/matAddSingle.c
Normal file
@@ -0,0 +1,73 @@
|
||||
#include <stdio.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
|
||||
#define NS_PER_SEC 1000000000
|
||||
|
||||
|
||||
static inline uint64_t gettime_ns() {
|
||||
struct timespec ts;
|
||||
clock_gettime(CLOCK_REALTIME, &ts);
|
||||
return ts.tv_sec * NS_PER_SEC + ts.tv_nsec;
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
uint64_t start, end;
|
||||
int rows, cols;
|
||||
|
||||
// Matrix 1
|
||||
FILE* input1 = fopen(argv[1], "r");
|
||||
fscanf(input1, "%d", &rows);
|
||||
fscanf(input1, "%d", &cols);
|
||||
int * matrix1 = (int *)malloc(rows*cols*sizeof(int));
|
||||
for(int i = 0; i < rows*cols; i++) {
|
||||
int value;
|
||||
fscanf(input1, "%d", &value);
|
||||
matrix1[i] = value;
|
||||
}
|
||||
fclose(input1);
|
||||
|
||||
// Matrix 2
|
||||
FILE* input2 = fopen(argv[2], "r");
|
||||
fscanf(input2, "%d", &rows);
|
||||
fscanf(input2, "%d", &cols);
|
||||
|
||||
int * matrix2 = (int *)malloc(rows*cols*sizeof(int));
|
||||
for(int i = 0; i < rows*cols; i++) {
|
||||
int value;
|
||||
fscanf(input2, "%d", &value);
|
||||
matrix2[i] = value;
|
||||
}
|
||||
fclose(input2);
|
||||
|
||||
|
||||
start = gettime_ns();
|
||||
int * result = (int *)malloc(rows*cols*sizeof(int));
|
||||
|
||||
// Perform Single Process Matrix Addition
|
||||
for(int i= 0; i < rows*cols; i++){
|
||||
result[i] = matrix1[i] + matrix2[i];
|
||||
}
|
||||
|
||||
end = gettime_ns();
|
||||
|
||||
// Print result to console
|
||||
for (int i = 0; i < rows * cols; i++) {
|
||||
printf("%2d ", result[i]);
|
||||
if ((i + 1) % cols == 0) {
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
printf("Addition took %" PRIu64 " nanoseconds\n", end - start);
|
||||
|
||||
free(matrix1);
|
||||
free(matrix2);
|
||||
free(result);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user