From 4f8f23d0ae0840d4432873be0c9e70e10ef50d3a Mon Sep 17 00:00:00 2001 From: TomatenMarc <marc.feger@uni-duesseldorf.de> Date: Wed, 23 May 2018 22:13:20 +0200 Subject: [PATCH] Add Priority Example --- Priority/main | Bin 0 -> 13664 bytes Priority/matrix.c | 22 +++++++++++++ Priority/matrix.h | 3 ++ Priority/maximum.c | 78 ++++++++++++++++++++++++++++++++++++++++++++ Priority/priority.c | 72 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 175 insertions(+) create mode 100755 Priority/main create mode 100644 Priority/matrix.c create mode 100644 Priority/matrix.h create mode 100644 Priority/maximum.c create mode 100644 Priority/priority.c diff --git a/Priority/main b/Priority/main new file mode 100755 index 0000000000000000000000000000000000000000..8a379b43b98d21c11e78b9a4e3ef06de39ede524 GIT binary patch literal 13664 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 MmS(6&lSH>408IcHh5!Hn literal 0 HcmV?d00001 diff --git a/Priority/matrix.c b/Priority/matrix.c new file mode 100644 index 0000000..cd6561a --- /dev/null +++ b/Priority/matrix.c @@ -0,0 +1,22 @@ +#include <stdlib.h> + +#define getAddress(matrix_pointer, current_row, current_column, columns) (matrix_pointer + current_row * columns + current_column) + + +void initializeMatrix(long long* matrix, int rows, int cols) { + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + *getAddress(matrix, i, j, cols) = rand() % 100; + } + } +} + +void multiplyMatrices(long long* matrixA, long long* matrixB, long long* matrixC, int rowsA, int colsA, int colsB) { + for (int i = 0; i < rowsA; i++) { + for(int j = 0; j < colsB; j++) { + for (int k = 0; k < colsA; k++) { + *getAddress(matrixC, i, j, colsB) += *getAddress(matrixA, i, k, colsA) * *getAddress(matrixB, k, j, colsB); + } + } + } +} \ No newline at end of file diff --git a/Priority/matrix.h b/Priority/matrix.h new file mode 100644 index 0000000..b8e5b02 --- /dev/null +++ b/Priority/matrix.h @@ -0,0 +1,3 @@ +void initializeMatrix(long long* matrix, int rows, int cols); + +void multiplyMatrices(long long* matrixA, long long* matrixB, long long* matrixC, int rowsA, int colsA, int colsB); diff --git a/Priority/maximum.c b/Priority/maximum.c new file mode 100644 index 0000000..a6c04e4 --- /dev/null +++ b/Priority/maximum.c @@ -0,0 +1,78 @@ +#include "matrix.h" +#include <limits.h> +#include <pthread.h> +#include <stdio.h> +#include <stdlib.h> +#include <time.h> + + +typedef struct parameters { + long long* arr; + int index; + +} param_t; + + +int get_maximum(int* arr, int length) { + int max = 0; + + for (int i = 0; i < length; i++) { + int value = *(arr + i); + if (value > max) { + max = value; + } + } + + return max; +} + +void* get_maximum_parallel(void* data) { + param_t *arr = ((param_t*) data); + + printf("%d\n", arr->index); + + return NULL; +} + + +int main (int argc, const char* argv[]) { + if (argc != 4) { + printf("Usage: maximum <array length> <number of threads>\n"); + exit(EXIT_FAILURE); + } + + long threads = strtol(argv[1], NULL, 10); + long ROWS = strtol(argv[2], NULL, 10); + long COLS = strtol(argv[3], NULL, 10); + + + printf("Initializing...\n"); + srand(time(NULL)); + printf("Starting...\n"); + struct timespec start, end; + clock_gettime(CLOCK_MONOTONIC, &start); + + pthread_t pthreads[threads]; + for (int i = 0; i < threads; i++) { + + param_t* data = (param_t*) malloc(sizeof(param_t)); + data->arr = malloc(threads*sizeof(long long)); + data->index = i; + if (pthread_create(&pthreads[i], NULL, get_maximum_parallel, data) != 0) { + printf("Could not create threads\n"); + exit(EXIT_FAILURE); + } + } + + for (int i = 0; i < threads; i++) { + pthread_join(pthreads[i], NULL); + } + + clock_gettime(CLOCK_MONOTONIC, &end); + + //printf("Maximum: %d; determined in %ld ms\n", get_maximum(results, threads), + // (end.tv_sec - start.tv_sec) * 1000 + (end.tv_nsec - start.tv_nsec) / 1000 / 1000); + + //free(arr); + //free(results); +} diff --git a/Priority/priority.c b/Priority/priority.c new file mode 100644 index 0000000..a796fd7 --- /dev/null +++ b/Priority/priority.c @@ -0,0 +1,72 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <pthread.h> +#include <time.h> +#include "matrix.h" + + +#define THREADS 10 +#define DIMENSION 1000 + +struct param{ + long long *matrixA; + long long *matrixB; + long long *matrixC; +}; + +typedef struct param param_t; + +void *worker(void *param){ + param_t *args = (param_t*)param; + + struct timespec start, end; + clock_gettime(CLOCK_MONOTONIC, &start); + + multiplyMatrices(args->matrixA, args->matrixB, args->matrixC, DIMENSION, DIMENSION, DIMENSION); + clock_gettime(CLOCK_MONOTONIC, &end); + + long long *time = malloc(sizeof(long long)); + *time = (end.tv_sec - start.tv_sec) * 1000 + (end.tv_nsec - start.tv_nsec) / 1000 / 1000; + return (void*) time; +} + + +int main(void){ + + pthread_t threads[THREADS]; + param_t *parameters = malloc(sizeof(param_t)); + + parameters->matrixA = (long long*)malloc(DIMENSION * DIMENSION * sizeof(long long)); + parameters->matrixB = (long long*)malloc(DIMENSION * DIMENSION * sizeof(long long)); + parameters->matrixC = (long long*)malloc(DIMENSION * DIMENSION * sizeof(long long)); + + initializeMatrix(parameters->matrixA, DIMENSION, DIMENSION); + initializeMatrix(parameters->matrixB, DIMENSION, DIMENSION); + + for(int i = 0; i < THREADS; i++){ + if(pthread_create(&threads[i], NULL, worker, (void**)parameters) != 0){ + perror("create error"); + return -1; + } + if(i == 0){ + struct sched_param param; + param.sched_priority = 99; + if(pthread_setschedparam(threads[i], SCHED_FIFO, ¶m)!=0){ + perror("set prio fail"); + return -1; + } + } + } + void *ret; + for(int i = 0; i < THREADS; i++){ + if(pthread_join(threads[i], (void*)&ret) != 0){ + perror("join error"); + return -1; + } + long long *result = (long long*)ret; + printf("Thread %d: %lld ms\n", i,*result); + } + + return 0; +} -- GitLab